首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP/ SQL :基于相似性的多个模糊关键字搜索(高级SQL搜索)

问PHP/ SQL :基于相似性的多个模糊关键字搜索(高级SQL搜索)
EN

Stack Overflow用户
提问于 2017-01-25 21:23:51
回答 1查看 1.1K关注 0票数 1

现状:

我目前正在使用PHP和SQL中的多个关键字进行关键字搜索。我要应用搜索的字段是title字段,它是一个250 VARCHAR字段。

用户可以输入单个关键字,例如"apple“,也可以输入多个关键字,例如”苹果香蕉黄“。第一个选择是微不足道的。对于第二个选项,我的当前算法的工作方式如下:

  1. 试着在标题中找到与整个字符串“苹果香蕉黄”完全匹配的项目。将结果按索引id排序。
  2. 如果没有找到匹配整个字符串的更多结果,或者如果一开始没有找到任何结果,那么搜索所有包含"apple“、”香蕉“或”黄色“的标题。将结果按索引id排序。

该算法是非常基本的,但足够有趣的工作相当好。

我要找的是:

然而,我现在希望实现一种更智能的搜索算法,而不必依赖像Amazon服务这样的外部付费脚本。我正在寻找一种实现以下内容的方法:

  • fuzzy (我读过SOUNDEX或levenshtein可能会意识到这一点)
  • 智能关键字搜索(不要只返回与所有单词匹配的项或只返回一个单词,还可以返回之前的两个或三个单词)
  • 按相关性/相似性排序(按搜索与标题的相似程度排序,而不仅仅是索引id)
  • (奖金:甚至可以实现精确的字符串搜索,比如在google上使用“”来查找引号之间的确切单词)

从这样的搜索开始,最好的方法是什么?我将InnoDB用于MySQL。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-25 21:28:42

假设是MySQL,则可以添加全文索引。然后,有许多函数将允许您进行基本的搜索,以满足您所列出的所有需求:https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html

最后使用的语法如下:

代码语言:javascript
复制
 SELECT * FROM table_name WHERE MATCH(column_with_fulltext_index_on_it)
      AGAINST('apple banana yellow' IN NATURAL LANGUAGE MODE)

看比赛比分

代码语言:javascript
复制
 SELECT column_with_fulltext_index_on_it, MATCH(column_with_fulltext_index_on_it)
      AGAINST('apple banana yellow' IN NATURAL LANGUAGE MODE) AS score  FROM table_name WHERE MATCH(column_with_fulltext_index_on_it)
      AGAINST('apple banana yellow' IN NATURAL LANGUAGE MODE)

要理解如何完美地调整match子句以满足您的需要,这可能是一个小的学习曲线,但是您的示例似乎非常基本(除了智能搜索)。

另外,值得注意的是,您需要控制要索引的单词/标记的min/max字符。您可以阅读https://dev.mysql.com/doc/refman/5.7/en/fulltext-fine-tuning.html以加深对索引选项的理解。Percona也是一个很好的资源,https://www.percona.com/blog/2013/02/26/myisam-vs-innodb-full-text-search-in-mysql-5-6-part-1/ (通常比MySQL医生更易于人类消化)。

如果您需要进行更复杂的搜索,您可以考虑添加其他技术,比如Solr,但我一直建议您使用所获得的基本技术,只有在遇到困难时才采用新技术,或者对现有解决方案有很好的度量,并且知道新技术将以某种方式提高(速度、存储空间、结果质量等)。如果你不能量化,坚持基本直到你可以。

下面是一个很好的教程:http://www.w3resource.com/mysql/mysql-full-text-search-functions.php

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41861914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档