elasticsearch ElasticSearch/Kibana-选定时间范围内不存在的“术语”的存储桶
我有一个非常常见的问题,那就是我需要显示哪些用户或文档类别,所有这些都是由
elasticsearch ElasticSearch/Kibana-选定时间范围内不存在的“术语”的存储桶,
elasticsearch,kibana,
elasticsearch,Kibana,我有一个非常常见的问题,那就是我需要显示哪些用户或文档类别,所有这些都是由关键字列给出的,它们在给定的时间间隔内不存在。我默认使用术语聚合,这显然不会为缺少的条目返回任何内容 在关系数据库中,这是一个非常简单的问题,只需从用户表执行外部联接即可。在Kibana/ElasticSearch中,我不知道如何解决这个问题 有效的方法是切换到过滤器,然后将所有用户复制并粘贴到各个过滤器规范中。但是,它无法维护,并且不能与多个报告一起扩展 我可以为每个术语提供一个示例文档,即使它只是一个虚拟文档。这将在K
关键字
列给出的,它们在给定的时间间隔内不存在。我默认使用术语聚合,这显然不会为缺少的条目返回任何内容
在关系数据库中,这是一个非常简单的问题,只需从用户表执行外部联接即可。在Kibana/ElasticSearch中,我不知道如何解决这个问题
有效的方法是切换到过滤器,然后将所有用户复制并粘贴到各个过滤器规范中。但是,它无法维护,并且不能与多个报告一起扩展
我可以为每个术语提供一个示例文档,即使它只是一个虚拟文档。这将在Kibana auto complete中选择项目时显示所有项目,等等。如果我可以得到结果,使每个项目始终包含至少一个bucket,那么问题就解决了
例如,Kibana Y轴是一个简单的计数,而x轴应该显示输入最少的用户。报告设置为显示时段2的数据:
User | Period 1 | Period 2 |
MR_X | o o o o o o | o o o o |
MISS_Y | o o o | o |
MR_Z | o o o | |
MISS_W | | |
在本例中,周期2的报告应至少显示MISS_Y和MR_Z,因为它们在数据集中是已知的,并且在周期2中具有最少的条目。如果能以某种方式将数据集中没有任何条目的W小姐包括进来,那将是一种奖励。如果我误解了你的问题,请提前道歉。聚合提供了一种获得结果集中文档的不同分布的方法。如果您希望为不同的时间间隔使用不同的聚合,则需要查询返回所有时间间隔的结果,并且需要在每个聚合中按不同的时间间隔进行筛选 例如,如果您具备以下条件:
- 一个名为
的字段,用于指定时间间隔timestamp
- 一个名为
的字段,您希望对其进行聚合user
- 您报告的时间范围(即问题中的第2个时段)为最后1小时
- 第1阶段是最后1小时之前的所有内容
GET myindex/_search
{
...
"aggs": {
"period-2-distribution": {
"filter": {
"range": {
"timestamp": {
"gte": "now-1h"
}
}
},
"aggs": {
"user-agg": {
"terms": {
"field": "user",
"size": 1000
}
}
}
},
"period-1-distribution": {
"filter": {
"range": {
"timestamp": {
"lt": "now-1h"
}
}
},
"aggs": {
"user-agg": {
"terms": {
"field": "user",
"size": 1000
}
}
}
}
}
}
重申一下,如果当前在
aggs
块之前有一个query
,则需要删除query
中指定时间间隔的任何子句。诚然,这是对您的查询的一个非常有侵入性的更改,我很感激它可能会打破您的另一个要求。在这种情况下,您需要采取不同的方法,但Elasticsearch相当灵活,有望为您提供一种获取所需内容的方法。您能分享您的索引映射和用例的示例查询吗?@avik:我没有一个可以分享的模式-它庞大而混乱(甚至对我来说)。但问题与以下情况相同:{my key:{type:keyword},my value:{type:float}
。给定一个时间范围,我如何创建时间范围内不存在但存在于索引(或其他一些索引,join)中的my key
值的存储桶?一个解决方案是为报告将覆盖的每个间隔插入虚拟对象。每周吃一次。然而,这将要求报告明确否定这些傻瓜的贡献。生成数据还需要一些开发。非常感谢您的回答。你的假设是对的,我有用户,时间戳,值。我想我可以设置Kibana报告来查询整个范围,然后设置两个聚合-一个用于我想要的数据-另一个用于整个历史,包括所有相关用户。你知道是否可以过滤掉“完整的历史记录”,只显示“第二阶段分布”的数据,同时保留现在为空的实体?通过包括完整的数据集,在用户ID上应用术语聚合,然后使用过滤器拆分图表(在时间范围内与外部)-在Kibana中-我可以看到我想要的数据,但我也看到了很多其他数据。你知道我如何对n
用户进行后期筛选吗?这些用户在想要的时间范围内拥有最少的条目?