首页 > 解决方案 > 弹性:匹配一个数组成员中的所有标记

问题描述

我有一个索引,可以通过他们的名字+角色将多个人分配给一个文档。到目前为止,我们通过将“人员”添加为嵌套文档并将所有相关人员索引到一个文档来实现搜索。

我们对查询性能不满意,我想尝试将嵌套文档从

"people":{
    {
    "firstName:"Alice",
    "lastName: "Aliceson",
    "role":"admin"
    },
    {
    "firstName:"Bob",
    "lastName: "Bobson",
    "role":"creator"
    }
}

"people": ["Alice Aliceson admin", "Bob Bobson creator"]

我的问题是,当这样查询时,使用 as 运算符的匹配查询and仍然会找到这些人的文档

"match": {
    "people": {
        "query": "Aliceson Alice creator",
        "operator":"and"
    }
}

有没有办法让弹性要求匹配仅一个数组成员中的所有令牌?

或者:有人可以指出我更好的方向吗,我在文档或任何指南中找不到这方面的示例(所有指南都使用嵌套,但文档建议在调整搜索速度时避免嵌套)

标签: elasticsearch

解决方案


对象数组

对象数组不会像您期望的那样工作:您不能独立于数组中的其他对象查询每个对象。如果您需要能够做到这一点,那么您应该使用嵌套数据类型而不是对象数据类型。

从这里


推荐阅读