ElasticSearch - разница между двумя полями даты
У меня есть индекс в ElasticSearch с двумя полями типа даты (metricsTime & comingTime). Пример документа приведен ниже. В Кибане я создал задержку поля в сценарии для разницы между этими двумя полями. Мой безболезненный сценарий:
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
]
}
1 ответ
Проверьте список выражений Lucene, чтобы проверить, какие выражения доступны для поля даты и как вы можете их использовать.
Просто для простоты, проверьте ниже 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
(что на единицу больше, чем разница в датах), то вы видите, что выше query
не вернул бы документ.
Но, тем не менее, я упомянул запрос в качестве примера того, как с помощью сценариев вы можете сравнить два разных запроса, и, пожалуйста, обратитесь к ссылке, которой я поделился.