Node.js 弹性搜索日期范围聚合未提供完整数据
我正在查询根据日期范围获取聚合数据,如下所示Node.js 弹性搜索日期范围聚合未提供完整数据,node.js,
elasticsearch,Node.js,
elasticsearch,我正在查询根据日期范围获取聚合数据,如下所示 "aggs": { "range": { "date_range": { "field": "sold", "ranges": [ { "from": "2014-11-01", "to": "2014-11-30" }, { "from": "2014-08-01
"aggs": {
"range": {
"date_range": {
"field": "sold",
"ranges": [
{ "from": "2014-11-01", "to": "2014-11-30" },
{ "from": "2014-08-01", "to": "2014-08-31" }
]
}
}
}
使用此选项,我得到了此响应
"aggregations": {
"range": {
"buckets": [
{
"key": "2014-08-01T00:00:00.000Z-2014-08-31T00:00:00.000Z",
"from": 1406851200000,
"from_as_string": "2014-08-01T00:00:00.000Z",
"to": 1409443200000,
"to_as_string": "2014-08-31T00:00:00.000Z",
"doc_count": 1
},
{
"key": "2014-11-01T00:00:00.000Z-2014-11-30T00:00:00.000Z",
"from": 1414800000000,
"from_as_string": "2014-11-01T00:00:00.000Z",
"to": 1417305600000,
"to_as_string": "2014-11-30T00:00:00.000Z",
"doc_count": 2
}
]
}
}
但我还需要满足此范围的完整聚合数据,而不仅仅是doc_count,
是否有办法获得此信息。请帮助不清楚您要查找的其他字段,因此我提供了几个示例 通过将另一个aggs嵌套在第一个内,您可以要求Elasticsearch提取其他值,例如,、min、max、stats、 此示例查询将返回
field\u count
——一个myfield
并返回订单计数
——一个基于脚本的总和
"aggs": {
"range": {
"date_range": {
"field": "sold",
"ranges": [
{ "from": "2014-11-01", "to": "2014-11-30" },
{ "from": "2014-08-01", "to": "2014-08-31" }
]
}
}
},
"aggs" : {
"field_count": {"value_count" : { "field" : "myfield" } },
"order_count": {"sum" : {"script" : " doc[\"output_msgtype\"].value == \"order\" ? 1 : 0"} } }}
}
如果您没有在数据上寻找任何总和、计数和平均值,那么聚合将不会有任何帮助 相反,我会在每个范围内运行一次标准查询。e、 g:
curl -XGET 'http://localhost:9200/test/cars/_search?pretty' -d '{
"fields" : ["price", "color", "make", "sold" ],
"query":{
"filtered": {
"query": {
"match_all" : { }
},
"filter" : {
"range": {"sold": {"gte": "2014-09-21T20:03:12.963","lte": "2014-09-24T20:03:12.963"}}}
}
}
}'
根据需要重复此查询,但每次都要修改范围。Hi ollyc,谢谢,但我想知道如何获取满足此条件的实际数据,请查看能否更新您的问题?您的要求不明确-您是在询问聚合总数还是在聚合中过滤?嗨,ollyc,假设我有以下数据[{“价格”:20000,“颜色”:“红色”,“制造”:“本田”,“售出”:“2014-11-05”},{“价格”:20000,“颜色”:“红色”,“制造”:“本田”,“售出”:“2014-11-05”},{“价格”:30000,“颜色”:“绿色”,“制造”:“福特”,“售出”:“2014-05-18”}]我正在查询“aggs”:{“范围”:{“日期范围”:{“字段”:“售出”,“范围”:[{“从”:“2014-11-01”,“至”:“2014-11-30”}]继续输出是“聚合”:{“范围”:{“桶”:[{“键”:“2014-11-01T00:00:00.000Z-2014-11-30T00:00:00.000Z”,“from”:141480000000,“from”;“from”;“from”;“from”;“from”;“from”;“from”;“from”;“from”:“2014-11-01T00:00:00.000Z”,“to”:1417305600000,“to”;“to”“2014-11-30T00:00:00.000Z”,“doc_count”:2}]}}}从输出中我得到两个数据(doc_count)在这个范围内,可以继续……。但是如果我需要满足这个条件或范围的数据,比如{“price”:20000,“color”:“red”,“make”:本田,售出:2014-11-05{“价格:20000,颜色:”“红色”,“制造:”“本田”,“售出:”“2014-11-05”}我需要做什么?请帮助???嗨,ollyc,谢谢,我知道这种方式,我需要基于聚合(或分组方式)获取数据,是否可以通过聚合获取数据