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 - 引用字段值的查询条件的主要内容,如果未能解决你的问题,请参考以下文章
如何从 ElasticSearch 创建两个级别的 Grafana 变量?
Grafana,ElasticSearch - 计算两个流任务之间经过的时间图