Гайд · TNWS AI

Как настроить два embedders в Meilisearch для разных типов запросов

5 мин—

Раздельные 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} нужен реальный секрет в защищённом окружении; строки-заглушки не являются рабочими ключами.

Порядок действий

  1. Выпишите два поисковых намерения, для каждого составьте собственный gold set и поля документа, несущие смысл.
  2. Создайте general-v1 для title+description и specs-v1 для title+specs, с документированными моделью и шаблоном каждого.
  3. Дождитесь обработки индекса обоими embedders; не считайте успешным только первый готовый вариант.
  4. Маршрутизируйте запросы сервером на конкретное имя в hybrid.embedder, затем сравните выдачу.
  5. Замерьте 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.

Читайте также

Комментарии

Пока тихо. Скажите первое слово