# ElasticSearch 2.0 и 2 вопроса Игорю. :)

**URL:** <https://discuss.elastic.co/t/elasticsearch-2-0-2/33568>\
**Category:** Вопросы на русском языке\
**Created:** [November 2, 2015, 9:05pm UTC](https://discuss.elastic.co/t/elasticsearch-2-0-2/33568 "2015-11-02T21:05:52Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Stan](https://avatars.discourse-cdn.com/v4/letter/s/51bf81/32.png) [@Stan](https://discuss.elastic.co/u/Stan)\
**Post date:** [November 2, 2015, 9:05pm UTC](https://discuss.elastic.co/t/elasticsearch-2-0-2/33568/1 "2015-11-02T21:05:52Z")

</div>

Игорь, добрый вечер!

Сейчас вышел Elasticsearch 2.0, и я начинаю думать над вопросами миграции. Натолкнулся на два концептуальных вопроса, которые хотелось бы понять. мне кажется, в рускоязычном сообществе Вы единственный можете объяснить логику создателей. 🙂

1. Утилита проверки готовности миграции говорит, что теерь тип boolean надо интерпретировать как 0 и 1 вместо false и true. В документации тип boolean остался, по прежнему в него можно записывать true и false, но при выборках нужно использовать 0 и 1. С чем это связано? Какие задачи быи решены таким решением?
2. Утилита миграции говорит, что недопустимо в одном индексе иметь два типа с двумя полями с разным меппингом. То есть если у меня есть поле в типе users name, и поле name в типе streets, и они имеют разный mapping, то это фатальная ошибка. Я полагал, что index - это аналог database, а type - аналог таблицы, но видимо ошибался. Какой смысл имеет понятие index и type в Elastic 2.0?

Заранее спасибо!

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [November 3, 2015, 12:02am UTC](https://discuss.elastic.co/t/elasticsearch-2-0-2/33568/2 "2015-11-03T00:02:49Z")

</div>

1. Это вызвано тем, что [изменился формат хранения этих данных](https://www.elastic.co/guide/en/elasticsearch/reference/current/_mapping_changes.html#migration-bool-fields). На сколько я помню, это изменение было произведено для улучшения производительности полей с данным типом.

2. Type - это не совсем аналог таблицы. Это скорее подмножество полей из множества всех полей в индексе. То есть, в вашем примере поле name от всех типов индексируется как одно и тоже поле name на уровне lucene. В 1.x, это не было очевидно и вызывало "странные" проблемы для пользователей, пытавшихся использовать тип как таблицу. В 2.0 мы сделали так, что задать поля с одним именем но разными опциями больше в разных типах просто не возможно.

---

<div class="post-metadata">

**Author:** ![Stan](https://avatars.discourse-cdn.com/v4/letter/s/51bf81/32.png) [@Stan](https://discuss.elastic.co/u/Stan)\
**Post date:** [November 3, 2015, 4:42am UTC](https://discuss.elastic.co/t/elasticsearch-2-0-2/33568/3 "2015-11-03T04:42:58Z")

</div>

Спасибо!

А разница в производительности действительно настолько заметна? И почему бы не пойти по пути, что внутренее представление, скажем, числом, а на уровне запроса происходит просто "прозрачная" конвертация?

По второму вопросу немного странно. Получается, что в ES 2.0 фактически, надо кждую "таблицу" создавать "индексом". А какие тогда есть механизмы обособления "таблиц" в рамках одного проекта? У меня на сервере сейчас крутится около 5 проектов, и для каждого из них сделан отдельный индекс. При переходе к новой версии, мне нужен иной механизм разделения данных. Как правильно? На уровне префиксов индексов? Или ставить разные инстансы ES на каждый проект? Но IMHO, это не совсем оправдано по ресурсам.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [November 3, 2015, 2:16pm UTC](https://discuss.elastic.co/t/elasticsearch-2-0-2/33568/4 "2015-11-03T14:16:39Z")

</div>

1. В большинстве случаев прозрачная конвертация и происходит. Просто есть пара случаев, где это не было практично. См ссылку в моем предыдущем ответе с примерами таких случаев.

2. Эта проблема с возможными решениями очень хорошо описана в статье [Great Mapping Refactoring](https://www.elastic.co/blog/great-mapping-refactoring#conflicting-mappings). Если будет что не понятно - спрашивайте тут.

---

<div class="post-metadata">

**Author:** ![Stan](https://avatars.discourse-cdn.com/v4/letter/s/51bf81/32.png) [@Stan](https://discuss.elastic.co/u/Stan)\
**Post date:** [November 3, 2015, 2:43pm UTC](https://discuss.elastic.co/t/elasticsearch-2-0-2/33568/5 "2015-11-03T14:43:50Z")

</div>

Да, теперь внимательне прочел - стало понятней. Но детали остались.

Правильно ли я понимаю, что когда я создам в mapping тип boolean, то он создастся как "целое". И если я при записи буду указывать 0/1 - то оно и будет как целое хранится. Но если я сделаю присвоение этому типу true - то сохранится строковое выражение "Т", или же ES 2.0 сам конвертирует это значение в 1 "целое"?

По второму вопросу проблематика понятна. Видимо - самый оптимальный вариант - рассматривать индексы как отдельные таблицы. Вариант с разным названием однотипных полей мне представляется эстетически нежелательным. 🙂

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [November 3, 2015, 4:47pm UTC](https://discuss.elastic.co/t/elasticsearch-2-0-2/33568/6 "2015-11-03T16:47:28Z")

</div>

Можно [что угодно](https://www.elastic.co/guide/en/elasticsearch/reference/current/boolean.html) в это поле записывать. При этом `false`, `"false"`, `"off"`, `"no"`, `"0"`, `""`, `0`, `0.0` будет интерпретироваться как `false` и храниться как `0`, а все остальное будет интерпретироваться как `true` и храниться как `1`.

---

<div class="post-metadata">

**Author:** ![Stan](https://avatars.discourse-cdn.com/v4/letter/s/51bf81/32.png) [@Stan](https://discuss.elastic.co/u/Stan)\
**Post date:** [November 3, 2015, 6:15pm UTC](https://discuss.elastic.co/t/elasticsearch-2-0-2/33568/7 "2015-11-03T18:15:23Z")

</div>

Все, понял. Спасибо большое!

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 6, 2017, 1:50pm UTC](https://discuss.elastic.co/t/elasticsearch-2-0-2/33568/8 "2017-07-06T13:50:45Z")

</div>


