我有一个相对较大的数据库,其中包含1000万个商品和2500万个标签与商品的关系,我正在寻找最快的方法来查找具有最多类似标签数量的商品,例如项目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;
大约需要一秒钟。
有什么方法可以使搜索速度更快?也许有redis?数据库很少更改,因此可以花一些长时间运行的过程来准备此快速标记数据库。
除非绝对必要,否则我不想添加基于Java的东西,例如elasticsearch。