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"
        }
    }
}