1

Elasticsearch インデックスでユーザーを表示できるものをフィルタリングするために検索しています。さらに、いくつかのドキュメントをネストされたオブジェクトにフィルタリングしたいと考えています。

短いシナリオを説明します: 2 人のユーザーがいます: アリスとボブ アリスは X で作業し、ボブは Y で作業します 映画に関するドキュメントを取得しました: 例: 名前: マトリックス 日付: 1999 俳優: [キアヌ・リーブス、ローレンス・フィッシュバーン]

次に、Actors フィールドに Alice と Bob が表示されるものをフィルタリングしたいと思います。たとえば、Keanu Reeves は X に取り組んでいる人から見ることができ、Laurence Fishburne は 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