我在弹性搜索中有以下映射:
my_parent
- 父类型
my_child
- 儿童类型(与my_parent
有多对一的关系)
假设my_child
有字段name
。
我想要做的是获取所有my_parent
个没有任何子文档的文档name
等于test
。
这是SQL中的等价物:
SELECT * FROM my_parent WHERE id NOT IN (
SELECT DISTINCT parent_id
FROM my_child
WHERE name = 'test'
)
可以在单个查询中的elasticsearch中完成吗?或者我应该使用2个查询?
答案 0 :(得分:3)
您可以使用 has_child
和 bool
must_not
查询来实现您的目标。
POST< indexname> / my_parent / _search
 {
 “查询”:{
 “bool”:{
 “must_not”:[
 {
 “has_child”:{
 “type”:“my_child”,
 “查询”:{
 “术语”:{
 “名字”:{
 “价值”:“测试”
 }
 }
 }
 }
 }
 ]
 }
 }
}
 代码>


答案 1 :(得分:1)
https://www.elastic.co/guide/en/elasticsearch/guide/current/has-child.html
您可以查看上面的链接,他们已经提到了如何根据孩子获得父...
您接受该查询并将其放在bool过滤器/查询的must_not子句中。
以下是有关如何使用bool过滤器的链接..
如果您需要更深入的解释,请告诉我