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

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

  • Michael => {Michael Jackson,Michael Starr}
  • Jack Mich => {Michael Jackson}(不完整的单词和相反的顺序)
  • Michal Star => {Michael Starr}(模糊搜索)

  • 我尝试了不同的查询,并从具有cross_fields类型的multi_match查询中获得了最佳结果。但是有两个问题:
  • 仅当两个单词中的至少一个完成时才找到内容。如果我输入Jackson Mich,它将找到Michael Jackson,但是如果我输入Jack Mich,它将找不到任何东西(但我希望找到它)。
  • 不能设置为模糊搜索。我确实需要模糊搜索,但保持cross_fields类型的multi_match质量。

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

    我是ElasticSearch的新手,所以也许我缺少明显的东西。对不起,我愿意。

    最佳答案

    杰克·米奇(Jack Mich)的搜索类型

  • 确保您在查询时使用OR而不是AND,例如杰克·米奇
  • 同样,您实际上也想对字段进行部分匹配。为此,您需要在这些字段上启用nGrams(在映射中执行此操作),以使索引与部分单词
  • 匹配

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

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

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

    10-11 14:00