2017-02-23 5 views
1
 
{ 
    "query": 
    { 
    "bool": 
    { 
     "should": [ 
     { 
      "has_child": { 
      "inner_hits":{}, 
      "type": "emp", 
      "query": { 
       "match": { 
        "name": "xyz" 
       } 
       } 
      } 
      }, 
      { 
      "bool": 
      { 
       "must": 
       [ 
        { 
        "match" : { "name" : "xyz" } 
        }, 
        { 
        "match" : { "_type" : "emps" } 
        } 
       ], 
       "must_not": [ 
       { 
        "has_child": { 
        "type": "emp", 
        "query": { 
         "exists": 
          { 
           "field": "name" 
          } 
        } 
        } 
       } 
       ] 
      } 
      } 
     ] 
     } 
    } 
} 

答えて

1

いいえ、残念ながら、

実際、はいです。私は間違っていた。 OPはボディービルダーのgithubの上his questionを掲載し、次の応答受信:それは少し風変わりだが、これは私がそれを書くだろう方法です

を:

var inner = bodybuilder() 
    .query('match', 'name', 'xyz') 
    .query('match', '_type', 'emps')  
    .notQuery('has_child', {type: 'emp'}, (q) => { 
     return q.query('exists', 'field', 'name') 
    }) 
    .build() 

bodybuilder() 
    .orQuery('bool', inner.query.bool) 
     .orQuery('has_child', {inner_hits: {}, type: 'emp'}, (q) => { 
     return q.query('match', 'name', 'xyz') 
    }) 
    .build() 

何かに気をつけ ました: orquerysの順序はここで重要ですが、これらが切り替えられた場合は、 が機能しません。これは理想的ではありません。私はそれが のbool句がどのようにマージされているのかと考えています。これが ではないことを教えてください。

+0

ご確認くださいhttps://github.com/danpaz/bodybuilder/issues/120 – Chirag

+0

間違った方法であなたを導いて申し訳ありません。私は自分の答えを修正した。 –

関連する問題