【问题标题】:ElasticSearch - cross_fields multi match with fuzzy searchElasticSearch - cross_fields 与模糊搜索的多重匹配
【发布时间】:2014-05-28 15:42:29
【问题描述】:

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

假设我有两个用户被编入索引 - Michael Jackson 和 Michael Starr。我希望这些示例搜索能够正常工作:

  1. 迈克尔 => { 迈克尔·杰克逊, 迈克尔·斯塔尔 }
  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 还很陌生,所以我可能遗漏了一些明显的东西。对不起,如果我这样做了。

【问题讨论】:

    标签: elasticsearch full-text-search fuzzy-search


    【解决方案1】:

    Jack Mich 类型的搜索

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

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

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

    【讨论】:

    • 我有一个查询,应该是 function_score,模糊度为 0.75,multi_match 和 cross_field 我的查询是一个没有最后一个字符的术语 - 例如“NAM”而不是“NAME” 根据模糊规则,它必须返回对我来说,但我没有得到结果。你对这个问题有什么建议?没有 NGRAM 有什么办法吗?
    【解决方案2】:

    回答你的第二个问题:

    不能设置为模糊搜索。我真的需要模糊搜索,但要保持 multi_match 与 cross_fields 类型的质量。

    cross_fields 查询不支持模糊搜索。在 GitHub 上查看问题:

    https://github.com/elasticsearch/elasticsearch/issues/6866

    【讨论】:

      猜你喜欢
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 2011-11-01
      相关资源
      最近更新 更多