Charge utile
L'une des fonctionnalités importantes de Qdrant est la capacité de stocker des informations supplémentaires en dehors des vecteurs (attributs métier de gestion du stockage). Dans la terminologie de Qdrant, ces informations supplémentaires sont appelées "charge utile".
Qdrant vous permet de stocker n'importe quelle information pouvant être représentée à l'aide de JSON.
Voici un exemple d'une charge utile typique :
{
"name": "veste",
"color": ["rouge", "bleu"],
"quantity": 10,
"price": 11.99,
"location": [
{
"longitude": 52.5200,
"latitude": 13.4050
}
],
"reviews": [
{
"user": "Alice",
"score": 4
},
{
"user": "Bob",
"score": 5
}
]
}
Types de charge utile
En plus de stocker des charges utiles, Qdrant vous permet également de rechercher en fonction de certains types de valeurs. Cette fonctionnalité est implémentée sous la forme de filtres supplémentaires lors du processus de recherche et vous permet d'incorporer une logique personnalisée sur la similarité sémantique.
Pendant le processus de filtrage, Qdrant vérifiera les conditions des valeurs qui satisfont aux critères de filtre. Si le type de valeur stockée ne satisfait pas aux critères de filtre, elle est considérée comme non satisfaisante.
Par exemple, l'application de conditions de plage à des données de type chaîne entraînera une sortie vide.
Cependant, la manipulation des tableaux (valeurs multiples du même type) est légèrement différente. Lorsque nous appliquons des filtres à un tableau, si au moins une valeur dans le tableau satisfait à la condition, le filtre aboutira.
Une discussion détaillée du processus de filtrage est menée dans la section sur le filtrage.
Jetons un coup d'œil aux types de données pris en charge par Qdrant :
Entier
int
- entier 64 bits, allant de -9223372036854775808
à 9223372036854775807
.
Exemples de valeurs int
simple et multiple :
{
"quantity": 10,
"sizes": [35, 36, 38]
}
Flottant
float
- nombre flottant 64 bits.
Exemples de valeurs float
simple et multiple :
{
"price": 11.99,
"rating": [9.1, 9.2, 9.4]
}
Booléen
bool
- valeur binaire. Égal à true
ou false
.
Exemples de valeurs bool
simple et multiple :
{
"delivered": true,
"replies": [false, false, true, false]
}
Mot-clé
keyword
- valeur de chaîne.
Exemples de valeurs keyword
simple et multiple :
{
"name": "Alice",
"friends": [
"Bob",
"Eva",
"Jack"
]
}
Coordonnées Géographiques
geo
est utilisé pour représenter des coordonnées géographiques.
Exemples de valeurs geo
simple et multiple :
{
"location": {
"longitude": 52.5200,
"latitude": 13.4050
},
"cities": [
{
"longitude": 51.5072,
"latitude": 0.1276
},
{
"longitude": 40.7128,
"latitude": 74.0060
}
]
}
Les coordonnées doivent être décrites sous forme d'objet contenant deux champs : longitude
- représentant la longitude, latitude
- représentant la latitude.
Création de points avec charge utile
API REST (architecture)
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", "Londres"], "price": 1.99}
},
{
"id": 3,
"vector": [0.36, 0.55, 0.47, 0.94],
"payload": {"city": ["Berlin", "Moscou"], "price": [1.99, 2.99]}
}
]
}
Configuration des charges utiles
API REST (Schéma) :
POST /collections/{nom_collection}/points/payload
{
"payload": {
"propriété1": "chaîne",
"propriété2": "chaîne"
},
"points": [
0, 3, 100
]
}
Suppression des charges utiles
Cette méthode supprime les clés de charge utile spécifiées des points spécifiés.
API REST (Schéma) :
POST /collections/{nom_collection}/points/payload/delete
{
"clés": ["couleur", "prix"],
"points": [0, 3, 100]
}
Effacement des charges utiles
Cette méthode supprime toutes les clés de charge utile des points spécifiés.
API REST (Schéma) :
POST /collections/{nom_collection}/points/payload/clear
{
"points": [0, 3, 100]
}
Vous pouvez également utiliser
models.FilterSelector
pour supprimer les points qui correspondent à des conditions de filtre données, au lieu de fournir des IDs.
Indexation des charges utiles
Pour effectuer efficacement des recherches filtrées, Qdrant vous permet de créer un index pour les champs de charge utile en spécifiant le nom et le type du champ.
Les champs indexés ont également un impact sur l'index vectoriel.
En pratique, il est recommandé de créer des index sur les champs qui sont susceptibles de restreindre le plus les résultats. Par exemple, l'indexation sur l'identifiant d'objet sera plus efficace que l'indexation sur la couleur, car l'identifiant d'objet est unique pour chaque enregistrement, tandis que la couleur n'a que quelques valeurs possibles.
Dans les requêtes composites impliquant plusieurs champs, Qdrant tentera d'utiliser d'abord l'index le plus restrictif.
Pour créer un index pour un champ, on peut utiliser ce qui suit :
API REST (Schéma)
PUT /collections/{nom_collection}/index
{
"field_name": "nom du champ à indexer",
"field_schema": "mot-clé"
}
Les champs indexés sont affichés dans le schéma de charge utile, en association avec l'API informations de la collection.
Exemple de schéma de charge utile :
{
"payload_schema": {
"propriété1": {
"data_type": "mot-clé"
},
"propriété2": {
"data_type": "entier"
}
}
}