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

Manticore Search 28.4.4: ускоренная повторная оценка KNN, более гибкий диалоговый поиск, упрощённая установка и больше возможностей для управления фасетами

author image

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]

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

Установите Manticore Search одной командой в Linux или macOS:

curl https://manticoresearch.com | sh

Для расширенных вариантов установки см. полное руководство по установке и документацию .

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