pgvector: Operatori de Similitudine (, , ) în Baze de Date Vectoriale & Căutare Semantică

Interogarea vectorilor în SQL folosind cei trei operatori nativi pgvector: pentru Cosine Distance, pentru L2 și pentru Negated Dot Product.

Sintaxă & interogare
-- Găsirea celor mai apropiate 5 articole după similitudine Cosine:
SELECT id, titlu, 1 - (embedding <=> '[0.012, -0.045, ...]') AS scor_similitudine
FROM articole
ORDER BY embedding <=> '[0.012, -0.045, ...]'
LIMIT 5;

Descriere & Utilizare

Pentru a calcula distanțele direct în clauza ORDER BY a unei interogări SQL, pgvector introduce trei operatori matematici specializați:

1) <=> (Cosine Distance): returnează o valoare între 0 (vectori identici) și 2 (direcții opuse). Similitudinea Cosine clasică se calculează simplu ca 1 - (embedding <=> query). 2) <-> (Euclidean Distance / L2): calculează distanța fizică geometrică. 3) <#> (Negative Inner Product): returnează produsul scalar negat (utilizat pentru a putea folosi ORDER BY ASC).

Acești operatori pot fi combinați cu orice clauze WHERE, JOIN, LIMIT și funcții agregate din standardul SQL.

Cum să o reții ușor

💡 Operatorul este ca o busolă matematică încorporată în SQL: îi dai direcția întrebării și el sortează instantaneu rândurile din tabel în ordinea alinierii cu acea direcție.

Opțiuni și parametri tehnici

  • <=>: Cosine distance (recomandat pentru modelele de text OpenAI, Cohere, HuggingFace).
  • <->: L2 distance (distanță euclidiană pătratică).
  • <#>: Negative dot product (produs scalar înmulțit cu -1).
  • LIMIT N: esențial pentru performanță; fără LIMIT, baza va încerca să sorteze tot tabelul!

Exemple practice și cazuri de utilizare

  • Căutare semantică filtrată pe utilizator: SELECT titlu FROM documente WHERE user_id = 42 ORDER BY embedding $1 LIMIT 5;
  • Filtrare după prag minim de relevanță: SELECT * FROM articole WHERE (embedding $1) < 0.25 ORDER BY embedding $1 LIMIT 10;
  • Calculul distanței între două rânduri din tabel: SELECT a.titlu, b.titlu, a.embedding b.embedding AS distanta FROM articole a, articole b WHERE a.id = 1 AND b.id = 2;

Sfaturi de configurare & capcane

Reține că <=> returnează distanța (unde 0 înseamnă identic și 1 înseamnă ortogonal), nu similitudinea! Sortează întotdeauna cu ORDER BY embedding <=> $1 ASC.

Comenzi și ghiduri înrudite