ElasticSearch - cross_fields 多重匹配与模糊搜索

标签 elasticsearch full-text-search fuzzy-search

我有代表用户的文档。它们有字段 namesurname

假设我有两个用户编入索引 - Michael Jackson 和 Michael Starr。我希望这些示例搜索有效:

  1. Michael => { Michael Jackson, Michael Starr }
  2. Jack Mich => { Michael Jackson }(不完整的单词和颠倒的顺序)
  3. Michal Star => { Michael Starr }(模糊搜索)

我尝试了不同的查询,并从具有 cross_fields 类型的 multi_match 查询中获得了最佳结果。但是有两个问题:

  1. 它只会在两个单词中至少有一个完整时才能找到内容。如果我键入 Jackson Mich,它会找到 Michael Jackson 但如果我键入 Jack Mich,它什么也找不到(但我希望它找到找到它)。
  2. 不能设置为模糊搜索。我真的需要模糊搜索,但要保持 multi_match 与 cross_fields 类型的质量。

换句话说,我想实现类似 Facebook 的人员搜索

我是 ElasticSearch 的新手,所以我可能遗漏了一些明显的东西。对不起,如果我这样做了。

最佳答案

Jack Mich 的搜索类型

  • 确保在查询时使用 OR 而不是 AND,例如 jack 或米奇
  • 此外,您基本上还想对字段进行部分匹配。为此,您需要在这些字段上启用 nGrams(在映射中执行此操作),以便索引与部分单词匹配

您使用的查询类型正确。这两个应该可以解决你的问题。

PS:我们都在这里学习,一起做很有趣:)

关于ElasticSearch - cross_fields 多重匹配与模糊搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23916180/

相关文章:

mysql - Logstash:Elasticsearch 的未知设置 ‘“index”

elasticsearch - 在Elasticsearch中未创建索引

entity-framework - 如何使用 Entity Framework 6 执行全文搜索

elasticsearch - 模糊匹配失败,但精确匹配通过

elasticsearch - 为什么 ElasticSearch 堆大小没有恢复正常?

elasticsearch - 如何在logstash grok模式中编写if条件?

java - 自动识别文本中的公司名称

search - 如何让 Elasticsearch fuzzy_like_this 将 like_text 标记视为 AND 而不是 OR?

ElasticSearch:替代使用 match_phrase 来支持模糊性

search - 有没有办法让emacs进行 "fuzzy"搜索?