Ładunek
Jedną z ważnych funkcji Qdranta jest zdolność przechowywania dodatkowych informacji poza wektorami (atrybuty biznesowe zarządzania przechowywaniem). W terminologii Qdranta, te dodatkowe informacje określane są jako "ładunek".
Qdrant pozwala przechowywać dowolne informacje, które można przedstawić za pomocą formatu JSON.
Oto przykład typowego ładunku:
{
"name": "kurtka",
"color": ["czerwony", "niebieski"],
"quantity": 10,
"price": 11.99,
"location": [
{
"longitude": 52.5200,
"latitude": 13.4050
}
],
"reviews": [
{
"user": "Alice",
"score": 4
},
{
"user": "Bob",
"score": 5
}
]
}
Typy ładunku
Oprócz przechowywania ładunków, Qdrant pozwala również wyszukiwać na podstawie określonych typów wartości. Ta funkcja jest realizowana jako dodatkowe filtry podczas procesu wyszukiwania i pozwala osadzać niestandardową logikę na tle podobieństwa semantycznego.
Podczas procesu filtrowania Qdrant sprawdzi warunki wartości, które spełniają kryteria filtru. Jeśli przechowywany typ wartości nie spełnia kryteriów filtru, uważany jest za niesatysfakcjonujący.
Na przykład, zastosowanie warunków zakresu do danych typu ciągłego spowoduje pustą wartość wyjściową.
Jednakże obsługa tablic (wielu wartości tego samego typu) jest nieco inna. Podczas gdy zastosujemy filtry do tablicy, jeśli przynajmniej jedna wartość w tablicy spełnia warunek, filtr zostanie uznany za udany.
Szczegółowa dyskusja procesu filtrowania odbywa się w sekcji filtrowania.
Przyjrzyjmy się typom danych obsługiwanym przez Qdrant:
Liczba całkowita
integer
- liczba całkowita 64-bitowa, z zakresem od -9223372036854775808
do 9223372036854775807
.
Przykłady pojedynczych i wielokrotnych wartości integer
:
{
"quantity": 10,
"sizes": [35, 36, 38]
}
Zmiennoprzecinkowa
float
- liczba zmiennoprzecinkowa 64-bitowa.
Przykłady pojedynczych i wielokrotnych wartości float
:
{
"price": 11.99,
"rating": [9.1, 9.2, 9.4]
}
Logiczna
bool
- wartość binarna. Równa się true
lub false
.
Przykłady pojedynczych i wielokrotnych wartości bool
:
{
"delivered": true,
"replies": [false, false, true, false]
}
Słowo kluczowe
keyword
- wartość ciągu znaków.
Przykłady pojedynczych i wielokrotnych wartości keyword
:
{
"name": "Alice",
"friends": [
"Bob",
"Eva",
"Jack"
]
}
Współrzędne geograficzne
geo
jest używane do reprezentowania współrzędnych geograficznych.
Przykłady pojedynczych i wielokrotnych wartości geo
:
{
"location": {
"longitude": 52.5200,
"latitude": 13.4050
},
"cities": [
{
"longitude": 51.5072,
"latitude": 0.1276
},
{
"longitude": 40.7128,
"latitude": 74.0060
}
]
}
Współrzędne powinny być opisane jako obiekt zawierający dwie pola: longitude
- reprezentujące długość geograficzną, latitude
- reprezentujące szerokość geograficzną.
Tworzenie punktów z ładunkami
REST API (architektura)
PUT /collections/{collection_name}/points
{
"points": [
{
"id": 1,
"vector": [0.05, 0.61, 0.76, 0.74],
"payload": {"city": "Berlin", "price": 1.99}
},
{
"id": 2,
"vector": [0.19, 0.81, 0.75, 0.11],
"payload": {"city": ["Berlin", "Londyn"], "price": 1.99}
},
{
"id": 3,
"vector": [0.36, 0.55, 0.47, 0.94],
"payload": {"city": ["Berlin", "Moskwa"], "price": [1.99, 2.99]}
}
]
}
Ustawianie ładunków
REST API (Schema):
POST /collections/{nazwa_kolekcji}/punkty/ładunek
{
"ładunek": {
"właściwość1": "string",
"właściwość2": "string"
},
"punkty": [
0, 3, 100
]
}
Usuwanie ładunków
Ta metoda usuwa określone klucze ładunków z określonych punktów.
REST API (Schema):
POST /collections/{nazwa_kolekcji}/punkty/ładunek/usuń
{
"klucze": ["kolor", "cena"],
"punkty": [0, 3, 100]
}
Czyszczenie ładunków
Ta metoda usuwa wszystkie klucze ładunków z określonych punktów.
REST API (Schema):
POST /collections/{nazwa_kolekcji}/punkty/ładunek/wyczyść
{
"punkty": [0, 3, 100]
}
Można również użyć
models.FilterSelector
do usuwania punktów spełniających określone warunki filtra, zamiast podawania identyfikatorów.
Indeksowanie ładunków
Aby skutecznie przeprowadzać wyszukiwanie z filtracją, Qdrant umożliwia tworzenie indeksu dla pól ładunku poprzez określenie nazwy i typu pola.
Pola indeksowane również wpływają na indeks wektorowy.
W praktyce zaleca się tworzenie indeksów dla pól, które najbardziej ograniczą wyniki. Na przykład, indeksowanie identyfikatora obiektu będzie bardziej wydajne niż indeksowanie koloru, ponieważ identyfikator obiektu jest unikalny dla każdego rekordu, podczas gdy kolor ma tylko kilka możliwych wartości.
W złożonych zapytaniach dotyczących wielu pól, Qdrant będzie próbował użyć najbardziej restrykcyjnego indeksu najpierw.
Aby utworzyć indeks dla pola, można użyć następującej składni:
REST API (Schema)
PUT /collections/{nazwa_kolekcji}/index
{
"nazwa_pola": "nazwa pola do zindeksowania",
"schema_pola": "keyword"
}
Pola indeksowane są wyświetlane w schemacie ładunku wraz z informacjami o kolekcji API.
Przykładowy schemat ładunku:
{
"payload_schema": {
"właściwość1": {
"typ_danych": "keyword"
},
"właściwość2": {
"typ_danych": "liczba_całkowita"
}
}
}