Гайд · TNWS AI
Как настроить два embedders в Meilisearch для разных типов запросов
Раздельные named embedders для краткого названия и длинной спецификации, выбор hybrid.embedder и тест несовместимых vectors.
Задача, применимость и подтверждённые факты
Русскоязычный запрос: «как настроить несколько embedders Meilisearch». Документация производителя проверена 19 сентября 2026 года. Каталог содержит короткое название товара и развёрнутые технические характеристики. Одному embedder трудно одинаково хорошо обрабатывать оба намерения: пользователь ищет «тихий насос» или вводит точную инженерную характеристику. В Meilisearch можно создать несколько named embedders на одном индексе и выбрать нужный при search. Это не смешивание embeddings разных моделей в одном векторном пространстве.
Каждый ключ объекта embedders имеет собственную конфигурацию и набор vectors. Поисковый параметр hybrid.embedder явно выбирает имя для запроса. Официальные примеры используют два embedder с разными documentTemplate, чтобы один моделировал название и описание, другой — спецификацию. При добавлении embedder существующему индексу следите за отдельными задачами обработки и затратами на хранение нескольких наборов vectors.
Прежде чем менять рабочий индекс, сохраните его настройки и небольшой набор контрольных документов с ожидаемыми ID. Важно отделять принятие конфигурации сервером от готовности асинхронной обработки: поисковая выдача до завершения задачи не служит честным тестом качества. Для примеров с токенами ${OPENAI_API_KEY} нужен реальный секрет в защищённом окружении; строки-заглушки не являются рабочими ключами.
Порядок действий
- Выпишите два поисковых намерения, для каждого составьте собственный gold set и поля документа, несущие смысл.
- Создайте
general-v1дляtitle+descriptionиspecs-v1дляtitle+specs, с документированными моделью и шаблоном каждого. - Дождитесь обработки индекса обоими embedders; не считайте успешным только первый готовый вариант.
- Маршрутизируйте запросы сервером на конкретное имя в
hybrid.embedder, затем сравните выдачу. - Замерьте p95, размер данных и долю улучшенных/ухудшенных запросов до включения второго режима для всех пользователей.
После каждого шага сохраняйте ID операции или задачи, связанные с тестом версии модели, а не только HTTP-статус. Если задача окончилась ошибкой, не скрывайте её повторным запросом к поиску: сначала устраняйте причину. Применение к Meilisearch Cloud и самостоятельной установке зависит от доступности endpoint и полномочий ключа; здесь используются точные имена HTTP API из официальной документации, но не выдуманные пункты интерфейса.
Готовый запрос или шаблон
PATCH /indexes/products/settings/embedders
{"general-v1":{"source":"openAi","model":"text-embedding-3-small",
"apiKey":"${OPENAI_API_KEY}",
"documentTemplate":"{{doc.title}}. {{doc.description}}"},
"specs-v1":{"source":"openAi","model":"text-embedding-3-small",
"apiKey":"${OPENAI_API_KEY}",
"documentTemplate":"{{doc.title}}. Параметры: {{doc.specs}}"}}
POST /indexes/products/search
{"q":"насос 10 бар для горячей воды",
"hybrid":{"embedder":"specs-v1","semanticRatio":0.6},"limit":5}
Никогда не копируйте заглушки URL, API key, model ID или тестовые vectors в рабочую систему без замены и проверки. Векторы длины три демонстрируют контракт данных; они не представляют реальную языковую модель и не позволяют обещать заданный порядок поисковых результатов.
Пример входа и ожидаемого результата
Вход: насос A с specs «10 бар, горячая вода» и B с похожим названием, но пределом 4 бар. Общий вопрос «помпа для дома» тестирует general-v1; технический вопрос «10 бар для горячей воды» — specs-v1. Ожидается A в разрешённой top-5 по второй метке и отсутствие ложного вывода, что B технически подходит только из-за похожего имени.
Что важно при внедрении
Два embedder не решают задачу авторизации и не заменяют фильтр по наличию, стране или tenant. Разбор намерения должен выполняться в доверенном backend, если от него зависит доступ. Отдельно зафиксируйте, как поступаете с товарами без specs: пустой template не станет полезным embedding. Для такого товара верните результат keyword branch либо контролируемый ответ о неполных данных, но не придумывайте спецификации. Сравнение разных model IDs делайте по размеченным документам; похожие числовые scores разных embedder не следует напрямую трактовать как вероятность пригодности. Добавление второго embedder влияет на время переиндексации и storage; расширяйте его только когда он даёт измеряемую пользу для конкретного класса запросов. При обновлении specs проверьте успешность task этого embedder, иначе результаты устареют.
Сравнение решений
| Имя | Входной текст | Сценарий |
|---|---|---|
| general-v1 | название и описание | общий пользовательский запрос |
| specs-v1 | название и спецификация | точные технические требования |
Сравнивайте режимы на фиксированном наборе вопросов и ID: табличные свойства указывают механизм, а не гарантируют результат на вашем корпусе.
Критерии проверки
- Оба embedder есть в settings и tasks завершены.
- Параметр поиска выбирает существующее имя.
- Технический canary не рекомендует несовместимый товар.
- Отдельно учтены неполные specs и ресурсы двух индексов vectors.
Сделайте повторный запуск тех же запросов после изменения модели, схемы, API поставщика или состава корпуса. Фиксируйте source IDs, текст-основание ответа, долю верных top-k и задержку на одинаковых данных. Для RAG найденный hit — свидетельство релевантности, не разрешение придумывать содержание: генератору передавайте только допустимые фрагменты, а утверждения проверяйте по первоисточнику.
Ошибки и чего не делать
- Считать, что два embedder смешивают vectors в одну шкалу.
- Забыть указать hybrid.embedder в поиске.
- Пускать незаполненные specs без диагностики.
- Включить второй embedder без оценки затрат.
Не используйте высокий _rankingScore как вероятность истинности текста. При незнакомом вопросе возвращайте недостаточность данных вместо уверенной генерации на случайном соседнем документе. Если у вас есть tenant или права доступа, отфильтровывайте документы до передачи LLM и проверяйте отрицательным тестом отсутствие чужого источника.
FAQ
Можно ли использовать разные модели?
Да, как разные named embedders и независимые пространства.
Как выбрать embedder?
Передать имя в hybrid.embedder.
Нужны ли два индекса?
Нет, несколько embedders поддерживаются в одном индексе.
Поможет ли это при пустом поле specs?
Нет, исправьте данные либо предусмотрите fallback.
Официальные источники
Частые вопросы
Можно ли использовать разные модели?
Да, как разные named embedders и независимые пространства.
Как выбрать embedder?
Передать имя в `hybrid.embedder`.
Нужны ли два индекса?
Нет, несколько embedders поддерживаются в одном индексе.
Поможет ли это при пустом поле specs?
Нет, исправьте данные либо предусмотрите fallback.
Читайте также
Как сохранить несколько embeddings одного документа в Meilisearch
Массив векторов одного документа в _vectors.embeddings для нескольких абзацев, их обновление и проверка релевантности.
Как настроить composite embedders Meilisearch для индексации и поиска
Экспериментальный compositeEmbedders: разные среды одной модели, равная размерность, совместимость vectors и план отката.
Как настроить distribution в Meilisearch для слишком высоких semantic scores
Проверка showRankingScore, подбор mean/sigma и контроль порога релевантности без переиндексации vectors.
Комментарии
Пока тихо. Скажите первое слово