Как найти элементы, имеющие большее количество похожих тегов? - PullRequest
0 голосов
/ 18 января 2019

У меня относительно большая база данных с 10 миллионами элементов и 25 миллионами отношений тегов к элементам, и я ищу самый быстрый способ найти элементы с наибольшим количеством похожих тегов, например, элемент 1 имеет теги a,b,c, элемент 2 d,b,c, элемент 3 d,e,c, здесь для элемента 1 элемент 2 имеет 2 аналогичных тега, а элемент 3 - 1.

Я пробовал поиск в MySQL следующим образом:

select itemid, count(*) tags 
from tags2items 
where tagid in (4,173,316,1219,4193,18462,18652,18871,19495,19735) 
group by itemid 
order by tags desc limit 10;

и это занимает 16 секунд, а запрос с самостоятельным объединением, вероятно, займет еще больше времени.

Я использую Sphinx для полнотекстового поиска с тегом в качестве MVA и запросом типа

SELECT id,(mva=7)+(mva=33)+(mva=129) as sorter 
from index 
where mva IN (7,33,129) 
order by sorter desc limit 10;

занимает около секунды.

Есть ли способ сделать этот поиск быстрее? Может с редисом? БД меняется нечасто, так что хорошо бы иметь какой-то длительный процесс подготовки этого быстрого тега БД.

Если в этом нет особой необходимости, я не хотел бы добавлять такие вещи на основе Java, какasticsearch.

...