0

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

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

我正在尝试过滤掉具有特定角色权限的文档,但我的查询似乎混淆了组合。这是我的 filterQuery 作为“伪代码”

boolFilter > must > termQuery >roleRights.roleId: 1
boolFilter > must > termQuery >roleRights.type: 2

以上应该只返回

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

但看起来我明白了

  • 分配了角色 1 的所有文档,无视权利
  • 以及所有分配了权利 2 的文件,而不管角色。

有什么提示吗?

4

1 回答 1

2

您需要映射roleRightsnested(在此处查看一个很好的解释),如下所示:

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}
                  }
               }
            }
         ]
      }
   }
}
于 2016-07-21T08:26:48.660 回答