我的弹性搜索中有以下映射:
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'
)
这可以在弹性搜索中在单个查询中完成吗?或者我应该使用2个查询?
您可以使用has_child
和bool
must_not
查询来实现您想要的查询。
POST <indexname>/my_parent/_search
{
"query": {
"bool": {
"must_not": [
{
"has_child": {
"type": "my_child",
"query": {
"term": {
"name": {
"value": "test"
}
}
}
}
}
]
}
}
}
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-过滤器?q=布尔滤波器
这是关于如何使用bool过滤器的链接。。
如果您需要更深入的解释,请告诉我