【问题标题】:MySql Full text or Sphinx or Lucene or anything else?MySql 全文或 Sphinx 或 Lucene 或其他任何东西?
【发布时间】:2011-02-09 11:22:08
【问题描述】:

我目前正在使用 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 行,数据库是基于 Innodb 的,MySql 全文搜索不起作用。

问候 罗

【问题讨论】:

    标签: mysql lucene solr sphinx


    【解决方案1】:

    是的。斯芬克斯可以做到这一点。我不知道LIKE (:word) 是做什么的,但是您可以在 sphinx 搜索中进行类似@word "exactword" 的查询。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 您能否对此进行更多说明。
      • 当然,如果你想使用 lucene 那么你可以使用 zend lucene 并首先索引你的搜索数据,然后你可以执行搜索
      【解决方案3】:

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

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

      【讨论】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-08
        相关资源
        最近更新 更多