【问题标题】:Backend for autosuggest for fulltext search自动建议全文搜索的后端
【发布时间】:2011-12-30 08:53:21
【问题描述】:

我想为使用 AJAX、PHP 和 MySQL 的全文搜索创建自动建议。

我正在寻找实现后端的正确方法。当用户打字时,输入字段应该给他建议。建议应从表格中的文本条目生成。

此条目的一些信息:它们以全文形式存储,由 PDF 生成,每页 3-4 页。目前不超过 100 个条目,未来几年将达到 2000 个。

如果用户开始键入,他正在键入的单词应该用存储在数据库中的单词完成,按出现次数降序排序。下一步是建议与其他词的组合,女巫在匹配第一个词的条目中出现率很高。当然,您可以将其与 Google 自动建议进行比较。

我正在考虑 3 种不同的 方法来实现这一点:

  1. 通过 cronjob 生成索引,女巫在夜间计算单词和组合的出现次数。用户在此索引上搜索。

  2. 我使用 'LIKE "%search%"' 函数在条目中进行实时搜索。然后我在 this 之后查找单词并按出现对它们进行 GROUP。

  3. 我为所有用户搜索创建了一个日志文件,并寻找像 1) 中那样的良好组合,因此每次搜索操作都会使搜索变得更加智能。

从这个开始的最佳方式是什么?搜索应该快速且高效。 有没有更好的可能性是我没有想到的?

【问题讨论】:

    标签: php mysql search full-text-search autosuggest


    【解决方案1】:

    我会使用 mysql 的 MATCH() AGAINST() (http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html),例如:

    SELECT *
    FROM table
    WHERE MATCH(column) AGAINST('search')
    ORDER BY MATCH(column) AGAINST('search')
    

    另一个优点是您可以进一步调整被搜索词的重要性(如果需要),例如:

    MATCH(column) AGAINST('>important <lessimportant') IN BOOLEAN MODE
    

    或者说搜索词的某些词是必需的,而其他词可能不会出现在结果中,例如:

    MATCH(column) AGAINST('+required -prohibited') IN BOOLEAN MODE
    

    【讨论】:

    • 全文搜索的好解决方案,但有了这个解决方案,我得到了整个条目。我想为自动建议完成单个单词。如何从相同的条目中获得匹配良好的单词?
    【解决方案2】:

    我认为,第一个想法是最好的。顺便说一句,不要忘记从自动建议中删除停用词(an, the, by, ...)。

    【讨论】:

      猜你喜欢
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 2019-05-13
      • 2017-01-26
      • 1970-01-01
      • 2017-05-22
      相关资源
      最近更新 更多