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

标签 elasticsearch

我只需要对与查询匹配的嵌套对象的值求和。看起来 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/

相关文章:

elasticsearch - ElasticSearch对聚合进行过滤,而不会影响聚合计数

elasticsearch - 删除与特定模式匹配的ElasticSearch索引

c# - 如果输出文档分数与ID相同,则C#Elastic Search Nest

c# - ElasticSearch 查询仅当所有字段都匹配我的过滤器时才检索结果?

elasticsearch - 在Elasticsearch中具有完全匹配的 bool AND

python - 如何检测十进制列是否应转换为整数或 double ?

performance - 大量删除的文档计数是否影响 ES 查询性能

elasticsearch - Graylog2-启动失败。地址已被使用

elasticsearch - 在Elasticsearch中检索记录ID

elasticsearch - 查找完整日期,而不仅仅是年份(Elasticsearch)