- 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)
18 lines
519 B
Docker
18 lines
519 B
Docker
FROM python:3.12-slim
|
|
|
|
WORKDIR /app
|
|
COPY requirements.txt .
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
COPY main.py .
|
|
|
|
# Utente non-root con privilegi minimi (best practice container)
|
|
RUN useradd --create-home --uid 10001 appuser
|
|
USER appuser
|
|
|
|
# Pre-download del modello sparso BM25 (cache in /home/appuser/.cache/fastembed)
|
|
RUN python -c "from fastembed import SparseTextEmbedding; SparseTextEmbedding(model_name='Qdrant/bm25')"
|
|
|
|
EXPOSE 8080
|
|
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]
|