Payload
Una delle funzionalità importanti di Qdrant è la capacità di memorizzare informazioni aggiuntive al di fuori dei vettori (attributi commerciali di gestione dello storage). In terminologia Qdrant, queste informazioni aggiuntive sono indicate come "payload".
Qdrant ti consente di memorizzare qualsiasi informazione che può essere rappresentata utilizzando JSON.
Ecco un esempio di un payload tipico:
{
"name": "giacca",
"colore": ["rosso", "blu"],
"quantità": 10,
"prezzo": 11.99,
"posizione": [
{
"longitudine": 52.5200,
"latitudine": 13.4050
}
],
"recensioni": [
{
"utente": "Alice",
"punteggio": 4
},
{
"utente": "Bob",
"punteggio": 5
}
]
}
Tipi di Payload
Oltre a memorizzare i payload, Qdrant consente anche di effettuare ricerche basate su determinati tipi di valori. Questa funzionalità viene implementata come filtri aggiuntivi durante il processo di ricerca e consente di integrare logiche personalizzate sulla similarità semantica.
Durante il processo di filtraggio, Qdrant verificherà le condizioni dei valori che soddisfano i criteri del filtro. Se il tipo di valore memorizzato non soddisfa i criteri del filtro, viene considerato non soddisfacente.
Ad esempio, l'applicazione di condizioni di intervallo ai dati di stringa produrrà un output vuoto.
Tuttavia, il trattamento degli array (valori multipli dello stesso tipo) è leggermente diverso. Quando applichiamo filtri a un array, se almeno un valore nell'array soddisfa la condizione, il filtro avrà successo.
Una discussione dettagliata del processo di filtraggio è effettuata nella sezione di filtraggio.
Diamo uno sguardo ai tipi di dati supportati da Qdrant:
Intero
integer
- intero a 64 bit, con un intervallo da -9223372036854775808
a 9223372036854775807
.
Esempi di valori singoli e multipli integer
:
{
"quantità": 10,
"taglie": [35, 36, 38]
}
Float
float
- numero in virgola mobile a 64 bit.
Esempi di valori singoli e multipli float
:
{
"prezzo": 11.99,
"valutazioni": [9.1, 9.2, 9.4]
}
Boolean
bool
- valore binario. Uguale a true
o false
.
Esempi di valori singoli e multipli bool
:
{
"consegnato": true,
"risposte": [false, false, true, false]
}
Parola chiave
keyword
- valore stringa.
Esempi di valori singoli e multipli keyword
:
{
"nome": "Alice",
"amici": [
"Bob",
"Eva",
"Jack"
]
}
Coordinate Geografiche
geo
è utilizzato per rappresentare le coordinate geografiche.
Esempi di valori singoli e multipli geo
:
{
"posizione": {
"longitudine": 52.5200,
"latitudine": 13.4050
},
"città": [
{
"longitudine": 51.5072,
"latitudine": 0.1276
},
{
"longitudine": 40.7128,
"latitudine": 74.0060
}
]
}
Le coordinate dovrebbero essere descritte come un oggetto contenente due campi: longitudine
- che rappresenta la longitudine, latitudine
- che rappresenta la latitudine.
Creazione di punti con payload
API REST (architettura)
PUT /collections/{nome_collezione}/points
{
"points": [
{
"id": 1,
"vector": [0.05, 0.61, 0.76, 0.74],
"payload": {"città": "Berlino", "prezzo": 1.99}
},
{
"id": 2,
"vector": [0.19, 0.81, 0.75, 0.11],
"payload": {"città": ["Berlino", "Londra"], "prezzo": 1.99}
},
{
"id": 3,
"vector": [0.36, 0.55, 0.47, 0.94],
"payload": {"città": ["Berlino", "Mosca"], "prezzo": [1.99, 2.99]}
}
]
}
Impostazione dei payloads
API REST (Schema):
POST /collezioni/{nome_collezione}/punti/payload
{
"payload": {
"proprietà1": "stringa",
"proprietà2": "stringa"
},
"punti": [
0, 3, 100
]
}
Eliminazione dei payloads
Questo metodo rimuove le chiavi dei payload specificate dai punti specificati.
API REST (Schema):
POST /collezioni/{nome_collezione}/punti/payload/delete
{
"chiavi": ["colore", "prezzo"],
"punti": [0, 3, 100]
}
Pulizia dei payloads
Questo metodo rimuove tutte le chiavi dei payload dai punti specificati.
API REST (Schema):
POST /collezioni/{nome_collezione}/punti/payload/clear
{
"punti": [0, 3, 100]
}
È inoltre possibile utilizzare
models.FilterSelector
per rimuovere i punti che corrispondono a determinate condizioni di filtro, anziché fornire gli ID.
Indicizzazione dei payloads
Per condurre ricerche filtrate in modo efficiente, Qdrant consente di creare un'indicizzazione per i campi dei payload specificando il nome e il tipo del campo.
I campi indicizzati influenzano anche l'indice vettoriale.
Nella pratica, è consigliabile creare indicizzazioni su campi che probabilmente limiteranno maggiormente i risultati. Ad esempio, indicizzare l'ID dell'oggetto sarà più efficiente dell'indicizzazione del colore, poiché l'ID dell'oggetto è univoco per ogni record, mentre il colore ha solo alcuni possibili valori.
Nelle query composite che coinvolgono più campi, Qdrant cercherà di utilizzare prima l'indice più restrittivo.
Per creare un'indicizzazione per un campo, può essere utilizzato quanto segue:
API REST (Schema)
PUT /collezioni/{nome_collezione}/indice
{
"nome_campo": "nome del campo da indicizzare",
"schema_campo": "parola chiave"
}
I campi indicizzati sono visualizzati nello schema del payload insieme alla API delle informazioni sulla collezione.
Esempio dello schema del payload:
{
"payload_schema": {
"proprietà1": {
"tipo_dati": "parola chiave"
},
"proprietà2": {
"tipo_dati": "intero"
}
}
}