0

ユーザーがタイプごとに異なるアクセス許可を持つ可能性がある、さまざまなタイプのインデックスがあります。すべてのレコードにはpath、表示できるユーザーと表示できないユーザーを決定するために使用されるフィールドがあります。レコードの例を次に示します。

id: 12   type: Project  path: projects/12                   content: …
id: 874  type: Task     path: projects/12/public/tasks/874  content: …
id: 3    type: User     path: users/4                       content: …

users/12ユーザーが、users/14users/18、およびを表示できることがわかっている場合、一致するレコードのみをフィルター処理してフィールドprojects/*/public/*内を検索するクエリをどのように構成しますか? contentこれは SQL では簡単ですが (データベースの FULLTEXT インデックスをモデルにしています)、ElasticSearch で動作させる必要があります。

4

1 に答える 1

0

これは、単純な bool クエリを使用して実現できます。<index>あなたが言及した特定のインスタンスについて、以下のクエリを試してください(実際のインデックス名に置き換えてください)。これにより、すべてのタイプで検索が実行されます。もちろん、コードは適切なshould句 (用語やワイルドカードなど) を生成するのに十分一般的である必要があります。

POST <index>/_search
{
    "fields": [
       "content"
    ],
    "query": {
        "bool": {
            "should": [
               {
                   "term": {
                      "path": "users/12"
                   }
               },
               {
                   "term": {
                      "path": "users/14"
                   }
               },
               {
                   "wildcard": {
                      "path": "projects/*/public/*"
                   }
               }
            ]
        }
    }
}
于 2014-09-06T04:36:56.727 に答える