11

您如何像 Google 在某些搜索查询中那样实现“您的意思是:” ?

PS:我在我的产品中使用狮身人面像。你能建议我如何实现这一点。任何具有此功能的其他搜索引擎的指南或建议都非常受欢迎。我正在使用 rails2.3.8,如果有帮助的话

一种解决方案可以是:

制作一个已知“关键字”或“短语”的字典,如果没有找到任何内容,则在搜索操作中运行该字典中的辅助查询。每当创建可搜索条目时更新该字典,例如博客文章或用户名。

  • 查询=“超人”

  • dictionary = ["superman", "batman", "hanuman" ...] (在 DB 表中)

  • 搜索(查询)

  • 如果没有结果,那么

在字典中搜索(其中“关键字”LIKE 查询或“短语”LIKE 查询)=>“超人”

检查 sphinx 或 solr 文档。他们可能有一个更好的“喜欢”查询的实现,它返回一个匹配的百分比。

  • display -> 你的意思是“超人”吗?

但关键是如何使其高效?

4

5 回答 5

5

看看Damerau-Levenshtein距离算法。它计算两个字符串之间的“距离”,并确定将一个字符串转换为另一个字符串需要多少步。步数越少,两根弦越接近。

本文展示了作为 MySQL 存储函数实现的算法。

该算法比 LIKE 或 SOUNDEX 好得多。

我相信谷歌使用众包数据而不是算法。即,如果用户键入 abcd,单击后退按钮,然后立即搜索 abd,则它会在两个搜索词之间建立关系,因为用户对结果不满意。一旦你有一个非常大的社区搜索,就会出现这种模式。

于 2012-10-18T05:14:12.263 回答
2

您应该看看 Google 如何实现类似这样的实际理论:如何编写拼写校正器

尽管那篇文章是用 Python 编写的,但在文章底部有指向其他语言实现的链接。这是一个Ruby 实现

于 2012-10-19T19:12:55.663 回答
1

这对我有用:

SELECT * FROM table_name WHERE soundex(field_name) LIKE CONCAT('%', soundex('searching_element'), '%')
于 2013-10-01T13:28:38.183 回答
1

现在,您的意思是基于语音拼写校正器实现功能。当我们拼写错误时,我们通常会写出发音相似的单词。基于这个想法,语音拼写校正器在其数据库中搜索最相似的单词。使用上下文(对于多词查询,其他词也有助于确定正确的词)和词的流行度来打破相似性关系。如果两个词在语音上与拼写错误的词非常接近,则选择符合上下文且在日常生活中更频繁使用的词。

于 2012-12-09T14:03:21.680 回答
1

我认为您正在寻找字符串匹配算法。

我记得当初始化稍微拼错时, mislav 的要点会引发错误。那可能是一本好书。

另外,看看他建议的一些文章:

于 2012-10-12T11:45:52.653 回答