弹性搜索 - 实施“你的意思是”
Posted
技术标签:
【中文标题】弹性搜索 - 实施“你的意思是”【英文标题】:Elastic Search - implement "Did you Mean" 【发布时间】:2011-10-19 15:48:33 【问题描述】:我们正在尝试在 Rails 应用程序中使用 Elastic Search,并希望提供有关“您的意思是”功能实现的任何输入/代码示例。本质上,我们希望为最终用户提供一个选项来搜索替代查询,例如在 google 中。
【问题讨论】:
我知道“google it”的答案不是很好(因此这是一个评论),但寻找“ruby 拼写更正”将是一个好的开始。 我确实实现了这个,但是在 Asp.net MVC3 中。我们使用了这里描述的算法en.wikipedia.org/wiki/Levenshtein_distance。尝试在 Google 上搜索“模糊查找”。 Levenshtein 距离:它不应该用于拼写检查。万一有人读到这篇文章,这是最糟糕的拼写检查时期之一。 【参考方案1】:从 0.90.0.Beta1 版本开始,ElasticSearch 包含一个“术语建议”功能,这正是您正在寻找的功能:
http://www.elasticsearch.org/guide/reference/api/search/term-suggest/
例如从此查询中获取:“开发分布式搜索引擎” 结果:“开发分布式搜索引擎”
【讨论】:
【参考方案2】:Elasticsearch 还没有它,它作为 issue here 打开基本上它正在等待下一个 Lucene release。
我使用phonetic analyzers 实现了类似的“您的意思是”行为,它适用于我的用例、位置名称,但不适用于所有用例......
一个示例映射:- https://gist.github.com/1171014
所以您可以像这样使用 REST api 进行查询(拼写错误的 london):-
"query":
"field":
"nameSounds": "lundon"
【讨论】:
在此处集成语音分析器的详细说明:blog.jessitron.com/2012/04/…【参考方案3】:你可以使用模糊搜索:
"fuzzy" :
"user" :
"value" : "Jon",
"boost" : 1.0,
"fuzziness" : 3,
"prefix_length" : 0,
"max_expansions": 100
检查此链接是否模糊:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html
【讨论】:
以上是关于弹性搜索 - 实施“你的意思是”的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch:创建一个简单的 “你的意思是?” 推荐搜索