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

Manticore Search 28.4.4 сокращает время повторной оценки KNN, добавляет HTTP API и custom_prompt для диалогового поиска, упрощает установку, улучшает фасеты и настройки релевантности по умолчанию, а также исправляет проблемы с аутентификацией, репликацией, SQL и внутренними механизмами columnar/KNN.

[Manticore Search 28.4.4](/install/) уже выпущен. В этом релизе повторная оценка 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`](https://manual.manticoresearch.com/Creating_a_table/NLP_and_tokenization/Low-level_tokenization#dict) вместо того чтобы молча пропускать значения выше прежнего лимита плагина в 126 байт. Данные и текущая конфигурация таблиц сохраняют совместимость, миграция индекса не требуется. Для возврата к предыдущей версии также нужны бинарные файлы плагинов, собранные под старый ABI; кроме того, нельзя полагаться на новую возможность плагинов — работу с длинными токенами. ([Issue #4667](https://github.com/manticoresoftware/manticoresearch/issues/4667), [PR #4668](https://github.com/manticoresoftware/manticoresearch/pull/4668))
- **Если аутентификация включена, сначала обновитесь до 28.4.x.** В 28.4.2 исправлен обход проверки прав в MySQL-запросах с несколькими SQL-операторами при включённой аутентификации и авторизации. В 28.3.4 улучшена совместимость Connector/J и PyMySQL с аутентифицированными MySQL-сессиями, а в 28.4.1 исправлено восстановление кластера репликации с аутентификацией после перезапуска: учётная запись пользователя репликации теперь хранится в метаданных кластера. ([PR #4713](https://github.com/manticoresoftware/manticoresearch/pull/4713), [Issue #4691](https://github.com/manticoresoftware/manticoresearch/issues/4691), [Issue #4705](https://github.com/manticoresoftware/manticoresearch/issues/4705))
- **Если вы управляете MCL отдельно от демона, обновляйте MCL вместе с Manticore.** Эта ветка релизов включает [MCL](https://github.com/manticoresoftware/columnar) 13.7.0, новую настройку [`embeddings_threads`](https://manual.manticoresearch.com/Server_settings/Searchd#embeddings_threads) и несколько исправлений сборки, упаковки и очистки в columnar/KNN. Не рекомендуется использовать старую библиотеку вместе с новой версией демона. ([PR #169](https://github.com/manticoresoftware/columnar/pull/169), [PR #186](https://github.com/manticoresoftware/columnar/pull/186), [PR #4676](https://github.com/manticoresoftware/manticoresearch/pull/4676))

---

## Главное

### Повторная оценка KNN стала быстрее

[Поиск KNN](https://manual.manticoresearch.com/Searching/KNN#KNN-vector-search) теперь вычисляет расстояния пакетно (группой) на этапе повторной оценки (`rescore`). После того как HNSW возвращает набор кандидатов, Manticore пересчитывает итоговые расстояния с полной точностью и заново сортирует результаты. Пакетная обработка снижает накладные расходы на каждого кандидата на финальном этапе векторного поиска.

Для нагрузок с большим числом векторов это сокращает часть вычислений, которые выполняются после отбора кандидатов. Результаты не меняются; на финальном этапе ранжирования просто меньше накладных расходов, когда нужно повторно оценить много кандидатов.

### Диалоговый поиск через SQL и HTTP

[Диалоговый поиск](https://manual.manticoresearch.com/Searching/Conversational_search) теперь доступен через JSON API `/search` наряду с SQL `CALL CHAT`. Это упрощает работу с чат-потоком Manticore в приложениях, которые уже работают с HTTP API и не хотят добавлять отдельный SQL-путь только для chat-запросов.

`CREATE CHAT MODEL` теперь поддерживает `custom_prompt`: ответы можно адаптировать под требования приложения — правила цитирования, тон, длину ответа или форматирование. Механизм по-прежнему использует тот же поток Manticore Search: извлекает релевантные документы из уже векторизованной таблицы, собирает контекст, сохраняет историю диалога и возвращает ответ с использованными источниками.

### Установка и выбор версии в одну команду

Быстрая установка стала проще:

```sh
curl https://manticoresearch.com | sh
```

Тот же установщик может обновить существующую установку, показать доступные версии, переключаться между stable- и development-репозиториями и установить выбранную версию. Пакетные менеджеры по-прежнему остаются основным источником сведений об установленных файлах, репозиториях, службах и зависимостях; новый bootstrap-сценарий убирает ручные действия при первоначальной настройке.

Все варианты доступны через:

```sh
curl https://manticoresearch.com | sh -s help
```

### Фасеты теперь могут показывать группы с нулевыми значениями

[Фасетный поиск](https://manual.manticoresearch.com/Searching/Faceted_search) теперь поддерживает фасетные группы с нулевыми значениями через SQL `ZEROES` и JSON `"zeroes": true`.

Это небольшая, но важная UI-возможность. В e-commerce-фильтрации часто нужно оставлять вариант видимым, даже если текущая комбинация фильтров даёт для него значение `0`. Вместе с поведением фасетов в режиме `max` группы с нулевыми значениями помогают отображать выбранные, доступные и временно недоступные варианты, сохраняя для пользователя полный список значений фильтра.

### Настройки релевантности по умолчанию на уровне таблицы

Теперь в Manticore можно задать профиль релевантности при создании таблицы: [`CREATE TABLE ... profile='relevance'`](https://manual.manticoresearch.com/Creating_a_table/Local_tables/Plain_and_real-time_table_settings#profile), а также сохранять на уровне таблицы значения по умолчанию для [`ranker`](https://manual.manticoresearch.com/Searching/Options#ranker) и [`boolean_mode`](https://manual.manticoresearch.com/Searching/Options#boolean_mode).

По результатам наших тестов релевантности `profile='relevance'` включает лучше подобранные настройки полнотекстового поиска для типичных нагрузок, поэтому новые таблицы сразу получают более качественное ранжирование, а приложениям не нужно повторять одни и те же параметры в каждом запросе.

Настройки релевантности теперь задаются непосредственно в определении таблицы. Если таблица предназначена для полнотекстового поиска с упором на релевантность, этот выбор хранится в схеме без необходимости прописывать его в коде приложения.

### Контроль использования CPU для эмбеддингов

[`embeddings_threads`](https://manual.manticoresearch.com/Server_settings/Searchd#embeddings_threads) позволяет ограничить количество потоков CPU, используемых для автоматической генерации эмбеддингов при INSERT, `ALTER TABLE ... REBUILD KNN` и KNN-запросов от текста к вектору.

Это важно на общих хостах и при смешанных нагрузках. Генерация эмбеддингов и перестройка KNN могут сильно нагружать CPU; настройка лимита помогает планировать нагрузку на сервер и не даёт этим задачам занять все CPU-ресурсы.

---

## Исправления ошибок

В этой ветке релизов есть **17 исправлений, перечисленных в changelog**. Самые важные из них:

- В 28.4.3 исправлена некорректная обработка запросов с несколькими SQL-операторами при использовании [`COUNT(DISTINCT ...)`](https://manual.manticoresearch.com/Searching/Grouping#COUNT%28DISTINCT-field%29), что исключает некорректную передачу состояния и повреждение набора строк при обработке результатов нескольких запросов.
- В 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](https://manual.manticoresearch.com/Changelog#Version-28.4.4).

---

## Нужна помощь или хотите связаться с нами?

- Присоединяйтесь к нашему [Slack](https://slack.manticoresearch.com)
- Загляните на [форум](https://forum.manticoresearch.com)
- Сообщайте о проблемах или предлагайте идеи на [GitHub](https://github.com/manticoresoftware/manticoresearch/issues)
- Пишите нам: `contact@manticoresearch.com`
