2016-12-22 25 views
2

元々、私は両親のリストと各自の最新の子を1つずつ取得しようとしていました。私は次のクエリでそれを行う方法を考え出しました。Elasticsearchは子どもがいないすべての親を得る

{"query": 
    {"has_child": 
    {"inner_hits": 
     {"name": "latest", "size": 1, "sort": 
     [{"started_at": {"order": "desc"}}] 
     }, 
    "type": "child_type", 
    "query": {"match_all": {}} 
    } 
    } 
} 

しかし、問題は次のとおりです。結果には、子を持たない親は含まれません。 min_children: 0を追加しても役に立ちません。だから私は子供がいないすべての親のためのクエリを作成し、単一のORクエリでこれらの2つを組み合わせることができると思った。しかし、私はそのようなクエリを構築するのに問題があります。何か提案をいただければ幸いです。ここで

答えて

4

はあなたのクエリです:

{ 
     "query":{ 
     "bool":{ 
      "should":[ 
      { 
       "bool":{ 
       "must_not":[ 
        { 
        "has_child":{ 
         "type":"child_type", 
         "query":{ 
         "match_all":{} 
         } 
        } 
        } 
       ] 
       } 
      }, 
      { 
       "has_child":{ 
       "inner_hits":{ 
        "name":"latest", 
        "size":1, "sort":[{"started_at": {"order": "desc"}}] 
       }, 
       "type":"child_type", 
       "query":{ 
        "match_all":{} 
       } 
       } 
      } 
      ] 
     } 
     } 
    } 
+0

私はパフォーマンスについての質問を求めることができますか?このリクエストには適しているのですか、データを改造する必要がありますか? =) – teferi

+0

パフォーマンスは良いはずです。しかし、親子の代わりにネストされた型を使用すると少し速くなります。 –

+0

NESTでこれを達成する方法.. – NMathur

関連する問題