Grafana Elasticsearch - 引用字段值的查询条件

Posted

技术标签:

【中文标题】Grafana Elasticsearch - 引用字段值的查询条件【英文标题】:Grafana Elasticsearch - Query condition that references field value 【发布时间】:2022-01-09 04:50:13 【问题描述】:

给定以下 Elasticsearch 文档结构


  "mappings": 
    "doc": 
      "properties": 
        "projectKey": 
          "type": "keyword"
        ,
        "documentDate": 
          "type": "date"
        ,
        "lastAnalysisDate": 
          "type": "date"
        ,
        "qualityScore": 
          "type": "float"
        
      
    
  

我想获取所有满足这些条件的文档(伪代码):(currentDate - 1 year (documentDate - 1 year

第二个条件(斜体)是我遇到的问题。我不知道如何让查询引用documentDate 字段的值。

这是我目前尝试过的:

documentDate:[now-365d TO now] AND lastAnalysisDate:[documentDate-365d TO documentDate] => 返回 0 个结果(应该是数千个) documentDate:[now-365d TO now] AND lastAnalysisDate:[doc['documentDate'].value-365d TO doc['documentDate'].value] => 无效查询 documentDate:[now-365d TO now] AND lastAnalysisDate:[doc['documentDate'].date-365d TO doc['documentDate'].date] => 无效查询

Grafana 只支持 Elasticsearch 的 Lucene 语法,所以我不能使用查询 DSL。

有什么办法可以做到吗?

提前谢谢你!

【问题讨论】:

【参考方案1】:

我可以通过在 Elasticsearch 中创建别名来使其正常工作,如下所示:

POST _aliases

  "actions": [
    
      "add": 
        "index": "myIndex",
        "alias": "myAlias",
        "filter": 
          "bool": 
            "must": [
              
                "query_string": 
                  "query": "documentDate:[now-365d TO now]"
                
              ,
              
                "bool": 
                  "should": [
                    
                      "script": 
                        "script": 
                          "source": "doc['lastAnalysisDate'].value.toInstant().toEpochMilli() >= doc['documentDate'].value.minusYears(1).toInstant().toEpochMilli() && doc['lastAnalysisDate'].value.toInstant().toEpochMilli() <= doc['documentDate'].value.toInstant().toEpochMilli()"
                        
                      
                    
                  ]
                
              
            ]
          
        
      
    
  ]

然后在 Grafana 中,我创建了一个指向别名的 Elasticsearch 数据源。在我的仪表板中,我将此数据源与一个空查询一起使用,因为所有过滤都是由别名完成的。

【讨论】:

以上是关于Grafana Elasticsearch - 引用字段值的查询条件的主要内容,如果未能解决你的问题,请参考以下文章

如何在Grafana中查询Elasticsearch

如何从 ElasticSearch 创建两个级别的 Grafana 变量?

Grafana,ElasticSearch - 计算两个流任务之间经过的时间图

Grafana - 我们如何加入来自 TimescaleDB 和 ElasticSearch 的数据?

Grafana与Elasticsearch

Grafana中如何使用Prometheus数据源监控elasticsearch