Итак, я разрабатываю приложение, в котором мне нужен инструмент поиска, который будет индексировать фотографии и документы, но иногда я не буду знать точный месяц или день, в который был создан документ, поэтому до сих пор я сохранял даты в моя таблица MySQL как date
или же datetime
поле, которое допускает необязательные значения:
2015-03-11 // Valid MySQL date
2015-12-00 // Also a valid MySQL date, but a null day to represent 'it is not known'
2015-00-00 // Another valid MySQL date, with a null date and month to represent 'this document came from the year 2015, but at some unknown point'
Теперь, это на самом деле работает довольно хорошо, MySQL по-прежнему будет упорядочивать и сортировать даты соответствующим образом.
Однако сейчас я пришел к созданию инструмента поиска с использованием Elasticsearch, и он явно не доволен этим синтаксисом. Попытка индексировать документ с указанием даты и времени со значениями вне диапазона (например, 2015-00-00
) приводит к этому ответу:
{
"error":"MapperParsingException[failed to parse [originated_at]]; nested: MapperParsingException[failed to parse date field [2015-00-00], tried both date format [dateOptionalTime], and timestamp number with locale []]; nested: IllegalFieldValueException[Cannot parse \"2015-00-00\": Value 0 for monthOfYear must be in the range [1,12]]; ",
"status":400
}
По понятным причинам. Однако необязательные даты являются обязательным требованием, и мне нужно выбранное мной решение, чтобы это сделать.
Каков наилучший способ заставить Elasticsearch позволить мне хранить необязательные свойства даты и при этом иметь возможность упорядочивать и выполнять поиск по датам?
В вашем отображении вы можете объявить поле даты с несколькими различными форматами разделены ||
, как это:
{
"date_field": {
"type": "date",
"format": "yyyy||yyyy-MM||yyyy-MM-dd"}
}
В результате вы сможете сохранить любую из следующих дат:
yyyy
)yyyy-MM
)yyyy-MM-dd
)Попробуйте это.
Настройте отображение:
{
"yourIndex": {
"properties": {
"date": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"}
}
}
}
Кроме того, посмотрите Вот — Формат даты отображения Elasticsearch.