すべてのプロダクト
Search
ドキュメントセンター

DashVector:条件付きフィルタリング

最終更新日:Jan 08, 2025

背景

ほとんどのビジネスシナリオでは、ベクトル類似性検索だけではビジネスニーズを満たすのに不十分であり、最初に特定の条件またはタグによるフィルタリングが必要です。

DashVector は、条件付きフィルタリングとベクトル類似性検索を組み合わせることで、指定されたフィルターに基づいてベクトル検索を実行し、検索効率を向上させます。

条件付きフィルタリングの例

説明
  1. サンプルコードを正しく実行するには、YOUR_API_KEY を実際の API キーに、YOUR_CLUSTER_ENDPOINT を実際のクラスターエンドポイントに置き換える必要があります。

  2. 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
説明

コレクションの作成 トピックの「例」セクションでは、quickstart という名前のコレクションが作成され、3 つのフィールド ({'name': str, 'weight': float, 'age': int}) が定義されています。 DashVector は スキーマフリー であるため、ドキュメントを挿入 する際に、上記サンプルコードの male フィールドのように、コレクション作成時に事前定義されていないフィールドを指定できます。

フィルターによる検索の実行

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 のみをサポートしています。 したがって、データがオーバーフローしないようにする必要があります。

比較演算子

比較演算子は、フィールド 比較演算子 定数 のパターンで比較式を形成するために使用されます。 次の表は、比較演算子と比較式の例を示しています。

演算子

演算子の説明

サポートされているデータ型

式の例

例の 説明

<

より小さい

  • int

  • float

  • age < 10

  • weight < 60.0

  • 年齢が 10 未満の場合、式は True を返します。

  • 体重が 60.0 未満の場合、式は True を返します。

<=

以下

  • int

  • float

  • age <= 10

  • weight <= 60.0

  • 年齢が 10 以下の場合、式は True を返します。

  • 体重が 60.0 以下の場合、式は True を返します。

=

等しい

  • int

  • float

  • bool

  • str

  • age = 10

  • weight = 60.0

  • male = true

  • name = 'lisi'

  • 年齢が 10 と等しい場合、式は True を返します。

  • 体重が 60.0 と等しい場合、式は True を返します。

  • male が true と等しい場合、式は True を返します。

  • 名前が lisi と等しい場合、式は True を返します。

!=

等しくない

  • int

  • float

  • bool

  • str

  • age != 10

  • weight != 60.0

  • male != true

  • name != 'lisi'

  • 年齢が 10 と等しくない場合、式は True を返します。

  • 体重が 60.0 と等しくない場合、式は True を返します。

  • male が true と等しくない場合、式は True を返します。

  • 名前が lisi と等しくない場合、式は True を返します。

>=

以上

  • int

  • float

  • age >= 10

  • weight >= 60.0

  • 年齢が 10 以上の場合、式は True を返します。

  • 体重が 60.0 以上の場合、式は True を返します。

>

より大きい

  • int

  • float

  • age > 10

  • weight > 60.0

  • 年齢が 10 より大きい場合、式は True を返します。

  • 体重が 60.0 より大きい場合、式は True を返します。

文字列演算子

文字列演算子は、フィールド 文字列演算子 定数 のパターンで一致式を形成するために使用されます。 次の表は、文字列演算子と式の例を示しています。

演算子

演算子の説明

サポートされているデータ型

式の例

例の 説明

like

前方一致

  • str

  • name like 'li%'

  • 名前が li で始まる場合、式は True を返します。

論理演算子

論理演算子は、式を組み合わせるために使用されます。 次の表は、論理演算子と式の組み合わせの例を示しています。

演算子

演算子の説明

例の 説明

and

論理積

expr1 and expr2

expr1 と expr2 の両方が True を返す場合、複合式は True を返します。 それ以外の場合、複合式は False を返します。

or

論理和

expr1 or expr2

expr1 と expr2 の両方が False を返す場合、複合式は False を返します。 それ以外の場合、複合式は True を返します。

説明

括弧 (()) を使用して式をグループ化し、複合式のグループ化された要素の優先順位を強制できます。たとえば、expr1 and (expr2 or expr3) という複合式では、(expr2 or expr3) が優先的に評価されます。