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
字段的值。
这是我到目前为止尝试过的方法:
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 中创建一个别名来让它工作,如下所示:
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 数据源。在我的仪表板中,我将此数据源与空查询一起使用,因为所有过滤都是由别名完成的。
给定以下 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
字段的值。
这是我到目前为止尝试过的方法:
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 中创建一个别名来让它工作,如下所示:
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 数据源。在我的仪表板中,我将此数据源与空查询一起使用,因为所有过滤都是由别名完成的。