Итак, я разрабатываю приложение, в котором мне нужен инструмент поиска, который будет индексировать фотографии и документы, но иногда я не буду знать точный месяц или день, когда документ возник, так что до сих пор я хранили даты в моей таблице MySQL как поле date
или datetime
, который позволяет дополнительные значения:Сохранение даты и времени с дополнительными параметрами в индексе elasticsearch?
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, и это явно не устраивает этот синтаксис. Попытка индекса документа с DateTime с «из диапазона значений» (например, 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, чтобы я мог хранить дополнительные свойства даты и все еще иметь возможность заказывать и искать по датам?
Где я должен хранить это тогда? Если мне нужно только объявление отображения для запуска один раз, как я могу управлять этим, а не запускать его каждый раз, когда мне нужно индексировать объект? Куда поместил бы это в ваше приложение? – ReactingToAngularVues
Вы просто используете это объявление поля в своем сопоставлении и PUT сопоставляете только один раз, прежде чем начинать индексировать свои данные. Не нужно ставить отображение каждый раз. – Val
Вал, это имеет смысл, но я не могу думать о местоположении в моем приложении, которое вызывается только один раз ... мне нужно будет спросить, существует ли индекс, а если нет, то добавить сопоставление? – ReactingToAngularVues