feat: hybrid retrieval (BM25 + vettoriale, RRF) opt-in via hybrid=true

- sparse vector bm25 (modifier IDF) + indice TEXT su text
- migrazione automatica: create_vector_name su collection esistente + backfill dei punti privi di sparse
- write: sparse vector a ogni upsert (fastembed Qdrant/bm25)
- search: hybrid=true → prefetch denso (min_score anti-rumore) + sparso, fusione RRF; default invariato (punteggi cosine)
- qdrant-client 1.13.0 → 1.19.0 (create_vector_name, query_points; search rimosso in 1.19)
- fastembed 0.5.1 + pre-download modello BM25 nel Dockerfile (appuser)
- estensione: parametro hybrid in qmem_search
- verificato sul server: migrazione + backfill OK, termine esatto trovato con RRF 1.0 (istanza di test)
This commit is contained in:
Matteo Benedetto
2026-08-16 19:41:42 +02:00
parent 2d354bfde6
commit 7abced1566
4 changed files with 144 additions and 11 deletions
+2 -1
View File
@@ -1,5 +1,6 @@
fastapi==0.115.6
uvicorn[standard]==0.34.0
qdrant-client==1.13.0
qdrant-client==1.19.0
httpx==0.28.1
pydantic==2.10.4
fastembed==0.5.1