1

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

我将解释一个简短的场景:我们有两个用户:Alice 和 Bob Alice 在 X 上工作,Bob 在 Y 上工作 我们有关于电影的文档:示例:姓名:矩阵日期:1999 年演员:[基努·里维斯,劳伦斯·菲什伯恩]

现在我想过滤在演员字段中可以看到 Alice 和 Bob 的内容。例如,在 X 上工作的人可以看到基努·里维斯,在 Y 上工作的人可以看到劳伦斯·菲什伯恩。

为此,我正在尝试使用 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"}}}]}}"}
}

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

有人有想法吗?

4

0 回答 0