ペイロード
Qdrantの重要な機能の1つは、ベクトルの外部に追加情報を保存できる能力です(ストレージ管理業務属性)。Qdrantの用語では、この追加情報を「ペイロード」と呼びます。
Qdrantを使用すると、JSONを使用して表現できる任意の情報を保存できます。
以下は典型的なペイロードの例です:
{
"name": "jacket",
"color": ["red", "blue"],
"quantity": 10,
"price": 11.99,
"location": [
{
"longitude": 52.5200,
"latitude": 13.4050
}
],
"reviews": [
{
"user": "Alice",
"score": 4
},
{
"user": "Bob",
"score": 5
}
]
}
ペイロードの種類
ペイロードの保存に加えて、Qdrantは特定の種類の値に基づいて検索することも可能です。この機能は検索プロセス中の追加フィルターとして実装されており、意味の類似性の上にカスタムロジックを組み込むことができます。
フィルタリングプロセス中、Qdrantはフィルタ条件を満たす値の条件をチェックします。保存された値の種類がフィルタ条件を満たさない場合、不適格と見なされます。
例えば、文字列データに範囲条件を適用すると空の出力になります。
ただし、配列(同じタイプの複数の値)の処理はわずかに異なります。配列にフィルタを適用する場合、配列中の少なくとも1つの値が条件を満たしている場合、フィルタが成功します。
フィルタリングプロセスの詳細な議論は、フィルタリングセクションで実施されます。
Qdrantでサポートされているデータタイプを見てみましょう:
整数
integer
- -9223372036854775808
から 9223372036854775807
までの範囲を持つ64ビット整数。
単一および複数の integer
値の例:
{
"quantity": 10,
"sizes": [35, 36, 38]
}
浮動小数点
float
- 64ビット浮動小数点数。
単一および複数の float
値の例:
{
"price": 11.99,
"rating": [9.1, 9.2, 9.4]
}
ブール
bool
- 2進値。true
または false
に等しい。
単一および複数の bool
値の例:
{
"delivered": true,
"replies": [false, false, true, false]
}
キーワード
keyword
- 文字列値。
単一および複数の keyword
値の例:
{
"name": "Alice",
"friends": [
"Bob",
"Eva",
"Jack"
]
}
地理座標
geo
は地理座標を表すために使用されます。
単一および複数の geo
値の例:
{
"location": {
"longitude": 52.5200,
"latitude": 13.4050
},
"cities": [
{
"longitude": 51.5072,
"latitude": 0.1276
},
{
"longitude": 40.7128,
"latitude": 74.0060
}
]
}
座標は、longitude
- 経度を表し、latitude
- 緯度を表す2つのフィールドを含むオブジェクトとして記述する必要があります。
ペイロードを使用したポイントの作成
REST API (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", "London"], "price": 1.99}
},
{
"id": 3,
"vector": [0.36, 0.55, 0.47, 0.94],
"payload": {"city": ["Berlin", "Moscow"], "price": [1.99, 2.99]}
}
]
}
ペイロードの設定
REST API(スキーマ):
POST /collections/{collection_name}/points/payload
{
"payload": {
"property1": "string",
"property2": "string"
},
"points": [
0, 3, 100
]
}
ペイロードの削除
このメソッドは指定された点から特定のペイロードキーを削除します。
REST API(スキーマ):
POST /collections/{collection_name}/points/payload/delete
{
"keys": ["color", "price"],
"points": [0, 3, 100]
}
ペイロードのクリア
このメソッドは指定された点からすべてのペイロードキーを削除します。
REST API(スキーマ):
POST /collections/{collection_name}/points/payload/clear
{
"points": [0, 3, 100]
}
また、IDを指定する代わりに、
models.FilterSelector
を使用して、特定のフィルタ条件に一致する点を削除することもできます。
ペイロードのインデックス化
Qdrantは、指定したフィールドの名前とタイプを設定することで、ペイロードフィールドに対するインデックスを作成できるため、効率的なフィルタ検索を実行できます。
インデックス化されたフィールドは、ベクトルインデックスにも影響を与えます。
実際の運用では、結果を最も制限する可能性が高いフィールドにインデックスを作成することが推奨されています。例えば、オブジェクトIDに対するインデックス作成は、色に対するインデックス作成よりも効率的です。なぜなら、オブジェクトIDは各レコードごとに一意であり、色はごく少数の可能な値しか持たないからです。
複数のフィールドを含む複合クエリでは、Qdrantは最も制限的なインデックスを最初に使用しようとします。
フィールドのインデックスを作成するためには、以下のようにします:
REST API(スキーマ)
PUT /collections/{collection_name}/index
{
"field_name": "インデックスを作成するフィールドの名前",
"field_schema": "keyword"
}
インデックス化されたフィールドは、コレクション情報 APIとペイロードスキーマで表示されます。
ペイロードスキーマの例:
{
"payload_schema": {
"property1": {
"data_type": "keyword"
},
"property2": {
"data_type": "integer"
}
}
}