我正在使用MySQL和PHP为我的网站创建一个简单的搜索功能.现在,如果在搜索栏中输入单词"cat",我将无法检索带有"cats"字样的文章,反之亦然.它与结尾"ed"相同.
我能想到解决这个问题的唯一方法是从长度超过一定长度的每个单词的末尾删除所有"s"和"ed"(以避免将"Ted"变成"T"等) .然而,这个简单的解决方案远非完美.我希望有人可以为我提供更好的解决方案.
你所指的技术叫做词干.由于对语言的影响很大,因此在应用程序级别自行处理这个问题很困难.如果你不想处理这个问题,你可以让MySQL为你做繁重的工作,具体取决于你运行的MySQL版本.如果您使用的是5.6.4或更高版本,则它将内置于MyISAM表和InnoDB表的全文搜索机制中.在版本5.5到5.6.3中,它内置于MyISAM而不是InnoDB表.对于版本5.1,mnoGoSearch提供了一个插件.在5.1之前我认为你需要在应用程序级别处理它,但我还没有确认.
这些链接可能会帮助您入门.
请注意禁用词列表,它是处理查询时在搜索文本中忽略的非常常见且通常很短的单词列表.有些设置可以控制禁用词列表,如果它阻止您获得预期的结果.您可能希望将最小字长设置为2或3(默认值为4)并删除默认列表中的许多字.
如果您确实想要自己处理词干或使用PHP,那么Martin Porter就会对Porter Stemming算法进行详细的技术讨论,并且至少有两个PHP实现可用,而Jon Abernathy在PHP4中的旧版本可能存在一些缺陷还有Richard Heyes的PHP5新版本.
我假设你主要关注英语,但我相信也有其他语言的支持.
正如rnmccall所提到的,如果你需要更高级的搜索功能,你可能需要使用Sphinx或Apache Lucene.
归档时间: |
|
查看次数: |
473 次 |
最近记录: |