ChromaDB: collection.add() și collection.query() în Baze de Date Vectoriale & Căutare Semantică

Adăugarea documentelor cu ID-uri, texte și metadate în ChromaDB și interogarea semantică cu returnarea distanțelor și a fragmentelor de text.

Sintaxă & interogare
# Inserare date în colecție:
colectie.add(
    ids=["doc_1", "doc_2"],
    documents=["Ghid complet Python", "Cum optimizezi Docker pe Linux"],
    metadatas=[{"cat": "python"}, {"cat": "devops"}]
)

# Căutare semantică după text:
rezultate = colectie.query(query_texts=["containere Linux"], n_results=2)

Descriere & Utilizare

Lucrul cu datele în ChromaDB este centrat pe două metode fundamentale ale obiectului Collection: add() și query().

Metoda add() primește liste paralele: ids (identificatori unici), documents (textele brute), metadatas (dicționare pentru filtrare) și opțional embeddings (dacă ai deja vectorii). Datele sunt indexate instantaneu.

Metoda query() îți permite să cauți direct trimițând textul întrebării prin query_texts=["..."] (fără să îl vectorizezi manual!) sau prin vectori precalculați query_embeddings=[[...]]. Răspunsul conține un dicționar cu documents, metadatas și distances ordonate după relevanță.

Cum să o reții ușor

💡 Adaugi fișiere într-un dosar punând o etichetă pe fiecare (add), iar când ai o întrebare, dosarul se deschide automat exact la paginile care conțin cele mai bune răspunsuri (query).

Opțiuni și parametri tehnici

  • n_results: numărul de documente similare dorite la ieșire (Top K).
  • where={"cat": "devops"}: filtrare exactă pe metadate (suportă operatori precum $eq, $in, $gt, $and).
  • where_document={"$contains": "Linux"}: filtrare suplimentară pe conținutul textului brut.
  • include=["documents", "metadatas", "distances"]: specifică ce câmpuri să fie returnate pentru a economisi memorie.

Exemple practice și cazuri de utilizare

  • Filtrare combinată cu $and: colectie.query(query_texts=["..."], where={"$and": [{"cat": "devops"}, {"an": {"$gte": 2025}}]}).
  • Actualizarea sau inserarea (Upsert): folosește colectie.upsert(...) în loc de add() pentru a nu primi eroare la ID-uri duplicate.
  • Extragerea documentelor găsite: for doc in rezultate["documents"][0]: print(doc).

Sfaturi de configurare & capcane

Atenție la structura returnată de query(): rezultatele sunt împachetate ca o listă de liste (ex: rezultate["documents"][0]), deoarece metoda acceptă interogarea mai multor întrebări simultan!

Comenzi și ghiduri înrudite