gpt4 book ai didi

elasticsearch - Elasticsearch-获取子文档的数量,即使数量为零

转载 作者:行者123 更新时间:2023-12-02 22:29:03 25 4
gpt4 key购买 nike

目标:对父类型的文档执行1个搜索,并在结果中包括每个父文档的子代数。

(Elasticsearch v5)

数据模型具有2种文档类型:父级和子级。

我发现可以执行以下查询:

GET /stack/parent_doc/_search/
{
"query": {
"has_child": {
"type": "child_doc",
"inner_hits": {
"_source": false,
"size": 0
},
"query": {
"match_all": {}
}
}
}
}

我将所有至少有一个 child 的 parent 及其 child 的证件数目归还如下。这非常接近,但我也想拥有 个没有 child 的 parent 。
{
"took": 4077,
"timed_out": false,
"_shards": {
"total": 20,
"successful": 20,
"failed": 0
},
"hits": {
"total": 4974405,
"max_score": 1,
"hits": [{
"_index": "stack",
"_type": "parent_doc",
"_id": "f34e4848-fd63-35a3-84d3-82cbc8796473",
"_score": 1,
"_source": {
"field": "value"
},
"inner_hits": {
"child_doc": {
"hits": {
"total": 1,
"max_score": 0,
"hits": []
}
}
}
},
{
"_index": "stack",
"_type": "parent_doc",
"_id": "f34e1ece-2274-35f6-af37-37138825db20",
"_score": 1,
"_source": {
"field": "value"
},
"inner_hits": {
"child_doc": {
"hits": {
"total": 5,
"max_score": 0,
"hits": []
}
}
}
}
]
}
}

如果我删除查询的 match_all部分,则ES似乎完全忽略了 has_child子句,返回所有父级文档,无论它们是否有子级(这是我想要的),但没有 inner_hits,所以我没有得到计数。
  "query": {
"match_all": {}
}

有没有办法在单个查询中执行此操作?

最佳答案

您需要使用一个bool/should,其中包括当前查询以及另一个否定它的查询:

POST /stack/_search/
{
"query": {
"bool": {
"should": [
{
"has_child": {
"type": "child_doc",
"inner_hits": {
"_source": false,
"size": 0
},
"query": {
"match_all": {}
}
}
},
{
"bool": {
"must_not": {
"has_child": {
"type": "child_doc",
"query": {
"match_all": {}
}
}
}
}
}
]
}
}
}

现在,您将获得所有 parent ,无论他们是否有 child ,还可以获得每个 parent 有多少个 child 的信息。

关于elasticsearch - Elasticsearch-获取子文档的数量,即使数量为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48798104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com