我有一个带有索引的elasticsearch集群,其中包含以下架构:
{
"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或任何其他功能的elasticsearch中执行此操作?
获得这些结果后,我想根据status
字段在某些字段中执行聚合。例如,如果有100个结果分布在2个测试中testA
和testB
,我想汇总
一个。 testA正在传递的结果数
湾具有testA且失败的结果数
℃。有testB并且正在传递的结果数
d。具有testB并且失败的结果数。
同样适用于城市和探索者。
答案 0 :(得分:0)
&#39;一旦我得到了这些结果&#39;您将完成该查询。 Elastic不支持连接查询。您可以在客户端进行聚合或运行新查询 对于你的第一个问题:我一直在做的是在Kibana中进行可视化(在你的情况下使用subbucket术语聚合)并查看它发送的查询(你可以使用可视化底部的小箭头图标来获得它)。它可能并不总是100%准确,但它开始。