Thank you for reading this post, don't forget to subscribe!
В один прекрасный день, elastic может сойти с ума. Перестать принимать информацию в индекс и начать кидать в логи ошибки типа:
failed to parse field [time] of type [date]
Проблема в автоматическом распознавании содержимого полей. Особенно это касается поля, в котором содержится дата и время. Тот самый прекрасный день настал, когда наши программеры немножечко изменили формат даты. И этот формат не стал совпадать с форматом, который эластик использует по умолчанию.
Какой формат используется можно увидеть в mapping интересующего вас индекса:
GET /index-name/_mapping
Следующая засада, вы не можете на лету поменять тип поля в индексе. Только путем пересоздания индекса с нуля.
И самое противное. Если вы используете группу индексов в IndexPattern, сбойный индекс вылетит из поиска по проблемному полю.
Вобщем проблем с такими «прыгающими» типами полей будет чертовски много. Поэтому, рекомендую «гвоздями» прибивать тип поля в индексе.
Например, в индексе есть поле, содержащее дату. В Elastic такие поля могут попасть под шаблон (mapping) по умолчанию для даты и в индексе появится поле типа date. Потом программеры поменяют формат даты и поле перестает подходить под шаблон. Эластик будет считать что это поле типа text и тупо перестает добавлять информацию в индекс.
Если вы не планируете в дальнейшем использовать поле для поиска, самое простое решение привести его к типу text. В дальнейшем, смена формата даты никоим образом не повлияет на работу индекса.
Создание шаблона для индекса или группы индексов.
Посмотреть все шаблоны можно так:
GET _template
Посмотреть конкретный шаблон:
GET _template/template_name
Создать шаблон:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
PUT _template/template_name { "order" : 0, "index_patterns" : [ "index-name-*" ], "settings" : { "index" : { "number_of_shards" : "1" } }, "mappings" : { "properties": { "time": { "type" : "text", "fields" : { "keyword" : { "ignore_above" : 256, "type" : "keyword" } } } } }, "aliases" : { } } |
Параметр index-patterns определяет шаблон имён индексов к которым будет применяться данный template. Т.е. если будет создан индекс с , например, именем index-name-2020.04.01, то шаблон будет к нему применен. И в дальнейшем в списке mappings вы увидите, что поле time будет иметь тип text.
Так же в этом шаблоне ограничивается количество шардов единицей. По умолчанию у вновь создаваемого шаблона значение этого параметра равно 3. Такое ограничение имеет смысл для небольших индексов. Максимальное количество шардов на сервер ограничено и при большом количестве индексов имеет смысл на один индекс давать один шард.