Manticore Search 28.4.4 уже выпущен. В этом релизе повторная оценка KNN стала быстрее, диалоговый поиск — гибче, установка и обновление — проще, фасеты получили дополнительные параметры, появились настройки релевантности по умолчанию на уровне таблицы, а также исправления в аутентификации, репликации, совместимости SQL, распределённых запросах и внутренних механизмах columnar/KNN.
В этом посте собраны изменения, вышедшие с 27.2.0 по 28.4.4.
Примечания к обновлению
Перед обновлением обратите внимание на следующее:
- В 28.0.0 версия ABI плагинов
SPH_UDF_VERSIONповышена до 12. Внешние бинарные файлы плагинов UDF, ranker и token-filter нужно пересобрать перед загрузкой в эту версию. Благодаря изменению плагины token-filter получают длинные токеныdict=keywords_32kвместо того чтобы молча пропускать значения выше прежнего лимита плагина в 126 байт. Данные и текущая конфигурация таблиц сохраняют совместимость, миграция индекса не требуется. Для возврата к предыдущей версии также нужны бинарные файлы плагинов, собранные под старый ABI; кроме того, нельзя полагаться на новую возможность плагинов — работу с длинными токенами. (Issue #4667 , PR #4668 ) - Если аутентификация включена, сначала обновитесь до 28.4.x. В 28.4.2 исправлен обход проверки прав в MySQL-запросах с несколькими SQL-операторами при включённой аутентификации и авторизации. В 28.3.4 улучшена совместимость Connector/J и PyMySQL с аутентифицированными MySQL-сессиями, а в 28.4.1 исправлено восстановление кластера репликации с аутентификацией после перезапуска: учётная запись пользователя репликации теперь хранится в метаданных кластера. (PR #4713 , Issue #4691 , Issue #4705 )
- Если вы управляете MCL отдельно от демона, обновляйте MCL вместе с Manticore. Эта ветка релизов включает MCL
13.7.0, новую настройку
embeddings_threadsи несколько исправлений сборки, упаковки и очистки в columnar/KNN. Не рекомендуется использовать старую библиотеку вместе с новой версией демона. (PR #169 , PR #186 , PR #4676 )
Главное
Повторная оценка KNN стала быстрее
Поиск KNN
теперь вычисляет расстояния пакетно (группой) на этапе повторной оценки (rescore). После того как HNSW возвращает набор кандидатов, Manticore пересчитывает итоговые расстояния с полной точностью и заново сортирует результаты. Пакетная обработка снижает накладные расходы на каждого кандидата на финальном этапе векторного поиска.
Для нагрузок с большим числом векторов это сокращает часть вычислений, которые выполняются после отбора кандидатов. Результаты не меняются; на финальном этапе ранжирования просто меньше накладных расходов, когда нужно повторно оценить много кандидатов.
Диалоговый поиск через SQL и HTTP
Диалоговый поиск
теперь доступен через JSON API /search наряду с SQL CALL CHAT. Это упрощает работу с чат-потоком Manticore в приложениях, которые уже работают с HTTP API и не хотят добавлять отдельный SQL-путь только для chat-запросов.
CREATE CHAT MODEL теперь поддерживает custom_prompt: ответы можно адаптировать под требования приложения — правила цитирования, тон, длину ответа или форматирование. Механизм по-прежнему использует тот же поток Manticore Search: извлекает релевантные документы из уже векторизованной таблицы, собирает контекст, сохраняет историю диалога и возвращает ответ с использованными источниками.
Установка и выбор версии в одну команду
Быстрая установка стала проще:
curl https://manticoresearch.com | sh
Тот же установщик может обновить существующую установку, показать доступные версии, переключаться между stable- и development-репозиториями и установить выбранную версию. Пакетные менеджеры по-прежнему остаются основным источником сведений об установленных файлах, репозиториях, службах и зависимостях; новый bootstrap-сценарий убирает ручные действия при первоначальной настройке.
Все варианты доступны через:
curl https://manticoresearch.com | sh -s help
Фасеты теперь могут показывать группы с нулевыми значениями
Фасетный поиск
теперь поддерживает фасетные группы с нулевыми значениями через SQL ZEROES и JSON "zeroes": true.
Это небольшая, но важная UI-возможность. В e-commerce-фильтрации часто нужно оставлять вариант видимым, даже если текущая комбинация фильтров даёт для него значение 0. Вместе с поведением фасетов в режиме max группы с нулевыми значениями помогают отображать выбранные, доступные и временно недоступные варианты, сохраняя для пользователя полный список значений фильтра.
Настройки релевантности по умолчанию на уровне таблицы
Теперь в Manticore можно задать профиль релевантности при создании таблицы: CREATE TABLE ... profile='relevance'
, а также сохранять на уровне таблицы значения по умолчанию для ranker
и boolean_mode
.
По результатам наших тестов релевантности profile='relevance' включает лучше подобранные настройки полнотекстового поиска для типичных нагрузок, поэтому новые таблицы сразу получают более качественное ранжирование, а приложениям не нужно повторять одни и те же параметры в каждом запросе.
Настройки релевантности теперь задаются непосредственно в определении таблицы. Если таблица предназначена для полнотекстового поиска с упором на релевантность, этот выбор хранится в схеме без необходимости прописывать его в коде приложения.
Контроль использования CPU для эмбеддингов
embeddings_threads
позволяет ограничить количество потоков CPU, используемых для автоматической генерации эмбеддингов при INSERT, ALTER TABLE ... REBUILD KNN и KNN-запросов от текста к вектору.
Это важно на общих хостах и при смешанных нагрузках. Генерация эмбеддингов и перестройка KNN могут сильно нагружать CPU; настройка лимита помогает планировать нагрузку на сервер и не даёт этим задачам занять все CPU-ресурсы.
Исправления ошибок
В этой ветке релизов есть 17 исправлений, перечисленных в changelog. Самые важные из них:
- В 28.4.3 исправлена некорректная обработка запросов с несколькими SQL-операторами при использовании
COUNT(DISTINCT ...), что исключает некорректную передачу состояния и повреждение набора строк при обработке результатов нескольких запросов. - В 28.4.2 исправлен обход проверки прав при аутентификации и авторизации при выполнении нескольких SQL-операторов через MySQL, поэтому каждый оператор в таком запросе корректно проверяется при включённой аутентификации.
- В 28.4.1 и 28.3.1 исправлены крайние случаи восстановления кластера репликации: возобновление работы кластера с аутентификацией после перезапуска и запуск, когда в кластере оставалась только одна нода.
- Распределённые запросы с удалёнными stored fields теперь завершаются ошибкой при ошибках удалённого чтения
GETFIELDили при некорректных ответах, а не возвращают строки, которые выглядят как успешные, но содержат пустые или недостоверные значения stored fields. - Очистка после прерванного слияния columnar/KNN теперь удаляет временные файлы компонентов под отслеживаемым временным префиксом, поэтому файлы
.tmp.spc.*больше не остаются после прерывания и не мешают операциямrename,attachиdropдля таблиц. - Совместимость с DBeaver улучшена благодаря поддержке простых алиасов для одной таблицы в запросах
SELECT. - Клиенты Connector/J и PyMySQL теперь могут завершать native-password-аутентификацию до конца, а безвредные сессионные
SET-команды больше не завершаются ошибкой при включённой аутентификации. - Встроенный украинский лемматизатор теперь правильно обрабатывает слова с апострофом, так что формы вроде
здоров'яммогут совпадать сздоров'яприlemmatize_uk_all. - Обработка blended keywords в AOT теперь учитывает настроенный
blend_modeи корректно восстанавливает варианты слов без разделителей для индексации и извлечения ключевых слов. - Автооптимизация RT-таблиц больше не сжимает таблицу ниже двух дисковых чанков, если такой более низкий порог явно не запрошен.
- Исправлен сбой при одновременном использовании агрегаций
percentilesи terms-агрегаций в одном запросе/searchна RT-таблицах с несколькими фрагментами. - При длинных ошибках парсинга SQL теперь сохраняются границы UTF-8-символов, поэтому некорректные запросы с кириллицей и другими многобайтовыми символами больше не дают обрезанных или повреждённых сообщений об ошибке.
Полный список — в changelog .
Нужна помощь или хотите связаться с нами?
- Присоединяйтесь к нашему Slack
- Загляните на форум
- Сообщайте о проблемах или предлагайте идеи на GitHub
- Пишите нам:
[email protected]

