# Migrating indexes to version 3

Manticore Search 3 впервые нарушает совместимость индексов, и он не может загрузить существующие индексы, созданные в версии 2.x. Это означает, что индексы должны быть подготовлены до обновления searchd до версии 3.x.

Чтобы получить индексы в новом формате, есть два варианта:
1. Полностью перестроить индексы. Если ваши индексы не очень большие и не являются RealTime, это простой путь.
2. Использовать инструмент конвертера, который может автоматически преобразовать любой индекс любого типа (plain, percolate, RealTime) из формата Manticore 2 / Sphinx 2 в новый формат

Есть несколько моментов, о которых следует помнить перед началом миграции:
- идентификаторы документов теперь являются положительными знаковыми большими целыми числами, ранее они были беззнаковыми большими целыми числами
- механизм использования kill‑list в индексах значительно изменился
- перед началом конвертации RealTime‑индекса, RAM‑чанк должен быть пустым. Если в нём есть данные, их следует записать на диск с помощью FLUSH RAMCHUNK. **Эта операция должна быть выполнена на существующей версии 2.x,** перед выполнением обновления.
- v3 не ограничивает строковые / json‑атрибуты 4 ГБ на индекс. В прошлом иногда индексы приходилось разбивать на множество чанков, лишь бы вместить данные. В v3 такой индекс можно сократить до одного чанка или до более ограниченного количества чанков (если требуется сохранить многопоточный поиск). Ограничение в 4 ГБ также применялось к RT‑индексам. Это означало, что OPTIMIZE не мог сократить RT‑чанки до одного, если порог в 4 ГБ был достигнут. После конвертации затронутого этим RT, для нового индекса можно применить OPTIMIZE, чтобы получить RT‑индекс из одного чанка.

Manticore Search 3 поставляется с сопутствующим инструментом, который может конвертировать индексы из формата 2.x в формат 3.x. Инструмент предоставляется в отдельном пакете под названием `manticore-converter`. Этот пакет никоим образом не вмешивается и не влияет на существующую установку Manticore, поэтому его можно установить рядом.

С помощью инструмента `index_converter` вы можете создать версии индексов 3.x, и когда всё будет готово, вы начинаете обновлять пакет Manticore.

Если у вас один сервер:
- установить пакет `manticore-converter`
- использовать `index_converter` для создания новых версий индексов в другой папке, отличной от существующей папки данных (используя параметр --output-dir)
- остановить существующий Manticore, обновить до 3.0, переместить новые индексы в папку данных, запустить Manticore

Чтобы обеспечить минимальное время простоя, вы можете скопировать индексы 2.x, конфигурацию (вам понадобится отредактировать пути к индексам, журналам и различным портам) и бинарные файлы в отдельное место и запустить их на отдельном порту, перенаправив приложение на него.
После обновления до 3.0 и запуска нового демона вы можете вернуть приложение к обычным портам. Если всё в порядке, остановите копию 2.x и удалите файлы, чтобы освободить место.

Если у вас есть запасной сервер (например, тестовый или промежуточный), вы можете сначала выполнить обновление индекса и даже установить Manticore 3 для проведения нескольких тестов, а если всё в порядке — скопировать новые файлы индекса на боевой сервер.

Если у вас несколько серверов, которые можно вывести из продакшна, делайте это поочерёдно, обновляя каждый из них. Для распределённых конфигураций searchd версии 2.x может работать как мастер с узлами версии 3.x, поэтому вы можете сначала обновлять узлы данных, а в конце — мастер‑узел.

Инструмент конвертера может мигрировать один индекс за раз (используя `--index`), все индексы из указанного конфигурационного файла (используя `--all`) или все индексы из папки (определённой параметром `--path`). Поскольку конвертер создаст новую версию существующего индекса, необходимо учитывать требуемое дополнительное пространство. Если место ограничено, индексы следует конвертировать по одному.

Самый простой способ использования конвертера (если вы не используете kill‑list) — просто конвертировать всё:

```bash
$ index_converter --config /home/myuser/sphinx.conf --all
```

По умолчанию индексы v3 записываются в ту же папку, а старые индексы копируются с суффиксом '.old' в их именах файлов. Новые индексы также могут быть сохранены в другую папку с помощью параметра --output-dir.

```bash
$ index_converter --config /home/myuser/sphinx.conf --index myrtindex --output-dir /new/location
```

Обратите внимание, что файл hitlists (.spp) просто перемещается в новую версию (поскольку он не претерпел изменений) и не включается в резервную копию старой версии. После завершения тестирования версии 3 без проблем резервную копию старых версий индексов можно удалить.

В случае дельта‑индексов новый параметр killlist_target должен быть установлен в конфигурации перед началом конвертации. Конвертер также может задать цели с помощью --killlist-target:

```bash
$ index_converter --config /home/myuser/sphinx.conf --index deltaindex --killlist-target mainindex:kl
```

Третий вариант — конвертировать дельта‑индекс, загрузить его, использовать ALTER KILLLIST_TARGET для установки целей и (пере)загрузить цели, чтобы применить kill‑list.

Если у вас возникнут какие‑либо проблемы, вопросы или комментарии, не стесняйтесь связаться с нами:
- в [twitter](https://twitter.com/manticoresearch)
- отправив письмо на <contact@manticoresearch.com>
- разместив сообщение на нашем [Форуме](https://forum.manticoresearch.com)
- общаясь с нами в нашем [сообществе Slack](http://slack.manticoresearch.com)
- через наш [трекер ошибок на GitHub](https://github.com/manticoresoftware/manticore)
