Qdrant: Inserare Puncte cu Vectori & Payload (Upsert) în Baze de Date Vectoriale & Căutare Semantică

Cum inserezi sau actualizezi puncte (PointStruct) în Qdrant, asociind fiecărui vector un identificator unic și un payload bogat de metadate JSON.

Sintaxă & interogare
from qdrant_client.models import PointStruct

puncte = [
    PointStruct(
        id=101,
        vector=[0.021, -0.045, ..., 0.089],
        payload={"titlu": "Ghid Docker", "categorie": "devops", "an": 2026, "tags": ["linux", "containere"]}
    )
]
client.upsert(collection_name="articole_dexblog", points=puncte)

Descriere & Utilizare

În Qdrant, fiecare element stocat se numește Point (Punct) și este reprezentat de clasa PointStruct. Un punct conține trei elemente: un id (număr întreg sau string UUID), un vector (lista de numere float) și un payload (un dicționar JSON arbitrar).

Operațiunea de scriere este de tip upsert (update or insert): dacă un punct cu acel ID există deja în colecție, este actualizat pe loc; dacă nu există, este inserat.

Payload-ul este mult mai mult decât un simplu depozit pasiv de text: Qdrant indexează automat câmpurile din payload pentru a permite filtrarea la viteza luminii în timpul căutării vectoriale.

Cum să o reții ușor

💡 Fiecare punct este ca un tablou dintr-o galerie: vectorul este imaginea artistică în sine, ID-ul este numărul de inventar, iar payload-ul este plăcuța explicativă cu titlul, autorul, anul și stilul.

Opțiuni și parametri tehnici

  • id: fie un întreg pozitiv (ex: 101), fie un string conform standardului UUID v4 (ex: "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d").
  • vector: lista de float-uri având exact dimensiunea declarată în vectors_config.
  • payload: orice obiect JSON serializabil (stringuri, numere, liste, obiecte imbricate).
  • wait=True: blochează execuția până când datele sunt scrise și pe disc în WAL (Write-Ahead Log).

Exemple practice și cazuri de utilizare

  • Inserare în lot (Batch) pentru viteză maximă: trimite liste de câte 100–500 de puncte într-un singur apel client.upsert().
  • Generare UUID automat din titlu sau URL: import uuid; point_id = str(uuid.uuid5(uuid.NAMESPACE_URL, url)).
  • Actualizarea doar a payload-ului fără a retrimite vectorul: client.set_payload(collection_name="...", payload={"vizualizari": 1500}, points=[101]).

Sfaturi de configurare & capcane

Include întotdeauna textul sursă complet în payload (ex: payload={"text": fragment_text}) — astfel nu vei fi nevoit să interoghezi o a doua bază de date pentru a obține textul după ce ai găsit vectorul.

Comenzi și ghiduri înrudite