我想在我的网站中添加新功能。我正在使用PHP和MySQL。 MySQL数据库包含用户将要搜索的项目的表格,对于每个项目,都有一个“关键字”列,该列是逗号分隔的关键字“示例:猫,狗,马”。在用户在我的网站上搜索的用户搜索后,我想获得我说的单词,让我说“ 85%”与他的搜索关键字类似,这是用于重新定义搜索的单词。对于拼写错误,我想要一项服务或如果关键字是正确或拼写错误的服务,因此我进行了一些更正,并检查数据库中是否存在这些校正,然后将这些更正给用户以更改其搜索关键字。

我不是在这里要求解决方案...但是如果您可以以一种或另一种方式指导我,那将是很棒的

多谢你们

干杯

有帮助吗?

解决方案

关键在于您的“ 85%相似”的想法。这里有一些想法:

类似的单词表

您可以定义一个表,其中列出了关键字的常见拼写错误。然后,您必须扩大如何搜索数据库以将常见的拼写错误映射到适当的值。

类似的单词查找

执行搜索时,请使用库生成相似的单词并搜索所有单词。在发送搜索之前,您可以使用任何类型的拼写库来生成可能的单词匹配。或根据 编辑距离 算法。

仅检查需要检查:由于您使用的是PHP,因此可以考虑PSPELL。您可以首先打电话 pspell_check 查看该单词是否正确拼写。然后致电 pspell_suggest 获取建议。

请参阅此链接的示例。

使用数据库功能

例如,mysql有一个 SOUNDS_LIKE 操作员。您可以搜索 WHERE keyword SOUNDS_LIKE 'kat' (大概) cat. 更多信息在文档页面上, ,这会提醒您一些局限性(例如英语和UTF-8)。


这听起来像是一个相当普遍的问题,因此也许还有其他有关此问题的规范解决方案。也许您使用的语言(或在数据库接口层中)可以为您抽象。

前两个应该让您满足85%的相似性的概念。我不知道第三个选项的工作状况如何,但是它“ Soundz Kool”。

其他提示

php中有类似的_text(),但这是在查询之后;您也可以在MySQL中查看全文搜索。

尝试查看编辑距离算法。基本上,对于两个输入字符串,返回值是将一个字符串转换为另一个字符串所需的最小编辑数。这可以使您了解两个字符串有多近。

编辑距离

Apache Solr是一个开源搜索平台,不仅提供全文搜索功能,还提供内置的匹配分数和自动搜索系统,以及许多其他 强大的功能.

如果您的网站中的信息量不够大,那么此选项听起来可能不正确,尽管我建议至少检查一下。

您的应用程序和SOLR之间的通信可以通过标准的REST接口来处理。 afaik目前有两个良好的Solr特异性PHP库:

设置服务器非常简单,是调整和优化SOLR以最适合您需求的费力(以及有趣的部分)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top