【发布时间】:2018-01-25 15:33:08
【问题描述】:
我有一个弹性搜索集群,其索引具有以下架构:
{
"my_index" : {
"mappings" : {
"test" : {
"properties" : {
"city" : {
"type" : "keyword"
},
"prober" : {
"type" : "keyword"
},
"status" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"test" : {
"type" : "keyword"
},
"time_taken" : {
"type" : "float"
},
"test_start" : {
"type" : "date"
},
"test_uuid" : {
"type" : "keyword"
},
"validity_start" : {
"type" : "date"
},
"validity_end" : {
"type" : "date"
}
}
}
}
}
}
每个test_uuid 都是唯一的,每个测试都有不同的参数,如架构中所示。
我正在尝试过滤/查找在特定时间戳下落在validity_start 和validity_end 次窗口下的所有文档。
我当前的查询如下所示:
{
"query": {
"bool": {
"filter": [
{ "range": { "validity_start": { "lte": "<timestamp>" }}},
{ "range": { "validity_end": { "gte": "<timestamp>" }}}
]
}
}
}
我有两个问题。
我想将返回的结果按
(test, city, prober)分组。在(validity_start, validity_end)的给定窗口内,可能有多个文档具有相同的(test,city,prober)值。我想过滤除最近执行的测试(可以由test_start时间确定)之外的所有文档。有没有办法在弹性搜索中使用 aggs 或任何其他功能来做到这一点?-
获得这些结果后,我想基于
status字段跨某些字段执行聚合。例如,如果有 100 个结果分布在 2 个测试中,testA和testB,我想汇总一个。具有 testA 并通过的结果数
b.具有 testA 且失败的结果数
c。具有 testB 并通过的结果数
d。具有 testB 且失败的结果数。
同样适用于城市和探测器。
【问题讨论】:
标签: elasticsearch elasticsearch-aggregation