| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия |
| system:elasticsearch:mapping [2018/01/29 10:23] – [Конфигурация / Config] mirocow | system:elasticsearch:mapping [2018/01/29 10:47] (текущий) – [Nested(вложенный) type] mirocow |
|---|
| ===== Конфигурация / Config ===== | ===== Конфигурация / Config ===== |
| |
| <note tip>Примечание: По умолчанию _source = true и весь документ хранится в индексе в исходном состояние и возвращается по запросу. И это работает быстрее, чем хранить в индексе отдельные поля, при условии, что ваш документ не огромен. Тогда хранение только необходимых полей может дать профит. Поэтому я не рекомендую трогать это поле без веской на то причины.</note> | ==== Базовые типы данных ==== |
| | |
| | <note tip>Примечание: По умолчанию **"_source" : {"enabled" : true}** и весь документ хранится в индексе в исходном состояние и возвращается по запросу. И это работает быстрее, чем хранить в индексе отдельные поля, при условии, что ваш документ не огромен. Тогда хранение только необходимых полей может дать профит. Поэтому я не рекомендую трогать это поле без веской на то причины.</note> |
| |
| * **"_source" : {"enabled" : false}** — Тем самым мы указали, что хранить исходные данные для этого типа не нужно. Когда это может понадобится? Например у вас есть очень тяжелый документ с кучей информации, которую нужно только индексировать, но не нужно выводить в ответе | * **"_source" : {"enabled" : false}** — Тем самым мы указали, что хранить исходные данные для этого типа не нужно. Когда это может понадобится? Например у вас есть очень тяжелый документ с кучей информации, которую нужно только индексировать, но не нужно выводить в ответе |
| * **"null_value" : "na"** — дефолтное значение для поля | * **"null_value" : "na"** — дефолтное значение для поля |
| * **"index_name" : "rating"** — тут мы указали алиас для поля. Теперь мы можем обращаться к нему как к «rank» так и к «rating» | * **"index_name" : "rating"** — тут мы указали алиас для поля. Теперь мы можем обращаться к нему как к «rank» так и к «rating» |
| | |
| | ==== Типы array/object/nested ==== |
| | |
| | === Nested(вложенный) type === |
| | |
| | Подробнее о типе можно узнать из документации [[https://www.elastic.co/guide/en/elasticsearch/reference/5.6/nested.html|Nested datatype]] |
| | |
| | Document \\ |
| | <code json> |
| | { |
| | "obj1" : [ |
| | { |
| | "name" : "blue", |
| | "count" : 4 |
| | }, |
| | { |
| | "name" : "green", |
| | "count" : 6 |
| | } |
| | ] |
| | } |
| | </code> |
| | |
| | Если мы будем искать **name = blue && count>5** то этот документ будет найден, что бы избежать такого сценария, стоит использовать nested тип. |
| | |
| | mappig \\ |
| | <code json> |
| | { |
| | "type1" : { |
| | "properties" : { |
| | "obj1" : { |
| | "type" : "nested", |
| | "properties": { |
| | "name" : {"type": "string", "index": "not_analyzed"}, |
| | "count" : {"type": "integer"} |
| | } |
| | } |
| | } |
| | } |
| | } |
| | </code> |
| | |
| | Для поиска по nested типу следует использовать [[http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html|nested query]] или [[http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-nested-filter.html|nested filter]]. |
| | |
| | === Multi-fields === |
| | |
| | Этот параметр позволяет указать разные настройки маппинга для одного поля. Добавлен ко все базовым типам (кроме nested и object). |
| | |
| | <code json> |
| | "title": { |
| | "type": "string", |
| | "fields": { |
| | "raw": { "type": "string", "index": "not_analyzed" } |
| | } |
| | } |
| | </code> |
| | |
| | Если отключить анализатор, поиск будет работать не на полную катушку, а если включить, то группировать мы будем не по сырым данным, а по обработанным. Например, Санкт-Петербург после анализатора будет «Санкт» и «Петербург». |
| | Теперь мы можем обращаться к «title» за поиском и к «raw» за группировкой и любыми другими видами сортировки. |
| | |
| | === Остальные типы === |
| | |
| | * [[http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-ip-type.html|ip type]] — хранение ip в виде цифр |
| | * [[http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-geo-point-type.html|geo point type]] — хранение координат (удобно при поиске ближайших объектов к определённой координате) |
| | * [[http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-geo-shape-type.html|geo point type]] — довольно специфичный тип для хранение определённых полигонов |
| | * [[http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-attachment-type.html|attachment type]] — Хранение файлов в базе закодированных в base64. Обычно используется с связке с собственным анализатором. (Хотя как по мне, удовольствие сомнительное) |
| | |
| | |