ElasticSearch - 两个日期字段之间的差异
ElasticSearch - difference between two date fields
我在 ElasticSearch 中有一个索引,其中包含两个日期类型的字段 (metricsTime & arrivalTime)。下面引用了一份样本文件。在 Kibana 中,我为这两个字段之间的差异创建了一个脚本字段 delay。我的 painless 脚本是:
doc['arrivalTime'].value - doc['metricsTime'].value
但是,我在导航到 Kibana 的“发现”选项卡时收到以下错误消息:class_cast_exception:无法将 [-] 操作应用于类型 [org.joda.time.MutableDateTime ] 和 [org.joda.time.MutableDateTime].
这看起来与 https://discuss.elastic.co/t/problem-in-difference-between-two-dates/121655 中提到的错误相同。但是该页面中的答案表明我的脚本是正确的。你能帮忙吗?
谢谢!
{
"_index": "events",
"_type": "_doc",
"_id": "HLV274_1537682400000",
"_version": 1,
"_score": null,
"_source": {
"metricsTime": 1537682400000,
"box": "HLV274",
"arrivalTime": 1539930920347
},
"fields": {
"metricsTime": [
"2018-09-23T06:00:00.000Z"
],
"arrivalTime": [
"2018-10-19T06:35:20.347Z"
]
},
"sort": [
1539930920347
]
}
检查 Lucene Expressions 的列表以检查哪些表达式可用于日期字段以及如何使用它们
为了简单起见,请检查以下内容query
。我在创建的示例索引中创建了两个字段 metricsTime
和 arrivalTime
。
示例文档
POST mydateindex/mydocs/1
{
"metricsTime": "2018-09-23T06:00:00.000Z",
"arrivalTime": "2018-10-19T06:35:20.347Z"
}
使用无痛脚本查询
POST mydateindex/_search
{ "query": {
"bool": {
"must": {
"match_all": {
}
},
"filter": {
"bool" : {
"must" : {
"script" : {
"script" : {
"inline" : "doc['arrivalTime'].date.dayOfYear - doc['metricsTime'].date.dayOfYear > params.difference",
"lang" : "painless",
"params": {
"difference": 2
}
}
}
}
}
}
}
}
}
注意查询中的以下行
"inline" : "doc['arrivalTime'].date.dayOfYear - doc['metricsTime'].date.dayOfYear > params.difference"
现在,如果您将 difference
的值从 2
更改为 26
(比日期差多 1),那么您会看到上面的 query
不会 return 文档。
但是,尽管如此,我还是以查询为例提到了如何使用脚本来比较两个不同的问题,请参考我分享的link。
我在 ElasticSearch 中有一个索引,其中包含两个日期类型的字段 (metricsTime & arrivalTime)。下面引用了一份样本文件。在 Kibana 中,我为这两个字段之间的差异创建了一个脚本字段 delay。我的 painless 脚本是:
doc['arrivalTime'].value - doc['metricsTime'].value
但是,我在导航到 Kibana 的“发现”选项卡时收到以下错误消息:class_cast_exception:无法将 [-] 操作应用于类型 [org.joda.time.MutableDateTime ] 和 [org.joda.time.MutableDateTime]. 这看起来与 https://discuss.elastic.co/t/problem-in-difference-between-two-dates/121655 中提到的错误相同。但是该页面中的答案表明我的脚本是正确的。你能帮忙吗?
谢谢!
{
"_index": "events",
"_type": "_doc",
"_id": "HLV274_1537682400000",
"_version": 1,
"_score": null,
"_source": {
"metricsTime": 1537682400000,
"box": "HLV274",
"arrivalTime": 1539930920347
},
"fields": {
"metricsTime": [
"2018-09-23T06:00:00.000Z"
],
"arrivalTime": [
"2018-10-19T06:35:20.347Z"
]
},
"sort": [
1539930920347
]
}
检查 Lucene Expressions 的列表以检查哪些表达式可用于日期字段以及如何使用它们
为了简单起见,请检查以下内容query
。我在创建的示例索引中创建了两个字段 metricsTime
和 arrivalTime
。
示例文档
POST mydateindex/mydocs/1
{
"metricsTime": "2018-09-23T06:00:00.000Z",
"arrivalTime": "2018-10-19T06:35:20.347Z"
}
使用无痛脚本查询
POST mydateindex/_search
{ "query": {
"bool": {
"must": {
"match_all": {
}
},
"filter": {
"bool" : {
"must" : {
"script" : {
"script" : {
"inline" : "doc['arrivalTime'].date.dayOfYear - doc['metricsTime'].date.dayOfYear > params.difference",
"lang" : "painless",
"params": {
"difference": 2
}
}
}
}
}
}
}
}
}
注意查询中的以下行
"inline" : "doc['arrivalTime'].date.dayOfYear - doc['metricsTime'].date.dayOfYear > params.difference"
现在,如果您将 difference
的值从 2
更改为 26
(比日期差多 1),那么您会看到上面的 query
不会 return 文档。
但是,尽管如此,我还是以查询为例提到了如何使用脚本来比较两个不同的问题,请参考我分享的link。