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

Mic*_*zov 16 full-text-search fuzzy-search elasticsearch

我有代表用户的文件.他们有田地namesurname.

假设我有两个用户索引 - 迈克尔杰克逊和迈克尔斯塔尔.我想要这些示例搜索工作:

  1. 迈克尔 => { 迈克尔杰克逊,迈克尔斯塔尔 }
  2. 杰克密歇根 => { 迈克尔杰克逊 }(不完整的单词和颠倒的顺序)
  3. Michal Star => { Michael Starr }(模糊搜索)

我尝试了不同的查询,并通过cross_fields类型的multi_match查询获得了最佳结果.但有两个问题:

  1. 只有当两个单词中的至少一个完成时才能找到.如果我输入杰克逊密歇根,它会找到迈克尔杰克逊,但如果我输入杰克密歇根,它就找不到任何东西(但我希望它找到它).
  2. 它不能设置为模糊搜索.我真的需要模糊搜索,但保持multi_match的质量与cross_fields类型.

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

我对ElasticSearch很新,所以也许我错过了一些明显的东西.抱歉,如果我这样做.

Sar*_*arZ 5

杰克密歇根州的搜索类型

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

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

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