Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch ElasticSearch/Kibana-选定时间范围内不存在的“术语”的存储桶_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Kibana - Fatal编程技术网 elasticsearch ElasticSearch/Kibana-选定时间范围内不存在的“术语”的存储桶,elasticsearch,kibana,elasticsearch,Kibana" /> elasticsearch ElasticSearch/Kibana-选定时间范围内不存在的“术语”的存储桶,elasticsearch,kibana,elasticsearch,Kibana" />

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小时之前的所有内容
然后,您可以尝试如下构造Elasticsearch查询

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
用户进行后期筛选吗?这些用户在想要的时间范围内拥有最少的条目?