{ "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" } } } } ] } } ] } } }
答案 0 :(得分:2)
不,不幸的是。
实际上,是的。我错了。 OP在Bodybuilder的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条款是如何合并的。让我知道这不是 为你工作。