1

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

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

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

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

前两项搜索成功,但第三项确实不属于该组。我想将其过滤掉,只显示相关项目进行搜索。我正在考虑去掉 for、is、are 等常用词,但也许你们有什么建议?

旁注:你们推荐“REGEXP”吗?我只是看到它,使用它,还没有深入研究它。(无需仅回答搜索过滤器问题,但如果您有一些很好的信息,那就太好了。)

4

3 回答 3

2

您还应该看看FULLTEXT搜索。为了使FULLTEXT搜索工作,您需要MyIsamMySQL 表引擎类型,也有 innoDB 支持,但我对此知之甚少。

于 2013-03-05T09:37:20.813 回答
1

已经读过这个话题?http://www.regular-expressions.info/mysql.html 或者这也是一个很好的教程/解释:http ://www.tech-recipes.com/rx/484/use-regular-expressions-in-mysql -选择语句/

于 2013-03-05T09:38:25.550 回答
1

是的,删除常用词

这些被称为停用词。这些是通常无关紧要的词。

考虑相关性

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

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

该算法可能与查看搜索的术语以及文章标题中术语的出现一样简单。标题中是否存在所有搜索的字词?可能非常相关。标题中是否存在 10% 的搜索字词?可能非常无关紧要。

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

使用词干

顺便说一句,在搜索中使用词干提取。词干算法将把一个词减少为一个共同的词干。您将只搜索词干而不是完整的搜索词。阅读词干。为您使用的语言找到一个 porter 词干算法的实现;这是一个长期存在的算法,从经验来看,它对于大多数应用程序来说速度很快并且非常好。

正则表达式?

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

于 2013-03-05T09:50:19.030 回答