【发布时间】:2014-10-31 19:00:27
【问题描述】:
我正在努力从 ElasticSearch 中获取我需要的信息。
我的日志语句是这样的:
field1: Example
field2: Example2
field3: Example3
我想搜索一个时间范围(使用过去 24 小时)来查找在 field1 中具有 this 和在 field2 中具有 that 的所有数据。
然后可能有多个this.that.[field3] 条目,所以我只想返回该字段的最大值。
其实在我的数据中,field3其实就是入口的key。
检索我需要的信息的最佳方式是什么?我已经设法使用 aggs 返回了结果,但是数据在存储桶中,我只对 field3 最大值的数据感兴趣。
我添加了一个我要执行的查询示例:https://jsonblob.com/54535d49e4b0d117eeaf6bb4
{
"size": 0,
"aggs": {
"agg_129": {
"filters": {
"filters": {
"CarName: Toyota": {
"query": {
"query_string": {
"query": "CarName: Toyota"
}
}
}
}
},
"aggs": {
"agg_130": {
"filters": {
"filters": {
"Attribute: TimeUsed": {
"query": {
"query_string": {
"query": "Attribute: TimeUsed"
}
}
}
}
},
"aggs": {
"agg_131": {
"terms": {
"field": "@timestamp",
"size": 0,
"order": {
"_count": "desc"
}
}
}
}
}
}
}
},
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"range": {
"@timestamp": {
"gte": "2014-10-27T00:00:00.000Z",
"lte": "2014-10-28T23:59:59.999Z"
}
}
}
],
"must_not": []
}
}
}
}
}
因此,上面的示例仅显示 CarName = Toyota 且 Attribute = TimeUsed 的那些。
我的数据如下:
有 x 辆汽车 CarName,每辆汽车有 y 辆 Attributes,每个 Attributes 都有一个带有时间戳的文档。
首先,我正在寻找 CarName.Attribute.timestamp(最新)的查询,但是,如果我能够只使用一个查询来获取每个 CarName 的每个属性的最新时间戳,那么这将减少从 ~50 到 1 的查询调用。
【问题讨论】:
标签: elasticsearch