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

DashVector:DashVector を使用したフィルター付き取得

最終更新日:Mar 12, 2026

ベクター類似性検索だけでは、実際の要件を満たせないことがよくあります。アプリケーションでは通常、価格帯内のプロダクトのみを返す、特定のカテゴリのドキュメントのみを返すなど、メタデータによって結果を絞り込む必要があります。DashVector の条件付きフィルタリング機能を使用すると、ベクターにメタデータフィールドをアタッチし、クエリ時に filter 式を渡すことができます。これにより、条件に一致するベクターのみが類似性検索の結果に含まれるようになります。

クイックスタート

この例では、年齢が 18 歳より大きく、体重が 65 kg を超える男性をコレクションからクエリします。

docs = collection.query(
    [0.1, 0.1, 0.1, 0.1],
    topk=10,
    filter='age > 18 and weight > 65.0 and male = true'
)

filter パラメーターは、比較演算子、文字列演算子、論理演算子から構築されるブール式を受け入れます。完全な構文については、「フィルター式の構文」をご参照ください。

前提条件

開始する前に、以下のものがあることを確認してください。

  • DashVector の API キーとクラスターエンドポイント

  • quickstart という名前のコレクション。設定手順については、「コレクションの作成」の「例」セクションをご参照ください。

メタデータフィールドを持つドキュメントの挿入

quickstart コレクションにドキュメントを挿入します。各ドキュメントには、ID、4 次元のベクター、およびメタデータフィールドのセットが含まれます。

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': 'alice', 'age': 10, 'male': True, 'weight': 35.0}),
    ('2', np.random.rand(4), {'name': 'bob', 'age': 20, 'male': False, 'weight': 45.0}),
    ('3', np.random.rand(4), {'name': 'carol', 'age': 30, 'male': True, 'weight': 75.0}),
    ('4', np.random.rand(4), {'name': 'dave', 'age': 5, 'male': False, 'weight': 18.0}),
    ('5', np.random.rand(4), {'name': 'eve', 'age': 40, 'male': True, 'weight': 70.0})
])
assert ret

次のプレースホルダーを実際の値に置き換えてください。

プレースホルダー説明
<your-api-key>ご利用の DashVector API キー
<your-cluster-endpoint>ご利用のクラスターエンドポイント URL
説明

quickstart コレクションは、3 つの事前定義フィールド (name (str)、weight (float)、age (int)) を使用して作成されます。DashVector はスキーマフリーであるため、上記の male フィールドのように、コレクション作成時に定義されていないフィールドをドキュメントの挿入時に追加できます。

フィルター式を使用したクエリ

filter 文字列を collection.query() に渡して、結果を制限します。この例では、年齢が 18 歳より大きく、体重が 65 kg を超える男性を検索します。

import dashvector

client = dashvector.Client(
    api_key='<your-api-key>',
    endpoint='<your-cluster-endpoint>'
)
collection = client.get(name='quickstart')

# フィルター: 18 歳以上で体重が 65 kg を超える男性
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)

フィルター式の構文

フィルター式は、論理演算子で結合された 1 つ以上の条件で構成されます。各条件は次のパターンに従います。

<field> <operator> <value>

比較演算子

演算子説明サポートされている型一致する条件
<より小さいintfloatage < 10age が 10 より小さい
<=以下intfloatweight <= 60.0weight が 60.0 以下
=等しいintfloatboolstrname = 'alice'namealice
!=等しくないintfloatboolstrmale != truemale が true ではない
>=以上intfloatage >= 10age が 10 以上
>より大きいintfloatweight > 60.0weight が 60.0 を超える

文字列演算子

str フィールドで前方一致を行うには、like 演算子を使用します。

オペレーター説明一致する条件
like前方一致name like 'al%'nameal

論理演算子

複数の条件を and または or で組み合わせます。

演算子説明一致する条件
and両方の条件が true である必要があるage > 18 and male = trueage が 18 を超え、かつ male が true である
or少なくとも 1 つの条件が true である必要があるage < 10 or age > 60age が 10 未満、または 60 を超える

括弧 () を使用して評価順序を制御します。例:

age > 18 and (weight > 65.0 or male = true)

この式は、まず (weight > 65.0 or male = true) を評価し、その結果を age > 18 と組み合わせます。

サポートされているフィールドタイプ

DashVector のフィールドは、次の Python データ型をサポートしています。

説明範囲
str文字列--
int整数32 ビット符号付き: -2,147,483,648 ~ 2,147,483,647
float浮動小数点数--
boolブール値True または False
重要

Python の整数はサイズに制限がありませんが、DashVector がサポートするのは 32 ビット符号付き整数のみです。オーバーフローを避けるため、整数値が -2,147,483,648 から 2,147,483,647 の範囲に収まるようにしてください。