我想在我的网站中为搜索添加新功能。我正在使用PHP和MySQL。MySQL数据库包含一个表,该表包含用户要搜索的项目,每个项目都有一个“关键字”列,其中用逗号分隔的关键字“示例:猫,狗,马”。用户在我的网站上搜索后,我想获得让他说“ 85%”的单词,类似于他的搜索关键字,这是为了重新定义搜索。对于拼写错误,我需要一种服务或某种能够提供关键字正确还是拼写错误的功能,以便我得到一些更正并检查数据库中是否存在这些更正,然后将这些更正提供给用户以更改其搜索关键字。
我不是在这里寻求解决方案...但是,如果您能以一种或另一种方式指导我,那将是很好的。
关键在于您的想法是“ 85%相似”。这里有一些想法:
您可以定义一个表格,在其中列出关键字的常见拼写错误。然后,您将不得不增加搜索数据库的方式,以将常见的拼写错误映射到适当的值。
[执行搜索时,请使用库来生成相似的单词并搜索所有单词。您可以使用任何种类的拼写库来生成可能的单词匹配,然后再发送搜索。或根据Edit Distance算法编写自己的代码。
仅检查是否需要:由于使用的是PHP,因此可以考虑使用pspell。您可以先致电pspell_check
以查看该单词的拼写是否正确。然后致电pspell_suggest
以获取建议。
例如,MySQL具有SOUNDS_LIKE
运算符。您可以搜索WHERE keyword SOUNDS_LIKE 'kat'
,并(大概)获得cat
。 More info is on the documentation page,它会提醒您一些限制(例如,仅英语和UTF-8)。
这听起来像是一个相当普遍的问题,所以也许对此问题还有其他更规范的解决方案。也许有些特定于您正在使用的语言(或在数据库接口层中)可以为您提供抽象的语言。
前两个应该使您满足一些85%相似性的概念。我不知道第三个选项的效果如何,但是它是“ soundz kool”。
PHP中有相似的text(),但是在查询之后;您也可以在MySQL中查看全文搜索。
尝试查看“编辑距离算法”。基本上对于两个输入字符串,返回值是将一个字符串转换为另一个字符串所需的最少编辑次数。这样可以使您了解两个字符串的接近程度。
Apache Solr是一个开源搜索平台,不仅提供全文本搜索功能,而且还提供内置的匹配分数和自动建议系统,以及许多其他powerful features。
如果您站点中的信息量不够重要,则此选项听起来可能不合适,尽管我建议至少将其检出。
您的应用程序与Solr之间的通信可以通过标准的REST接口进行处理。 AFAIK目前提供两个良好的Solr特定的PHP库:
设置服务器非常简单,这是调整和优化Solr以最适合您的需求的艰苦工作(也是有趣的工作。)>