如何查找具有更高数量相似标签的商品?

时间:2019-01-18 10:10:46

标签: mysql search sphinx

我有一个相对较大的数据库,其中包含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。

0 个答案:

没有答案