如何实施“你的意思是:”,就像Google在某些search queries中所做的那样?
PS: 我在我的产品中使用sphinx。你能建议我怎样才能实现这一点。对于具有此功能的其他搜索引擎的任何指南或建议都是最受欢迎的。 我正在使用rails2.3.8,如果这有帮助
一个解决方案可以是:
制作已知“关键字”或“短语”的字典,并在搜索操作中找不到任何内容,然后在该字典中运行辅助查询。每当创建可搜索条目时更新该字典,例如博客文章或用户名。
query =“supreman”
dictionary = [“superman”,“batman”,“hanuman”......](在DB表中)
搜索(查询)
如果没有结果,那么
在字典中搜索(其中“关键字”LIKE查询或“短语”LIKE查询)=> “超人”
签入sphinx或solr文档。他们可能会更好地实现此“赞”查询,该查询返回%匹配。
但重点是如何提高效率?
答案 0 :(得分:5)
查看Damerau-Levenshtein距离算法。它计算两个字符串之间的“距离”,并确定将一个字符串转换为另一个字符串所需的步数。两个弦越近,步数越少。
This文章显示了作为MySQL存储函数实现的算法。
该算法比LIKE或SOUNDEX好得多。
我认为Google使用众包源数据而不是算法。即,如果用户键入abcd,单击后退按钮然后立即搜索abd,则会在用户对结果不满意时建立两个搜索项之间的关系。一旦您进行了非常大的社区搜索,就会显示该模式。
答案 1 :(得分:2)
您应该看看Google如何实现这样的实际理论:How to Write a Spelling Corrector。
尽管那篇文章是用Python编写的,但本文底部还提供了其他语言实现的链接。这是Ruby implementation。
答案 2 :(得分:1)
答案 3 :(得分:1)
现在有几天你的意思是基于语音拼写纠正器实现功能。当我们拼错时,我们通常会在语音上写出类似的单词。基于这个想法,语音拼写纠正器在其数据库中搜索最相似的单词。使用上下文(对于多字查询,其他单词也有助于确定正确的单词)和单词的流行度来打破相似关系。如果两个单词在语音上非常接近拼写错误的单词而不是适合上下文的单词并且在日常生活中更频繁地被选择。
答案 4 :(得分:1)
这对我有用:
SELECT * FROM table_name WHERE soundex(field_name) LIKE CONCAT('%', soundex('searching_element'), '%')