MySql全文或Sphinx或Lucene或其他什么?

时间:2011-02-09 11:22:09

标签: mysql lucene solr sphinx

我目前正在使用MySql并且有一些表需要执行布尔搜索。鉴于我的桌子是Innodb类型,我发现其中一个更好的方法是使用Sphinx或Lucene。我对使用它们有疑问,我的查询格式如下,

Select count(*) as cnt, DATE_FORMAT(CONVERT_TZ(wrdTrk.createdOnGMTDate,'+00:00',:zone),'%Y-%m-%d') as dat from t_twitter_tracking wrdTrk  where  wrdTrk.word like (:word) and   wrdTrk.createdOnGMTDate between :stDate and :endDate group by dat;

查询的日期字段需要转换为登录用户的时区,然后是用于执行分组的字段。

现在,如果我迁移到Sphinx / lucene,我将能够获得类似于上述查询的结果。我是Sphinx的初学者,我应该使用这两个中的哪一个,还是有更好的东西。

实际上groupby和搜索'wrdTrk.word like(:word)'是我查询的主要部分,我需要转向布尔搜索以增强用户体验。我的数据库大约有23652826行,db是基于Innodb的,MySql全文搜索不起作用。

此致 ROH

4 个答案:

答案 0 :(得分:0)

只有你需要正确索引数据并得到结果

答案 1 :(得分:0)

由于您只需要计数,我相信继续使用MySQL会更好。 如果您遇到性能问题,我建议您使用explain()并可能更好地建立索引以改进查询。 只有全文搜索是您的用例的主要部分,您才应该转向使用Sphinx / Solr。

阅读Full Text Search Engine versus DBMS以获得更全面的答案。

答案 2 :(得分:0)

是。狮身人面像可以做到这一点。我不知道LIKE (:word)的作用,但您可以在sphinx搜索中执行@word "exactword"之类的查询。

答案 3 :(得分:0)

将您的计数保存在元表中,并保持更新。或使用myisam,它保持自己的计数。 mongodb也保持自己的数量。缓存memcache中的计数。计算每次你需要知道计数是一种愚蠢的资源使用。