【问题标题】:Grafana Elasticsearch - Query condition that references field valueGrafana Elasticsearch - 引用字段值的查询条件
【发布时间】: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。

有什么办法可以做到吗?

提前谢谢你!

【问题讨论】:

    标签: elasticsearch lucene grafana


    【解决方案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 数据源。在我的仪表板中,我将此数据源与一个空查询一起使用,因为所有过滤都是由别名完成的。

    【讨论】:

      猜你喜欢
      • 2019-03-06
      • 2014-11-09
      • 1970-01-01
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多