Mapping
$ curl -XPUT 'http://localhost:9200/twitter/tweet/_mapping' -d '{ "tweet" : { "_source" : {"enabled" : false}, "properties" : { "user" : {"type" : "string", "index" : "not_analyzed"}, "message" : {"type" : "string", "null_value" : "na", "store": true}, "postDate" : {"type" : "date"}, "priority" : {"type" : "integer"}, "rank" : {"type" : "float", "index_name" : "rating"} } } }'
Конфигурация / Config
Базовые типы данных
- "_source" : {"enabled" : false} — Тем самым мы указали, что хранить исходные данные для этого типа не нужно. Когда это может понадобится? Например у вас есть очень тяжелый документ с кучей информации, которую нужно только индексировать, но не нужно выводить в ответе
- "store": true для поля message говорит о том, что это исходник поля необходимо сохранять в индексе
- "index" : "not_analyzed" — тут мы указали, что это поле не должно анализироваться, т.е. должно хранится как есть. Какие бывают анализаторы
- "null_value" : "na" — дефолтное значение для поля
- "index_name" : "rating" — тут мы указали алиас для поля. Теперь мы можем обращаться к нему как к «rank» так и к «rating»
Типы array/object/nested
Nested(вложенный) type
Подробнее о типе можно узнать из документации Nested datatype
Document
{
"obj1" : [
{
"name" : "blue",
"count" : 4
},
{
"name" : "green",
"count" : 6
}
]
}
Если мы будем искать name = blue && count>5 то этот документ будет найден, что бы избежать такого сценария, стоит использовать nested тип.
mappig
{
"type1" : {
"properties" : {
"obj1" : {
"type" : "nested",
"properties": {
"name" : {"type": "string", "index": "not_analyzed"},
"count" : {"type": "integer"}
}
}
}
}
}
Для поиска по nested типу следует использовать nested query или nested filter.
Multi-fields
Этот параметр позволяет указать разные настройки маппинга для одного поля. Добавлен ко все базовым типам (кроме nested и object).
"title": {
"type": "string",
"fields": {
"raw": { "type": "string", "index": "not_analyzed" }
}
}
Если отключить анализатор, поиск будет работать не на полную катушку, а если включить, то группировать мы будем не по сырым данным, а по обработанным. Например, Санкт-Петербург после анализатора будет «Санкт» и «Петербург». Теперь мы можем обращаться к «title» за поиском и к «raw» за группировкой и любыми другими видами сортировки.
Остальные типы
- ip type — хранение ip в виде цифр
- geo point type — хранение координат (удобно при поиске ближайших объектов к определённой координате)
- geo point type — довольно специфичный тип для хранение определённых полигонов
- attachment type — Хранение файлов в базе закодированных в base64. Обычно используется с связке с собственным анализатором. (Хотя как по мне, удовольствие сомнительное)