gpt4 book ai didi

elasticsearch - 在 ElasticSearch 中仅聚合匹配的嵌套对象值

转载 作者:行者123 更新时间:2023-11-29 02:44:42 27 4
gpt4 key购买 nike

我只需要对与查询匹配的嵌套对象的值求和。看起来 ElasticSearch 确定与查询匹配的文档,然后对所有嵌套对象求和。从下面的大纲中,我想搜索 nestedobjects.objtype="A"并仅返回匹配 nestedobjects 的 objvalue 的总和,我想获得值 4。这可能吗?如果是,怎么办?

这是映射

{
"myindex": {
"mappings": {
"mytype": {
"properties": {
"nestedobjects": {
"type": "nested",
"include_in_parent": true,
"properties": {
"objtype": {
"type": "string"
},
"objvalue": {
"type": "integer"
}
}
}
}
}
}
}
}

这是我的文件

PUT /myindex/mytype/1
{
"nestedobjects": [
{ "objtype": "A", "objvalue": 1 },
{ "objtype": "B", "objvalue": 2 }
]
}
PUT /myindex/mytype/2
{
"nestedobjects": [
{ "objtype": "A", "objvalue": 3 },
{ "objtype": "B", "objvalue": 3 }
]
}

这是我的查询代码。

POST allscriptshl7/_search?search_type=count
{
"query": {
"filtered": {
"query": {
"query_string": {
"query": "nestedobjects.objtype:A"
}
}
}
},
"aggregations": {
"my_agg": {
"sum": {
"field": "nestedobjects.objvalue"
}
}
}
}

最佳答案

由于两个(外部)文档都匹配其内部文档之一与查询匹配的条件,因此返回两个外部文档,并针对属于这些外部文档的所有内部文档计算聚合。哇。

无论如何,我认为这似乎可以满足您的要求,使用 filter aggregation :

POST /myindex/_search?search_type=count
{
"aggs": {
"nested_nestedobjects": {
"nested": {
"path": "nestedobjects"
},
"aggs": {
"filtered_nestedobjects": {
"filter": {
"term": {
"nestedobjects.objtype": "a"
}
},
"aggs": {
"my_agg": {
"sum": {
"field": "nestedobjects.objvalue"
}
}
}
}
}
}
}
}
...
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0,
"hits": []
},
"aggregations": {
"nested_nestedobjects": {
"doc_count": 4,
"filtered_nestedobjects": {
"doc_count": 2,
"my_agg": {
"value": 4,
"value_as_string": "4.0"
}
}
}
}
}

这是我用来测试它的一些代码:

http://sense.qbox.io/gist/c1494619ff1bd0394d61f3d5a16cb9dfc229113a

顺便说一下,这个问题结构很好。

关于elasticsearch - 在 ElasticSearch 中仅聚合匹配的嵌套对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32894861/

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