﻿# Индекс halfvec в pgvector: полные векторы для финального ранжирования

Expression-индекс halfvec позволяет искать по представлению пониженной точности, не заменяя исходные векторы в таблице.

Автор: Команда Retrivium
Обновлено: 2026-11-03
Канонический URL: https://retrivium.ai/ru/journal/pgvector-halfvec-expression-index-rerank/
Language: ru

Expression-индекс halfvec позволяет искать по представлению пониженной точности, не заменяя исходные векторы в таблице. Это различие важно для оценки размера индекса и итогового ранжирования: хранение half precision и индексация приведения типа являются разными решениями.

## Выбрать сокращаемое представление

[README pgvector](https://github.com/pgvector/pgvector) описывает и столбец `halfvec`, и expression-индекс над приведением существующего embedding. Во втором случае исходные значения сохраняются для другого этапа оценки. Замена типа столбца меняет сами остающиеся данные. До сравнения объёмов определите, какая операция предполагается, и сохраните ревизию модели вместе с размерностью вектора. Эти сведения необходимы для обоих вариантов, даже если внешнее имя поля осталось прежним после изменения схемы.

## Согласовать выражение индекса

PostgreSQL использует выражение, объявленное в индексе, а не общее намерение искать с пониженной точностью. Это различие объясняет [документация expression-индексов](https://www.postgresql.org/docs/current/indexes-expressional.html). Учебный индекс для трёхмерных данных может использовать `embedding::halfvec(3)` с соответствующим классом операторов. Поиску нужны согласованные выражение и операция расстояния. Это пример структуры, а не рекомендация размерности для настоящего корпуса. Сохраните его отдельно от рабочего профиля, чтобы иллюстрация не стала случайной производственной схемой.

## Проверить контракт типа и операции

[SQL-определения расширения](https://github.com/pgvector/pgvector/blob/master/sql/vector.sql) показывают функции, приведения и операторы halfvec. Сохраняйте выбранное расстояние: не заменяйте cosine другой метрикой одновременно с изменением точности. Такой опыт не позволит установить причину изменения порядка. Проверьте версию расширения и фактический план выполнения. Синтаксически правильный запрос способен использовать другой путь, когда его выражение или условия стоимости отличаются от предполагаемой конфигурации индекса.

## Разделить shortlist и финальный порядок

Подготовьте диагностический корпус с почти одинаковыми фрагментами и небольшим набором размеченных запросов. Представлением half precision выберите кандидатов, затем вычислите нужное финальное расстояние по исходным векторам. Сохраните оба порядка и идентификаторы кандидатов. Точное повторное ранжирование не вернёт документ, отсутствующий в shortlist. Напротив, перемена промежуточного порядка может оказаться безвредной, если требуемые доказательства остаются доступны итоговому этапу обработки.

| Этап | Сохраняемое представление |
|---|---|
| Исходное хранение | Оригинальный вектор |
| Индекс кандидатов | Явное выражение halfvec |
| Финальная оценка | Объявленная метрика оригинального вектора |

## Измерить не только файлы индекса

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

## Сохранить контроль миграции

Оставьте точный поиск по исходным векторам как контроль на небольшом наборе. Сначала меняйте индексируемое представление при неизменных запросах, фильтрах и финальном скоринге. Изменение точности хранения требует другого опыта и своих данных отката. Итог должен объяснять, какое представление сокращено и какая информация остаётся доступной, а не просто объявлять, что база теперь использует вдвое меньше памяти.

Связанные материалы: [PostgreSQL и pgvector для RAG: когда хватит существующего сервера](/ru/journal/pgvector-rag-server/); [Размерность эмбеддингов: как посчитать память индекса](/ru/journal/embedding-dimensions-memory/).
