lucene GrafanaElasticSearch-引用字段值的查询条件

xlpyo6sf  于 2022-11-07  发布在  Lucene
关注(0)|答案(1)|浏览(218)

给定以下Elasticsearch文档结构

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

我想获取满足这些条件的所有文档(伪代码):(当前日期- 1年〈文件日期〈当前日期)AND (文件日期- 1年〈上次分析日期〈文件日期)
第二个条件(斜体)是我遇到的问题,我不知道如何使查询引用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。
有没有办法我可以做到这一点或这是不可能的?
先谢谢你!

1u4esq0p

1u4esq0p1#

我可以通过在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数据源。在我的 Jmeter 板中,我使用了一个空查询的数据源,因为所有的过滤都是通过别名完成的。

相关问题