我的文档包含多个角色/权限定义作为嵌套对象数组:
{
...
'roleRights': [
{'roleId':1, 'right':1},
{'roleId':2, 'right':1},
{'roleId':3, 'right':2},
]
}
我正在尝试使用特定的roleRights过滤掉文档,但我的查询似乎混淆了组合。这是我的filterQuery as" pseudoCode"
boolFilter > must > termQuery >roleRights.roleId: 1
boolFilter > must > termQuery >roleRights.type: 2
上面应该只返回
但看起来我得到了
任何提示?
答案 0 :(得分:1)
您需要将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}
}
}
}
]
}
}
}