Мы рады объявить о выпуске Manticore Search 3.0.0, нашего долгожданного первого крупного релиза. Это первая версия Manticore, которая нарушает совместимость индексов со старыми версиями.
Скачивание доступно здесь и на странице Manticore Github . Образ Docker доступен на Docker Hub .
Ключевые изменения
Одной из больших проблем Manticore Search 2 было ограничение в 4 ГБ строковых/JSON атрибутов на индекс. Чтобы преодолеть это ограничение, данные приходилось разбивать на несколько индексов. Версия 3 перерабатывает хранение индексов, что снимает это ограничение и позволяет уменьшить количество шардов (или просто использовать один индекс), а также полностью оптимизировать индекс RealTime до одного чанка в случаях, затронутых ограничением.
Совместимость индексов нарушена, так как новое хранение индексов имеет другую структуру. Существующие индексы, созданные с Manticore 2, не могут быть загружены Manticore 3, но их можно легко обновить с помощью инструмента конвертации .
Также нет ограничений на динамическое обновление атрибутов (с использованием UPDATE ). Ранее строковые атрибуты можно было обновлять только с помощью команды REPLACE, а для JSON атрибутов можно было обновлять только скалярные ключевые значения.
Списки исключений для простых индексов теперь применяются при загрузке/ротации индекса, а не по запросу. Индекс, содержащий списки исключений, должен определить список индексов , к которым будут применяться списки исключений при загрузке/ротации. Это устраняет необходимость в определении конкретного порядка для поиска в индексах, как это было раньше. Если вы вращаете несколько индексов одновременно, Manticore Search выполнит умную ротацию для вас - сначала будут вращаться индексы, не предназначенные для списков исключений, а затем индексы, помеченные как цели списков исключений.
Идентификаторы документов теперь являются положительными знаковыми 64-битными целыми числами, ранее они были беззнаковыми 64-битными целыми числами.
Другие улучшения
Добавлена функция CONCAT() - позволяет объединять две или более строки. Если вы хотите объединить нестроковые аргументы, вы можете дополнительно использовать TO_STRING().
Репликация получила несколько улучшений:
Директива node_address - позволяет указать сетевой адрес узла
JOIN CLUSTER позволяет использовать более простой синтаксис, предоставляя только адрес и порт одного из узлов кластера с использованием условия 'AT'
ALTER CLUSTER обновление узлов кластера - для обновления списка узлов в кластере
список узлов выводится в SHOW STATUS
Замечания по производительности
AND-запросы в целом быстрее в версии 3. Ускорение зависит от частоты ключевых слов. Тесты, включая топ-1000 из коллекции, показали небольшие приросты в случае нескольких общих ключевых слов (~10%) до более 60%, когда некоторые из ключевых слов находились в конце топ-1000. Редкие ключевые слова должны обеспечить еще большие приросты.
Поисковые запросы с подстановочными знаками теперь на несколько процентов быстрее в версии 3. OR-запросы в некоторых случаях могут быть на несколько процентов медленнее (максимум 9% в проведенных тестах), эта проблема будет решена в будущих релизах. Индексы RT с большим количеством дисковых чанков теперь значительно быстрее.
Благодаря ранним тестировщикам версия 3 уже работает тысячи часов в производстве. Ниже приведены несколько наблюдаемых улучшений:
Версия 3 лучше в плане фрагментации ОЗУ:

Некоторые пользователи, которые уже тестируют версию 3 в производстве, сообщают о лучшей средней производительности по сравнению с 2.8:

Что нужно знать перед обновлением?
Вам нужно будет переиндексировать все индексы или использовать инструмент конвертации .
Если вы используете списки исключений, в объявлениях индексов требуются изменения . Индексы RT не должны содержать данных в чанке ОЗУ (выполните FLUSH RAMCHUNK) во время конвертации.
Для распределенных настроек миграция может начаться с узлов данных (агентов) к узлам мастер, так как узел мастер, работающий на версии 2, может общаться с агентами, работающими на версии 3.
Ничего не изменилось в терминах синтаксиса поисковых запросов! Все протоколы подключения не требуют обновлений или изменений для работы с Manticore 3. Как только индексы загружены, существующие клиенты могут просто подключиться к новой версии.
Полная справка об изменениях и шагах для миграции доступна в руководстве по миграции .
Хотя Manticore 3 была широко протестирована в производстве несколькими ранними пользователями, могут все еще возникать некоторые проблемы. Мы будем признательны, если вы сообщите о любых проблемах на github tracker .
Полный список изменений версии 3.0.0 можно найти в примечании к выпуску .
Будущие заметки
Concerning HTTP protocol, expect the following changes in next releases: /search endpoint will be deprecated and /sql response format will be the same as /json endpoint.