如何使用has_child过滤器排除文档

时间:2015-12-29 07:39:09

标签: elasticsearch

我在弹性搜索中有以下映射:

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个查询?

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子句中。

https://www.elastic.co/guide/en/elasticsearch/guide/current/combining-filters.html#bool-filter?q=bool过滤器

以下是有关如何使用bool过滤器的链接..

如果您需要更深入的解释,请告诉我