{"id":"post:postgres-hybrid-indexes","type":"post","title":"Индексы под гибридный поиск в PostgreSQL: halfvec, HNSW и RUM на практике","url":"/posts/postgres-hybrid-indexes","md":"/posts/postgres-hybrid-indexes.md","summary":"halfvec, перестройка HNSW с m = 32 и чистка мёртвых строк в одном PostgreSQL: полнота фильтрованного векторного поиска выросла с 0.56–0.78 до 0.80–0.86, RUM-индекс сжался вдвое.","llm_summary":"Вторая статья цикла «RAG в проде». Векторный и лексический поиск живут в одном PostgreSQL 17 с pgvector и RUM: около 925 тысяч векторов размерности 2000. Переход с vector на halfvec уменьшил HNSW-индекс с 14 до 7.2 ГБ, и он поместился в shared_buffers. Итеративный скан и перестройка графа HNSW с m = 16, ef_construction = 64 на m = 32, ef_construction = 256 подняли Recall@40 фильтрованного поиска с 0.15–0.31 до 0.80–0.86 при задержке 20–30 мс. Разобраны перестройка индекса без простоя, идемпотентная миграция, память сборки, цена мёртвых строк для RUM (скан p50 252 → 191 мс, индекс 806 → 368 МБ) и грабли с частичными индексами, которые не покрывает предикат запроса.","domains":["ai","architecture"],"tags":["rag","search","postgresql","vector-search"],"date":"2026-10-25T10:00:00+03:00"}