Разобрать строку даты вasticsearch, используя пользовательскую строку формата joda - PullRequest
0 голосов
/ 12 июня 2018

Попытка выяснить, почему этот нестандартный формат joda вызывает ошибку.Я пытаюсь сопоставить эту строку даты:

Wed May 23 2018 13:45:04 GMT-0700 (Pacific Daylight Time)

с этой строкой пользовательского формата joda:

E MMM dd yyyy HH:mm:ss z (zzzz)||epoch_millis

ЯДелая это в консоли разработчика, чтобы проверить отображение, которое использует формат.Elasticsearch не нравится:

PUT /twitter
{}

PUT /twitter/_mapping/_doc
{
    "properties": {
        "TxnDate": {
            "type": "date",
            "format": "E MMM dd yyyy HH:mm:ss z (zzzz)||epoch_millis"
        }
    }
}

Elasticsearch возвращается:

{
    "error": {
        "root_cause": [
            {
                "type": "illegal_argument_exception",
                "reason": "Incomplete parser array"
            }
        ],
        "type": "illegal_argument_exception",
        "reason": "Incomplete parser array"
    },
    "status": 400
}

1 Ответ

0 голосов
/ 12 июня 2018

Чтобы сохранить отображение, необходимо использовать правильный формат, т. Е. Вам нужно экранировать GMT- и скобки.

E MMM dd yyyy HH:mm:ss 'GMT'Z '('ZZZZ')'||epoch_millis

Однако это еще не конецк сожалению, вы получите ошибку синтаксического анализа во время индексации при сохранении документа с датой, такой как Wed May 23 2018 13:45:04 GMT-0700 (Pacific Daylight Time).Проблема здесь в том, что время Joda не анализирует часовые пояса, как «объяснено» в их документации :

Имена зон: Имена часовых поясов ('z') не могут быть проанализированы.

Таким образом, единственным вариантом является удаление часового пояса в скобках перед индексацией документа, и шаблон E MMM dd yyyy HH:mm:ss 'GMT'Z||epoch_millis будет работать нормально.Часовой пояс в скобках в любом случае бесполезен.

С другой стороны, вы должны взять привычку хранить все свои даты в часовом поясе GMT, но это уже другая история.

...