我正在建立一个用户可以搜索帖子的网站。每个帖子都存储在一个数据库中。当用户进行搜索时,例如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吗?
如果你删除停止词并使用基于词干的方法,这将是一个不太相关的问题。在任何情况下,这都是一个执行的问题,而且很可能是一个太主观的问题,无法给你一个有意义的答案。尝试一下,检查一下性能。尝试另一种方法,检查性能。