ElasticSearch - разница между двумя полями даты - PullRequest
0 голосов
/ 19 октября 2018

У меня есть индекс в ElasticSearch с двумя полями типа даты ( metricsTime & прибытие-время ).Пример документа приведен ниже.В Кибане я создал сценарий поля задержка для разницы между этими двумя полями.Мой безболезненный сценарий:

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 Ответ

0 голосов
/ 19 октября 2018

Проверьте список 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 (что на единицу больше, чем разница в датах), тогда вы увидите, что вышеуказанное query не вернет документ.

Но, тем не менее, я привел запрос в качестве примера того, как с помощью сценариев вы можете сравнивать два разных запроса, и, пожалуйста, обратитесь к ссылке, которой я поделился.

...