我有代表用户的文档。它们有字段 name
和 surname
。
假设我有两个用户编入索引 - 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,它什么也找不到(但我希望它找到找到它)。
- 不能设置为模糊搜索。我真的需要模糊搜索,但要保持 multi_match 与 cross_fields 类型的质量。
换句话说,我想实现类似 Facebook 的人员搜索。
我是 ElasticSearch 的新手,所以我可能遗漏了一些明显的东西。对不起,如果我这样做了。
最佳答案
Jack Mich 的搜索类型
- 确保在查询时使用 OR 而不是 AND,例如 jack 或米奇
- 此外,您基本上还想对字段进行部分匹配。为此,您需要在这些字段上启用 nGrams(在映射中执行此操作),以便索引与部分单词匹配
您使用的查询类型正确。这两个应该可以解决你的问题。
PS:我们都在这里学习,一起做很有趣:)
关于ElasticSearch - cross_fields 多重匹配与模糊搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23916180/