поиск со стеммером

110
10 мая 2021, 09:30

вопрос в тормозах при нескольких словах одновременно

т.е. задача - найти документы, в которых одновременно упоминаются однокоренные слова для aaa и для bbb

разбираю слова стеммером, нахожу id слов, формирую джойны ON wordid IN ()

все хорошо было на маленькой базе, когда объемы выросли, все стало безбожно тупить.

добавил в таблицу слов счетчик документов, (++ при индексации документа) - чтобы не делать count(*) при каждом формировании запроса

сортирую джойны по возрастанию - то есть сначала приджойнится слово с 1 документом, потом с 10 , потом со 100.

со временем пришлось свернуть джойны во вложенные запросы и добавить force index

JOIN (
SELECT DISTINCT iw0.documid
FROM s2iwords iw0
WHERE iw0.wordid
IN ( 1602, 73605, 2912644, 3182817, 28832 ) 
)iwtmp ON iwtmp.documid = dc.documid
JOIN iwords iw1
FORCE INDEX ( doc2 ) ON iw1.documid = iwtmp.documid
AND iw1.wordid
IN ( 1603, 1959742, 4326670, 1574411, 4394943, 1353379, 3280260, 1352665, 1352697, 3502846, 3502847, 3502848, 3960094, 4315186, 3491600, 1277157, 949812, 3580166, 3558453, 10771, 3573210, 2519998, 4230002, 11155, 3598851, 687017, 1033452, 2255697, 89053, 3639402, 3649210, 3665338 ) 

это позволило убрать ненужные тормоза, но остались "нужные" - если пользователь вводит слова "документ и договор" (по каждому индексированно миллион документов) результат будет неразумен по скорости.

Ситуация осложняется тем, что в некоторых случаях надо искать по всем миллионам документов, а в некоторых свой есть отбор всего сотни. Заранее предсказать этого нельзя - это конструктор.

Варианты: - административно запретить такой поиск. - найти еще варианты

READ ALSO
Как объединить (просуммировать) данные в столбце по id?

Как объединить (просуммировать) данные в столбце по id?

У меня есть таблица со следующими данными:

91
Laravel, получение body params action-а

Laravel, получение body params action-а

Хочу написать пакет для автогенерации сваггера, или что-то вроде того

113
Открытие в браузере ответа от cURL (php)

Открытие в браузере ответа от cURL (php)

В наличии: браузер с js, сервер с php и cURL

119
Как сменить кодировку или заменить символ замены в функции file_get_contents

Как сменить кодировку или заменить символ замены в функции file_get_contents

Пытаюсь прочитать файл в котором написано:

118