2017-01-04 15 views
0

上の入れ子になったとのクエリと条件、私は以下のような2サンプルレコードがあります。弾性検索:親と子

{ 
    "parents": [ 
     { 
     "child": [ 
      { 
      "is_deleted": false, 
      "child_id": -1, 
      "timestamp": 1483536052232 
      } 
     ], 
     "parent_id": 810 
     }, 
     { 
     "child": [ 
      { 
      "is_deleted": true, 
      "child_id": 105, 
      "timestamp": 1483537567000 
      } 
     ], 
     "parent_id": 42 
     } 
    ] 
}, 
{ 
    "parents": [ 
     { 
     "child": [ 
      { 
      "is_deleted": false, 
      "child_id": 105, 
      "timestamp": 1483537567000 
      } 
     ], 
     "parent_id": 42 
     } 
    ] 
} 

と私のマッピング:

"properties": { 
    "parents": { 
    "type": "nested", 
    "properties": { 
     "parent_id": { 
     "type": "integer", 
     "doc_values": false 
     }, 
     "child": { 
     "type": "nested", 
     "properties": { 
      "is_deleted": { 
      "type": "boolean", 
      "doc_values": false 
      }, 
      "child_id": { 
      "type": "integer", 
      "doc_values": false 
      }, 
      "timestamp": { 
      "type": "long", 
      "doc_values": false 
      } 
     } 
     } 
    } 
    } 

を私は持っている親IDで検索します少なくとも1人の子どもがis_deletedで、falseとなります。たとえば、私が親ID 42で照会する場合、私は第2文書のみを最初に取得しないといけません。

+0

あなたは父と両親が何であるかを明確にしてくださいすることができ、私は本当にすることはできませんあなたが何を意味するのか推測すると、あなたの2つの文書は全く似ていませんか? – Artholl

+0

それは誤植でした。親はユーザであり、子は彼がファイルを追加したものです。 –

答えて

1

ネストしたクエリを使用してネストされたフィールドをクエリする必要があります。ここで

は一例ですが、私はこれが最善の解決策である場合には、少なくともそれが働い1であるかわからない:

POST /test1/test/_search 
{ 
    "query": { 
     "nested": { 
     "path": "parents", 
     "query": { 
      "bool": { 
       "must": [ 
        { 
        "match": { 
         "parents.parent_id": 42 
        } 
        }, 
        { 
        "nested": { 
         "path": "parents.child", 
         "query": { 
          "term": { 
           "parents.child.is_deleted": "F" 
          } 
         } 
        } 
        } 
       ] 
      } 
     } 
     } 
    } 
}