メタデータフィルター
Mastra は、すべてのベクトルストアで統一されたメタデータフィルタリング構文を提供しており、MongoDB/Sift クエリ構文に基づいています。各ベクトルストアは、これらのフィルターを自分たちのネイティブな形式に変換します。
基本的な例
import { PgVector } from "@mastra/pg";
const store = new PgVector({ connectionString });
const results = await store.query({
indexName: "my_index",
queryVector: queryVector,
topK: 10,
filter: {
category: "electronics", // Simple equality
price: { $gt: 100 }, // Numeric comparison
tags: { $in: ["sale", "new"] }, // Array membership
},
});
サポートされている演算子
基本比較
演算子 | 説明 | 例 | サポート |
---|---|---|---|
$eq | 指定された値と等しい値にマッチ |
| Couchbase以外すべて |
$ne | 等しくない値にマッチ |
| Couchbase以外すべて |
$gt | より大きい |
| Couchbase以外すべて |
$gte | 以上 |
| Couchbase以外すべて |
$lt | より小さい |
| Couchbase以外すべて |
$lte | 以下 |
| Couchbase以外すべて |
配列演算子
演算子 | 説明 | 例 | サポート |
---|---|---|---|
$in | 配列内の任意の値にマッチ |
| Couchbase以外すべて |
$nin | いずれの値にもマッチしない |
| Couchbase以外すべて |
$all | すべての要素を含む配列にマッチ |
| AstraPineconeUpstashMongoDB |
$elemMatch | 条件を満たす配列要素にマッチ |
| LibSQLPgVectorMongoDB |
論理演算子
演算子 | 説明 | 例 | サポート |
---|---|---|---|
$and | 論理AND |
| Vectorize、Couchbase以外すべて |
$or | 論理OR |
| Vectorize、Couchbase以外すべて |
$not | 論理NOT |
| AstraQdrantUpstashPgVectorLibSQLMongoDB |
$nor | 論理NOR |
| QdrantUpstashPgVectorLibSQLMongoDB |
要素演算子
演算子 | 説明 | 例 | サポート |
---|---|---|---|
$exists | フィールドを持つドキュメントにマッチ |
| Vectorize、Chroma、Couchbase以外すべて |
カスタムオペレーター
演算子 | 説明 | 例 | サポート |
---|---|---|---|
$contains | テキストが部分文字列を含む |
| UpstashLibSQLPgVector |
$regex | 正規表現による一致 |
| QdrantPgVectorUpstashMongoDB |
$size | 配列の長さをチェック |
| AstraLibSQLPgVectorMongoDB |
$geo | 地理空間クエリ |
| Qdrant |
$datetime | 日時範囲クエリ |
| Qdrant |
$hasId | ベクターIDの存在チェック |
| Qdrant |
$hasVector | ベクターの存在チェック |
| Qdrant |
共通ルールと制限事項
-
フィールド名は以下のことができません:
- ネストされたフィールドを参照する場合を除き、ドット(.)を含むこと
- $で始まる、またはヌル文字を含むこと
- 空文字列であること
-
値は以下でなければなりません:
- 有効なJSON型(文字列、数値、真偽値、オブジェクト、配列)
- undefinedでないこと
- 演算子に対して適切な型であること(例:数値比較には数値)
-
論理演算子:
- 有効な条件を含む必要があります
- 空であってはなりません
- 適切にネストされている必要があります
- トップレベル、または他の論理演算子内でのみ使用可能です
- フィールドレベルやフィールド内でネストして使用することはできません
- 演算子内で使用することはできません
- 有効:
{ "$and": [{ "field": { "$gt": 100 } }] }
- 有効:
{ "$or": [{ "$and": [{ "field": { "$gt": 100 } }] }] }
- 無効:
{ "field": { "$and": [{ "$gt": 100 }] } }
- 無効:
{ "field": { "$gt": { "$and": [{...}] } } }
-
$not演算子:
- オブジェクトでなければなりません
- 空であってはなりません
- フィールドレベルまたはトップレベルで使用可能です
- 有効:
{ "$not": { "field": "value" } }
- 有効:
{ "field": { "$not": { "$eq": "value" } } }
-
演算子のネスト:
- 論理演算子はフィールド条件を含む必要があり、直接演算子を含んではいけません
- 有効:
{ "$and": [{ "field": { "$gt": 100 } }] }
- 無効:
{ "$and": [{ "$gt": 100 }] }
ストア固有の注意事項
Astra
- ネストされたフィールドクエリはドット記法を使用してサポートされています
- 配列フィールドはメタデータで明示的に配列として定義する必要があります
- メタデータ値は大文字小文字を区別します
ChromaDB
- Whereフィルターは、フィルターされたフィールドがメタデータに存在する結果のみを返します
- 空のメタデータフィールドはフィルター結果に含まれません
- 負のマッチング(例:$neはフィールドが欠落しているドキュメントにマッチしません)にはメタデータフィールドが存在する必要があります
Cloudflare Vectorize
- フィルタリングを使用する前に明示的なメタデータインデックス作成が必要です
- フィルターしたいフィールドをインデックス化するには
createMetadataIndex()
を使用してください - Vectorizeインデックスあたり最大10個のメタデータインデックス
- 文字列値は最初の64バイトまでインデックス化されます(UTF-8境界で切り捨て)
- 数値はfloat64精度を使用します
- フィルターJSONは2048バイト未満である必要があります
- フィールド名にドット(.)を含めたり、$で始めることはできません
- フィールド名は512文字に制限されています
- 新しいメタデータインデックスを作成した後、フィルターされた結果に含めるためにベクターを再アップサートする必要があります
- 範囲クエリは非常に大きなデータセット(約1000万以上のベクター)では精度が低下する可能性があります
LibSQL
- ドット記法を使用したネストされたオブジェクトクエリをサポートします
- 配列フィールドは有効なJSON配列を含むことを確認するために検証されます
- 数値比較は適切な型処理を維持します
- 条件内の空の配列は適切に処理されます
- メタデータは効率的なクエリのためにJSONB列に格納されます
PgVector
- PostgreSQLのネイティブJSONクエリ機能を完全サポートします
- ネイティブ配列関数を使用した配列操作の効率的な処理
- 数値、文字列、ブール値の適切な型処理
- ネストされたフィールドクエリは内部的にPostgreSQLのJSONパス構文を使用します
- メタデータは効率的なインデックス化のためにJSONB列に格納されます
Pinecone
- メタデータフィールド名は512文字に制限されています
- 数値は±1e38の範囲内である必要があります
- メタデータ内の配列は合計サイズが64KBに制限されています
- ネストされたオブジェクトはドット記法で平坦化されます
- メタデータの更新はメタデータオブジェクト全体を置き換えます
Qdrant
- ネストされた条件を持つ高度なフィルタリングをサポートします
- ペイロード(メタデータ)フィールドはフィルタリングのために明示的にインデックス化する必要があります
- 地理空間クエリの効率的な処理
- null値と空の値の特別な処理
- ベクター固有のフィルタリング機能
- 日時値はRFC 3339形式である必要があります
Upstash
- メタデータフィールドキーは512文字制限があります
- クエリサイズは制限されています(大きなIN句は避けてください)
- フィルター内のnull/undefined値はサポートされていません
- 内部的にSQL風の構文に変換されます
- 大文字小文字を区別する文字列比較
- メタデータの更新はアトミックです
MongoDB
- メタデータフィルターのためのMongoDB/Siftクエリ構文を完全サポートします
- すべての標準的な比較、配列、論理、要素演算子をサポートします
- メタデータ内のネストされたフィールドと配列をサポートします
- フィルタリングは
filter
とdocumentFilter
オプションを使用して、それぞれmetadata
と元のドキュメントコンテンツの両方に適用できます filter
はメタデータオブジェクトに適用され、documentFilter
は元のドキュメントフィールドに適用されます- フィルターサイズや複雑さに人為的な制限はありません(MongoDBクエリ制限の対象)
- 最適なパフォーマンスのためにメタデータフィールドのインデックス化が推奨されます
Couchbase
- 現在、メタデータフィルターのサポートはありません。フィルタリングは結果を取得した後にクライアント側で行うか、より複雑なクエリについてはCouchbase SDKのSearch機能を直接使用する必要があります。