【发布时间】:2017-06-11 05:49:29
【问题描述】:
现状:
我目前正在使用 PHP 和 SQL 中的多个关键字进行关键字搜索。我应用搜索的字段是 title 字段,它是一个 250 VARCHAR 字段。
用户可以输入单个关键字,例如“苹果”或多个,例如“苹果香蕉黄”。第一个选项是微不足道的。对于第二个选项,我当前的算法是这样的:
- 尝试查找与标题中的整个字符串“applebanana yellow”完全匹配的项目。按索引 ID 对结果进行排序。
- 如果找不到更多与整个字符串完全匹配的结果,或者如果一开始就没有找到,请搜索包含“apple”、“banana”或“yellow”的所有标题。按索引 ID 对结果进行排序。
该算法非常基本,但足够有趣,效果很好。
我在找什么:
不过,我现在希望实现一种更智能的搜索算法,而不必依赖像亚马逊服务这样的外部付费脚本。我正在寻找一种方法来实现以下内容:
- 模糊搜索(我读过关于 SOUNDEX 或 levenshtein 的文章可能会意识到这一点)
- 更智能的关键字搜索(不要只返回匹配所有字词或仅一个字词的项目,还可以返回 2 个字或 3 个字之前的条目)
- 按相关性/相似度排序(按搜索与标题的相似度排序,而不仅仅是索引 ID)
- (奖励:甚至可以实现对精确字符串的搜索,例如在谷歌上使用“”来精确查找引号之间的单词)
开始此类搜索的最佳方式是什么?我正在使用 InnoDB for MySQL。
【问题讨论】:
-
你在打什么 SQL 系统?你在用 MySQL、ORacle 吗?
-
@Ray 抱歉,我正在使用 InnoDB for MySQL。我会编辑我的帖子。
-
你可能对sphinxsearch.com感兴趣,它可以位于mysql之上
-
@Mihai 其次。如果您需要超越一些基本搜索或发现自己添加了许多全文索引,那么更具针对性的搜索技术(例如 sphinx、solr 或 elasticsearch)可能适合您的需求
标签: php mysql sql search full-text-search