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

时间:2014-05-28 15:42:30

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

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

让我们说我有两个用户索引 - 迈克尔杰克逊和迈克尔斯塔尔。我想要这些样本搜索工作:

  1. Michael => { Michael Jackson Michael Starr }
  2. Jack Mich => { Michael Jackson }(不完整的单词和颠倒的顺序)
  3. Michal Star => { Michael Starr }(模糊搜索)
  4. 我尝试了不同的查询,并通过cross_fields类型的multi_match查询获得了最佳结果。但是有两个问题:

    1. 当两个单词中的至少一个完成时,它才会找到某些内容。如果我输入 Jackson Mich ,它会找到 Michael Jackson ,但如果我输入 Jack Mich ,它就找不到任何东西(但我想要的)它找到它。)。
    2. 无法设置为模糊搜索。我真的需要模糊搜索,但保持multi_match的质量与cross_fields类型。
    3. 换句话说,我想实现类似Facebook的搜索

      我对ElasticSearch很陌生,所以也许我错过了一些明显的东西。对不起,如果我这样做。

2 个答案:

答案 0 :(得分:5)

Jack Mich类型的搜索

  • 确保在查询时使用OR而不是AND例如Jack OR Mich
  • 基本上你也想在字段上进行部分匹配。为此,您需要在这些字段上启用nGrams(在映射中执行此操作),以便索引具有部分单词的匹配

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

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

答案 1 :(得分:2)

回答你的第二个问题:

  

无法设置为模糊搜索。我真的需要模糊搜索,但要保持multi_match的质量和cross_fields类型。

cross_fields查询不支持模糊搜索。请参阅GitHub上的问题:

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