Можем ли мы отфильтровать документ во вложенном объекте с помощью заданий user.metadata? - PullRequest
1 голос
/ 14 июня 2019

Я ищу, чтобы отфильтровать то, что видят пользователи в индексе Elasticsearch, далее я хочу отфильтровать какой-то документ во вложенный объект.

Я объясню короткий сценарий: у нас есть два пользователя: Алиса и БобАлиса работает над X, а Боб работает над Y. Мы получили документ о фильмах: Пример: имя: Дата в матрице: 1999 актеры: [Киану Ривз, Лоуренс Фишберн]

Теперь я хочу отфильтровать то, что могут видеть Алиса и Боб вполе актеров.В качестве примера можно увидеть Киану Ривза, который работает с 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"}}}]}}"}
}

Чтобы отфильтровать документпо ролям или работам, которые работают, я знаю, что я хочу фильтровать внутри вложенного объекта по работам, но я не знаю, как я могу добавить этот фильтр в предыдущий шаблон.

У кого-то есть идея?

...