gpt4 book ai didi

elasticsearch - elasticsearch-通过完全匹配嵌套对象来查找文档

转载 作者:行者123 更新时间:2023-12-03 01:53:26 25 4
gpt4 key购买 nike

我有包含多个角色/权限定义作为嵌套对象数组的文档:

{
...
'roleRights': [
{'roleId':1, 'right':1},
{'roleId':2, 'right':1},
{'roleId':3, 'right':2},
]
}

我正在尝试过滤具有特定角色权限的文档,但是我的查询似乎混淆了组合。这是我的filterQuery作为“pseudoCode”
boolFilter > must > termQuery >roleRights.roleId: 1
boolFilter > must > termQuery >roleRights.type: 2

以上应该只返回

角色1已分配权2的
  • 文档。

  • 但看起来我明白了
  • 忽略正确的
  • 而分配了角色1的所有文档
  • 和所有分配了权限2的文档,无论角色如何。

  • 有什么提示吗?

    最佳答案

    您需要将roleRights映射为nested(请参见good explanation here),如下所示:

    PUT your_index
    {
    "mappings": {
    "your_type": {
    "properties": {
    "roleRights": {
    "type": "nested",
    "properties": {
    "roleId": { "type": "integer" },
    "right": { "type": "integer" }
    }
    }
    }
    }
    }
    }

    确保首先删除索引,然后重新创建并重新填充它。

    然后,您将可以像这样进行查询:
    POST your_index/_search
    {
    "query": {
    "bool": {
    "must": [
    {
    "nested": {
    "path": "roleRights",
    "query": {
    "term": { "roleRights.roleId": 1}
    }
    }
    },
    {
    "nested": {
    "path": "roleRights",
    "query": {
    "term": { "roleRights.type": 2}
    }
    }
    }
    ]
    }
    }
    }

    关于elasticsearch - elasticsearch-通过完全匹配嵌套对象来查找文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38498733/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com