我目前正在使用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
答案 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中的计数。计算每次你需要知道计数是一种愚蠢的资源使用。