⚠️ Эта страница автоматически переведена, и перевод может быть несовершенным.

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) — просто конвертировать всё:

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

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

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

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

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

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

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

Если у вас возникнут какие‑либо проблемы, вопросы или комментарии, не стесняйтесь связаться с нами:

Установить Manticore Search

Установить Manticore Search