我们可以使用user.metadata作业过滤嵌套对象中的文档吗?

时间:2019-06-14 09:29:31

标签: elasticsearch elasticsearch-x-pack

我正在搜索过滤在Elasticsearch索引中可以看到用户的内容,此外,我想将一些文档过滤到嵌套对象中。

我将解释一个简短的场景: 我们有两个用户:Alice和Bob 爱丽丝在X上工作,鲍勃在Y上工作 我们获得了有关电影的文档: 例: 名称:矩阵 年:1999 演员:[基努·里维斯,劳伦斯·菲什伯恩]

现在,我想过滤在actors字段中可以看到Alice和Bob的内容。 例如,X上的工作人员可以看到Keanu Reeves,Y上的工作人员可以看到Laurence Fishburne。

为此,我试图使用X-Pack安全属性,但是我遇到了一些问题,也许您会帮我。

有我的索引映射:

{
    "settings": {
        "index": {
            "number_of_replicas": 0,
            "number_of_shards": 1
        }
    },
    "mappings": {
            "properties": {
                "security_attributes": {
                    "properties": {
            "level": {"type":"short"},
                        "jobs": {"type":"keyword"},
                        "min_jobs": {"type":"short"}
                    }
                },
        "name":{"type":"text"},
                "date":{"type":"text"},
        "actors":{"type":"nested", 
                "properties":{
                    "security_attributes":{
                        "properties":{
                            "level": {"type":"short"},
                                        "jobs": {"type":"keyword"},
                                        "min_jobs": {"type":"short"}
                            }
                        },
                    "name":{ "type": "string"}
                    }
                }
             }
    }
}'

然后我尝试授予用户角色的查询模板。

{"template":
    {"source":"
        {"bool":
             {"filter":
                 [{"range": 
                    {"security_attributes.level": 
                        {"lte": "{{_user.metadata.level}}"}}},
                {"terms_set":{"security_attributes.jobs": 
                    {"terms":{{#toJson}}_user.metadata.jobs{{toJson}},
                    "minimum_should_match_field": "security_attributes.min_jobs"}}}]}}"}
}

要按已知的角色或工作过滤文档,我想按工作在嵌套对象中进行过滤,但是我不知道如何将此过滤器添加到以前的模板中。

有人有主意吗?

0 个答案:

没有答案