我是 ElasticSearch 的新手(使用版本 7.6),并试图找出如何在两个时间段之间进行搜索。我正在尝试的一个查询是查询 2019 年第 12 周和 2020 年第 12 周。其想法是比较结果。在阅读文档和搜索示例时,我已经接近我正在寻找的内容。
最简单的方法是使用两个不同的日期触发两个查询。但我想限制查询的数量。我根据阅读文档编写的最新查询是使用聚合,但我不确定这是正确的方法:
GET sample-data_*/_search/
{
"query": {
"bool": {
"must": [
{
"range": {
"@timestamp": {
"gte": "2020-03-20 08:00:00",
"lte": "2020-03-27 08:00:00"
}
}
}
]
}
},
"aggs": {
"range": {
"date_range": {
"field": "date",
"format": "8yyyy-MM-dd",
"ranges": [
{
"from": "2019-03-20",
"to": "2019-03-27",
"key": "last_years_week"
},
{
"from": "2020-03-20",
"to": "2020-03-27",
"key": "this_years_week"
}
],
"keyed": true
}
}
}
}
结果后面跟着聚合,但它们不包含我正在查找的数据。返回结果之一:
{
"_index" : "sample-data_2020_03_26",
"_type" : "_doc",
"_id" : "JyhcfWFFz0s1vwizjgxh",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2020-03-26 00:00:00",
"name" : "TEST0001",
"count" : "150",
"total" : 3000
}
}
...
"aggregations" : {
"range" : {
"buckets" : {
"last_years_week" : {
"from" : 1.55304E12,
"from_as_string" : "2019-03-20",
"to" : 1.5536448E12,
"to_as_string" : "2019-03-27",
"doc_count" : 0
},
"this_years_week" : {
"from" : 1.5846624E12,
"from_as_string" : "2020-03-20",
"to" : 1.5852672E12,
"to_as_string" : "2020-03-27",
"doc_count" : 0
}
}
}
}
我的问题是:使用 ElasticSearch 查询不同年份的两个日期之间的数据的有效方法是什么,以便它们可以用于比较数字?
如果您能为我指明正确的方向,我很乐意阅读有关对我而言复杂的 ElasticSearch 查询的更多信息。
谢谢!
最佳答案
不发布使用 Elasticsearch 查询的工作解决方案,而是按照问题评论中的讨论,以答案的形式对其进行总结,其中包含一些有用的链接。
Range queries on date fields对于在日期范围之间快速搜索非常有用,还支持各种 math operations on date fields .
aggregation on date range也会有用并且 此聚合与正常范围聚合之间的主要区别在于,起始值和终止值可以用日期数学表达式表示,如果您想对日期范围进行聚合,则该表达式非常有用,并且它支持数据数学格式,如下所述:
关于ElasticSearch - 在一系列日期之间搜索以进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60890571/