什么是过滤搜索查询的最佳方式- PHP MySQL


What is the best way to filter search queries - PHP MySQL

我正在建立一个用户可以搜索帖子的网站。每个帖子都存储在一个数据库中。当用户进行搜索时,例如iPad Mini FOR SALE,查询将看起来像:

SELECT * FROM testtable WHERE title REGEXP 'iPad|Mini|FOR|SALE'

查询将得到这3个条目:

  • 销售iPad Mini
  • 销售iPad
  • 寻找正品金表

前两项搜索成功,但第三项确实不属于该组。我想过滤掉它,只显示相关项目的搜索。我想去掉常见的单词,比如for, is, are,等等,也许你们有什么建议吗?

旁注:你们推荐"REGEXP"吗?我只是看到了它,使用了它,还没有深入研究它。(不需要回答这个只是搜索过滤器的问题,但如果你有一些好的信息,那将是伟大的)

您还应该看看FULLTEXT搜索。为了使FULLTEXT搜索工作,你需要MyIsam MySQL表引擎类型也有innoDB支持,但我不太了解它

已经读过这个主题了吗?http://www.regular-expressions.info/mysql.html或者这也是一个很好的教程/解释:http://www.tech-recipes.com/rx/484/use-regular-expressions-in-mysql-select-statements/

是,删除常用词

这些被称为停顿词。这些词通常是不相关的。

<<p> 考虑相关性/strong>

标题为"ipad mini待售"的帖子与搜索[ipad mini待售]的用户非常相关。标题为"出售ipad"的帖子就不那么相关了。标题为"出售奶酪工厂"的帖子就更不相关了。

考虑推导一种算法,用于计算您认为与站点上的帖子和用户搜索的术语相关的内容。

算法可能很简单,只是查看搜索的词和这些词在文章标题中的出现情况。搜索到的所有术语是否都出现在标题中?可能非常相关。是否有10%的搜索词出现在标题中?可能非常不相关。

考虑如何计算相关性评分。设置一个阈值,低于这个阈值,结果就会被认为太不相关而不能出现在结果中。根据经验,我建议将阈值设置得相当高,只以高度相关的结果为目标,也许只有在没有找到高度相关的结果时才列出不太相关的结果

使用阻止

顺便说一句,在搜索中使用词干提取。词干提取算法会将一个单词缩减为一个共同的词干。您将只搜索词干,而不是完整的搜索词。仔细阅读词干。为你正在使用的语言找到波特词干提取算法的实现;这是一个长期存在的算法,从经验来看,它速度快,对大多数应用来说都足够好。

REGEXP吗?

如果你删除停止词并使用基于词干的方法,这将是一个不太相关的问题。在任何情况下,这都是一个执行的问题,而且很可能是一个太主观的问题,无法给你一个有意义的答案。尝试一下,检查一下性能。尝试另一种方法,检查性能。