Qdrant Formula Query: как дать бонус записям с нужной меткой
На странице · 3 разделов
Formula Query в Qdrant пересчитывает оценку уже найденных точек: к оценке похожести можно добавить бонус записи с определённой меткой. Ниже две искусственные записи и сравнение порядка до и после бонуса. Нужны работающий Qdrant v1.19.x и терминал; редакция не запускала сервер, пример сверен с документацией и проверен только на HTTP-фикстуре.
Технический уровень. Нужны работающий Qdrant v1.19.x на своём компьютере, Linux/macOS и
curl. Это не домашний рецепт установки AI-модели. Инструкция сверена с документацией 19 октября 2026 года; редакция проверила команды на имитации HTTP-ответов, но не запускала Qdrant. Пример без ключа обращается к127.0.0.1: не открывайте тестовый сервер в сеть. s2 s5
Зачем менять порядок найденных записей?
Представьте два коротких фрагмента каталога: первый чуть ближе к запросу по смыслу, второй имеет метку featured. Qdrant обычно сортирует найденные векторы — списки чисел, представляющих объекты, — по мере похожести. Formula Query позволяет после предварительного поиска (prefetch) прибавить небольшой бонус совпавшей метке и пересортировать найденные записи. Это не фильтр: неподходящая запись остаётся кандидатом. Прибавку подбирают на собственных данных, а не считают универсальной настройкой. s1 s2 s6
Как сравнить две выдачи на учебных данных?
Сначала подготовьте локальный Qdrant. В терминале Linux/macOS используйте только новую учебную коллекцию demo_formula_20261019; не выполняйте команды над рабочими данными. Если имя уже занято, остановитесь и замените его во всех командах. Числовые векторы и метки придуманы для демонстрации: AI-модель их не создавала. s3 s4 s5
- Создайте пустую коллекцию:
curl -fsS -X PUT 'http://127.0.0.1:6333/collections/demo_formula_20261019' -H 'Content-Type: application/json' -d '{"vectors":{"size":2,"distance":"Cosine"}}'. Ожидайтеstatus: okиresult: true; если имя занято, возьмите другое. s3 - Запишите две точки с разными метками:
curl -fsS -X PUT 'http://127.0.0.1:6333/collections/demo_formula_20261019/points?wait=true' -H 'Content-Type: application/json' -d '{"points":[{"id":1,"vector":[1,0],"payload":{"tag":"ordinary"}},{"id":2,"vector":[0.8,0.6],"payload":{"tag":"featured"}}]}'. Ожидайтеresult.status: completed; повторный upsert с теми же ID перезапишет точки. s4 - Получите исходную выдачу:
curl -fsS -X POST 'http://127.0.0.1:6333/collections/demo_formula_20261019/points/query' -H 'Content-Type: application/json' -d '{"query":[1,0],"limit":2,"params":{"exact":true},"with_payload":true}'. Вresult.pointsсравнитеid,scoreиpayload.tag: без бонуса ID1ожидается выше ID2(косинусная близость учебных единичных векторов: 1 против 0.8). Это расчётный ориентир, не наш замер сервера. s2 - Пересчитайте оценки:
curl -fsS -X POST 'http://127.0.0.1:6333/collections/demo_formula_20261019/points/query' -H 'Content-Type: application/json' -d '{"prefetch":{"query":[1,0],"limit":2,"params":{"exact":true}},"query":{"formula":{"sum":["$score",{"mult":[0.3,{"key":"tag","match":{"any":["featured"]}}]}]}},"limit":2,"with_payload":true}'. Теперь для ID2ожидается расчётная оценка 0.8 + 0.3 = 1.1, а для ID1— 1: порядок должен поменяться, если сервер выполнил пример и обе точки попали вprefetch. Полеtag— метаданные записи (payload); совпадение условия даёт 1, несовпадение 0. Настоящий ответ Qdrant редакция не измеряла. s1 s2
Что делать, если порядок не изменился?
Убедитесь, что upsert завершён и prefetch.limit не меньше числа проверяемых кандидатов. Проверьте точные значения payload.tag и наличие result.points: формула пересчитывает только предварительно найденные точки, а не ищет в коллекции заново. Для других метрик расстояния и объёмов данных бонус 0.3 не переносится без проверки; при распределённом поиске есть дополнительные особенности вложенных запросов. Если метка означает право доступа или обязательное исключение, используйте фильтр полей и отдельно проверьте ограничения на своём сервере: бонус не обеспечивает изоляцию. s1 s6
Источники
- Qdrant — Search Relevance: Score Boosting. Получено 19.10.2026.
- Qdrant API v1.19.x — Query points. Получено 19.10.2026.
- Qdrant API v1.19.x — Create a collection. Получено 19.10.2026.
- Qdrant API v1.19.x — Upsert points. Получено 19.10.2026.
- Qdrant — Local Quickstart. Получено 19.10.2026.
- Qdrant — Hybrid and Multi-Stage Queries. Получено 19.10.2026.