背景
ほとんどのビジネスシナリオでは、ベクトル類似性検索だけではビジネスニーズを満たすのに不十分であり、最初に特定の条件またはタグによるフィルタリングが必要です。
DashVector は、条件付きフィルタリングとベクトル類似性検索を組み合わせることで、指定されたフィルターに基づいてベクトル検索を実行し、検索効率を向上させます。
条件付きフィルタリングの例
サンプルコードを正しく実行するには、YOUR_API_KEY を実際の API キーに、YOUR_CLUSTER_ENDPOINT を実際のクラスターエンドポイントに置き換える必要があります。
quickstartという名前のコレクションを事前に作成する必要があります。 詳細については、コレクションの作成 トピックの「例」セクションをご参照ください。
フィールド付きデータの挿入
import dashvector
import numpy as np
client = dashvector.Client(
api_key='YOUR_API_KEY',
endpoint='YOUR_CLUSTER_ENDPOINT'
)
collection = client.get(name='quickstart')
ret = collection.insert([
('1', np.random.rand(4), {'name':'zhangsan', 'age': 10, 'male': True, 'weight': 35.0}),
('2', np.random.rand(4), {'name':'lisi', 'age': 20, 'male': False, 'weight': 45.0}),
('3', np.random.rand(4), {'name':'wangwu', 'age': 30, 'male': True, 'weight': 75.0}),
('4', np.random.rand(4), {'name':'zhaoliu', 'age': 5, 'male': False, 'weight': 18.0}),
('5', np.random.rand(4), {'name':'sunqi', 'age': 40, 'male': True, 'weight': 70.0})
])
assert retフィルターによる検索の実行
import dashvector
client = dashvector.Client(
api_key='YOUR_API_KEY',
endpoint='YOUR_CLUSTER_ENDPOINT'
)
collection = client.get(name='quickstart')
# Search for men (male = true) whose age is greater than 18 and whose weight is greater than 65.0.
docs = collection.query(
[0.1, 0.1, 0.1, 0.1],
topk=10,
filter = 'age > 18 and weight > 65.0 and male = true'
)
print(docs)サポートされているデータ型
フィールドについて、DashVector は Python で次の基本データ型をサポートしています。
str
float
int
bool
Python では、int 型はサイズ無制限の整数を表すことができます。 ただし、DashVector は 32 ビット符号付き整数 -2,147,483,648 ~ 2,147,483,647 のみをサポートしています。 したがって、データがオーバーフローしないようにする必要があります。
比較演算子
比較演算子は、フィールド 比較演算子 定数 のパターンで比較式を形成するために使用されます。 次の表は、比較演算子と比較式の例を示しています。
演算子 | 演算子の説明 | サポートされているデータ型 | 式の例 | 例の 説明 |
< | より小さい |
|
|
|
<= | 以下 |
|
|
|
= | 等しい |
|
|
|
!= | 等しくない |
|
|
|
>= | 以上 |
|
|
|
> | より大きい |
|
|
|
文字列演算子
文字列演算子は、フィールド 文字列演算子 定数 のパターンで一致式を形成するために使用されます。 次の表は、文字列演算子と式の例を示しています。
演算子 | 演算子の説明 | サポートされているデータ型 | 式の例 | 例の 説明 |
like | 前方一致 |
|
|
|
論理演算子
論理演算子は、式を組み合わせるために使用されます。 次の表は、論理演算子と式の組み合わせの例を示しています。
演算子 | 演算子の説明 | 例 | 例の 説明 |
and | 論理積 | expr1 and expr2 | expr1 と expr2 の両方が |
or | 論理和 | expr1 or expr2 | expr1 と expr2 の両方が |
括弧 (()) を使用して式をグループ化し、複合式のグループ化された要素の優先順位を強制できます。たとえば、expr1 and (expr2 or expr3) という複合式では、(expr2 or expr3) が優先的に評価されます。