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

Grafana Elasticsearch - Query condition that references field value

给定以下 Elasticsearch 文档结构

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

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

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

这是我到目前为止尝试过的方法:

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

我有什么办法可以做到这一点吗?

提前致谢!

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