Nutzlast
Eine der wichtigen Funktionen von Qdrant ist die Möglichkeit, zusätzliche Informationen außerhalb von Vektoren zu speichern (Speichermanagement für Geschäftsanwendungen). In der Qdrant-Terminologie wird diese zusätzliche Information als "Nutzlast" bezeichnet.
Qdrant ermöglicht es Ihnen, alle Informationen zu speichern, die mithilfe von JSON dargestellt werden können.
Hier ist ein Beispiel für eine typische Nutzlast:
{
"name": "Jacke",
"farbe": ["rot", "blau"],
"menge": 10,
"preis": 11,99,
"standort": [
{
"längengrad": 52,5200,
"breitengrad": 13,4050
}
],
"bewertungen": [
{
"benutzer": "Alice",
"punktzahl": 4
},
{
"benutzer": "Bob",
"punktzahl": 5
}
]
}
Nutzlasttypen
Neben der Speicherung von Nutzlasten ermöglicht Qdrant auch die Suche basierend auf bestimmten Arten von Werten. Diese Funktion wird als zusätzliche Filter während des Suchprozesses implementiert und ermöglicht es Ihnen, benutzerdefinierte Logik auf der Grundlage von semantischer Ähnlichkeit einzubetten.
Während des Filterprozesses überprüft Qdrant die Bedingungen von Werten, die die Filterkriterien erfüllen. Wenn der gespeicherte Werttyp nicht den Filterkriterien entspricht, wird er als unzureichend betrachtet.
Wenn beispielsweise Bereichsbedingungen auf String-Daten angewendet werden, führt dies zu einer leeren Ausgabe.
Die Handhabung von Arrays (mehrere Werte des gleichen Typs) ist jedoch etwas anders. Wenn wir Filter auf ein Array anwenden, wird der Filter erfolgreich, wenn mindestens ein Wert im Array die Bedingung erfüllt.
Eine ausführliche Diskussion des Filterprozesses wird im Abschnitt zur Filterung durchgeführt.
Lassen Sie uns einen Blick auf die von Qdrant unterstützten Datentypen werfen:
Ganzzahl
ganzzahl
- 64-Bit-Ganzzahl, im Bereich von -9223372036854775808
bis 9223372036854775807
.
Beispiele für einzelne und mehrere ganzzahl
Werte:
{
"menge": 10,
"größen": [35, 36, 38]
}
Gleitkommazahl
gleitkommazahl
- 64-Bit-Gleitkommazahl.
Beispiele für einzelne und mehrere gleitkommazahl
Werte:
{
"preis": 11,99,
"bewertung": [9,1, 9,2, 9,4]
}
Boolescher Wert
bool
- binärer Wert. Entweder true
oder false
.
Beispiele für einzelne und mehrere bool
Werte:
{
"geliefert": true,
"antworten": [false, false, true, false]
}
Schlüsselwort
schlüsselwort
- Zeichenfolgenwert.
Beispiele für einzelne und mehrere schlüsselwort
Werte:
{
"name": "Alice",
"freunde": [
"Bob",
"Eva",
"Jack"
]
}
Geografische Koordinaten
geo
wird verwendet, um geografische Koordinaten darzustellen.
Beispiele für einzelne und mehrere geo
Werte:
{
"standort": {
"längengrad": 52,5200,
"breitengrad": 13,4050
},
"städte": [
{
"längengrad": 51,5072,
"breitengrad": 0,1276
},
{
"längengrad": 40,7128,
"breitengrad": 74,0060
}
]
}
Koordinaten sollten als ein Objekt beschrieben werden, das zwei Felder enthält: längengrad
- repräsentiert den Längengrad, breitengrad
- repräsentiert den Breitengrad.
Punkte mit Nutzlasten erstellen
REST-API (Architektur)
PUT /kollektionen/{sammlungsname}/punkte
{
"punkte": [
{
"id": 1,
"vektor": [0,05, 0,61, 0,76, 0,74],
"nutzlast": {"stadt": "Berlin", "preis": 1,99}
},
{
"id": 2,
"vektor": [0,19, 0,81, 0,75, 0,11],
"nutzlast": {"stadt": ["Berlin", "London"], "preis": 1,99}
},
{
"id": 3,
"vektor": [0,36, 0,55, 0,47, 0,94],
"nutzlast": {"stadt": ["Berlin", "Moskau"], "preis": [1,99, 2,99]}
}
]
}
Einstellen von Nutzlasten
REST-API (Schema):
POST /collections/{collection_name}/points/payload
{
"payload": {
"property1": "string",
"property2": "string"
},
"points": [
0, 3, 100
]
}
Löschen von Nutzlasten
Diese Methode entfernt angegebene Nutzlastschlüssel von den angegebenen Punkten.
REST-API (Schema):
POST /collections/{collection_name}/points/payload/delete
{
"keys": ["color", "price"],
"points": [0, 3, 100]
}
Löschen von Nutzlasten
Diese Methode entfernt alle Nutzlastschlüssel von den angegebenen Punkten.
REST-API (Schema):
POST /collections/{collection_name}/points/payload/clear
{
"points": [0, 3, 100]
}
Sie können auch
models.FilterSelector
verwenden, um Punkte zu entfernen, die gegebenen Filterbedingungen entsprechen, anstatt IDs anzugeben.
Indexierung von Nutzlasten
Um gefilterte Suchvorgänge effizient durchzuführen, ermöglich Qdrant die Erstellung eines Indexes für Nutzlastfelder durch Angabe des Namens und Typs des Feldes.
Indexierte Felder beeinflussen auch den Vektordatenindex.
In der Praxis empfiehlt es sich, Indizes für Felder zu erstellen, die voraussichtlich die Ergebnisse am stärksten einschränken. Beispielsweise wird die Indexierung der Objekt-ID effizienter sein als die Indexierung der Farbe, da die Objekt-ID für jeden Datensatz eindeutig ist, während die Farbe nur wenige mögliche Werte hat.
Bei zusammengesetzten Abfragen, die mehrere Felder involvieren, versucht Qdrant zuerst den restriktivsten Index zu nutzen.
Um einen Index für ein Feld zu erstellen, kann Folgendes verwendet werden:
REST-API (Schema)
PUT /collections/{collection_name}/index
{
"field_name": "Name des zu indexierenden Feldes",
"field_schema": "keyword"
}
Die indexierten Felder werden gemeinsam mit den Sammlungsinformationen-API im Nutzlastschema angezeigt.
Beispiel-Nutzlastschema:
{
"payload_schema": {
"property1": {
"data_type": "keyword"
},
"property2": {
"data_type": "integer"
}
}
}