ElasticSearch - 跨字段多重匹配模糊搜索

21

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

假设我索引了两个用户-迈克尔·杰克逊和迈克尔·斯塔尔。我希望这些示例搜索起作用:

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

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

  1. 只有在至少一个单词完整的情况下才能找到匹配内容。如果我输入Jackson Mich,它可以找到Michael Jackson,但如果我输入Jack Mich,它就找不到任何内容(但是我希望它可以找到)。
  2. 它不能设置为模糊搜索。我真的需要模糊搜索,但要保持multi_match with cross_fields类型的质量。

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

我对ElasticSearch还不太熟悉,所以可能会漏掉一些显而易见的东西。如果我有任何失误,敬请谅解。

2个回答

8

杰克·米奇搜索类型

  • 确保在查询时使用OR而不是AND,例如:Jack OR Mich
  • 还要在字段上进行部分匹配。为此,您需要在映射中启用这些字段的nGrams,以便索引具有部分单词的匹配项

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

附注:我们都在学习,在一起做这件事很有趣 :)


我有一个查询,其中包含should、function_score、fuzziness 0.75、multi_match和cross_field。 我的查询是一个术语,但缺少最后一个字符 - 例如,“NAM”而不是“NAME”。 根据模糊匹配规则,它应该被返回给我,但我没有得到结果。 您对此有什么建议?是否有其他方法可以解决这个问题,而不需要使用NGRAM? - Tzvi Gregory Kaidanov

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接