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

时间:2013-03-05 09:34:58

标签: php mysql database search

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

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

然后查询将产生以下3个项目:

  • 销售iPad Mini
  • 销售iPad
  • 寻找正宗的金表

前两个项目的搜索成功,但第三个项目实际上不属于该组。我想过滤掉它,只是向搜索显示相关项目。我正在考虑删除像for,is,are等常用词,但也许你们有什么建议吗?

旁注:你们推荐“REGEXP”吗?我刚刚看到它,使用它,并没有深入研究它。 (不需要回答这个问题只是搜索过滤器问题,但是如果你有一些很好的信息会很棒。)

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

答案 2 :(得分:1)

是,删除常用字词

这些被称为stop words。这些词通常是无关紧要的。

考虑相关性

标题为'ipad mini for sale'的帖子与搜索[ipad mini for sale]的用户非常相关。一篇名为“ipad for sale”的帖子不太相关。一篇名为“奶酪工厂待售”的帖子仍然不太相关。

考虑推导出一种算法,用于计算您认为与您网站上的帖子相关的内容以及用户搜索的字词。

算法可以像查看搜索的术语和帖子标题中术语的出现一样简单。搜索的所有术语是否都出现在标题中?可能非常相关。是否有10%的条款在标题中出现?可能非常无关紧要。

考虑如何计算相关性得分。设置一个阈值,低于该阈值时,结果与结果中的结果无关。根据经验,我建议设定门槛相当高,仅针对高度相关的结果,可能只有在找不到高度相关的结果时才列出不太相关的结果

使用词干

顺便说一句,在搜索中使用词干。词干算法会将单词缩减为常见词干。您将仅搜索词干而不是完整的搜索词。阅读stemming。找到您正在使用的语言的移植器词干算法的实现;这是一个长期存在的算法,从经验来看,它对于大多数应用来说都是快速且非常好的。

<强> REGEXP吗

如果删除停用词并使用基于干的方法,这将是一个不太相关的问题。无论如何,这是一个实施问题,并且可能过于主观,无法为您提供有意义的答案。试试吧,检查一下表现。尝试另一种方法,检查性能。使用最适合你的方式。

相关问题