弹性搜索 - 实施“你的意思是”

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:创建一个简单的 “你的意思是?” 推荐搜索

Elasticsearch:创建一个简单的 “你的意思是?” 推荐搜索

带有“你的意思是”的搜索引擎 [重复]

如何将弹性搜索索引或日志从一个弹性搜索服务器复制到另一台?

使用弹性搜索设计搜索服务

Spring boot + Spring数据弹性搜索+弹性搜索5.6.0