1

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

我不是在这里寻求解决方案......但如果你能以一种或另一种方式指导我,那就太好了。

4

4 回答 4

1

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

相似词表

您可以定义一个表格,在其中列出关键字的常见拼写错误。然后,您必须增加搜索数据库的方式,以将常见的拼写错误映射到正确的值。

相似词查找

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

仅在需要时检查: 由于您使用的是 PHP,因此您可以考虑使用 pspell。你可以先打电话pspell_check来看看这个词拼写是否正确。然后打电话pspell_suggest征求意见。

有关示例,请参见此链接。

使用数据库功能

例如,MySQL 有一个SOUNDS_LIKE运算符。您可以搜索WHERE keyword SOUNDS_LIKE 'kat'并(大概)获取cat. 更多信息在文档页面上,它会提醒您一些限制(例如仅限英语和 UTF-8)。


这听起来像是一个相当普遍的问题,所以也许还有其他更规范的解决方案来解决这个问题。也许有一些特定于您正在使用的语言(或在数据库接口层中)可以为您抽象出来的东西。

前两个应该允许您满足一些 85% 相似性的概念。我不知道第三个选项的效果如何,但它“听起来很酷”。

于 2010-05-07T12:23:37.870 回答
1

PHP中有similar_text(),但那是在查询之后;您还可以查看 MySQL 中的全文搜索。

于 2010-05-07T12:31:52.803 回答
1

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

编辑距离

于 2010-05-07T12:52:01.997 回答
0

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

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

您的应用程序和 Solr 之间的通信可以通过标准 REST 接口进行处理。AFAIK 目前有两个很好的特定于 Solr 的 PHP 库:

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

于 2010-05-07T12:45:14.637 回答