コンテンツにスキップ

フィルター演算子

Show:

フィルター演算子を使用すると、メタデータの述語によってバケット検索結果を絞り込むことができます。v2バケット検索リクエストボディでは、filterオブジェクト内に渡します。単純なスカラー値は完全一致のショートカットであり、値を演算子オブジェクトでラップすることで、より豊かな述語を表現できます。

注意: メタデータの値は文字列として保存および比較されます。ブール値は"true"/"false"となり、数値は一致前に文字列に変換されます。

VersionStatusNotes
v2CurrentPOST /v2/buckets/\{bucket_id\}/search。すべての新しい統合に使用します。
v1DeprecatedPOST /v1/buckets/\{bucket_id\}/searchは既存のクライアントのために保持されており、v2の後継を指すDeprecationWarningLinkヘッダーを返します。

POST /v1/buckets/\{bucket_id\}/searchは非推奨であり、このページで文書化されているのと同じfilter演算子を受け入れます。新しい統合はPOST /v2/buckets/\{bucket_id\}/searchを使用してください。

OperatorTypeExampleNotes
eqany{"eq": "urgent"}完全一致。トップレベルのeqはエンジンの高速パスに下げられます。
neany{"ne": "draft"}不一致。ポストフィルターとして適用されます。
likestring{"like": "%legal%"}SQL LIKE: %は任意のシーケンスに一致し、_は1文字に一致します。\% / \_はリテラルです。大文字小文字を区別しません。
prefixstring{"prefix": "2024-"}始まり一致。大文字小文字を区別しません。
inarray{"in": ["a", "b"]}メンバーシップテスト。最大100エントリ。
gt / gtenumber / ISO date{"gte": 0.8}より大きい(または等しい)。
lt / ltenumber / ISO date{"lt": 100}より小さい(または等しい)。
existsboolean{"exists": true}フィールドの存在: trueは存在し非空を意味し、falseは欠落または空を意味します。

各演算子オブジェクトは正確に1つのキーを含む必要があります。単一のフィルターキーは一度に1つの演算子しか使用できません。

異なるメタデータキー間の論理和を表現するには$orを使用します。$orはサブフィルタ辞書のリストを受け入れ、最大3レベルまでネストできます。

{
"filter": {
"doc_type": "policy",
"$or": [
{"severity": "high"},
{"priority": {"in": ["P0", "P1"]}}
]
}
}

トップレベルのキーは依然としてANDです。この例では、doc_type = "policy" AND (severity = "high" OR priority ∈ {"P0", "P1"})に一致するドキュメントを検索します。各アームは完全なサブフィルターであり、任意の演算子を使用できます。単一の$orリストは最大16アームをサポートします。

  • filter内のトップレベルキーは結合的(AND)です。
  • 同じキーのORはin演算子を使用し、クロスキーORは$orを使用します。
  • 完全一致キーはベクトルエンジンにプッシュされてプルーニングされます。演算子キーは返された候補に対してサーバー側で評価されるため、エンジンの高速パスはそのままです。
LimitValue
Max filter JSON size (internal filter query param)8 KB
Max filter nesting depth16
like / prefix pattern length256 characters
like wildcard count (% + _)16
in list length100 entries
$or nesting depth3 levels
$or arms per list16

パターンはアンカー付きの大文字小文字を区別しない正規表現に変換され、すべての正規表現メタ文字がエスケープされるため、SQLインジェクションの表面はありません。

テキストクエリとメタデータフィルターを使用してバケットを検索します。

NameTypeDescription
bucket_idstring検索するバケットのUUIDまたはスラッグ。
FieldTypeRequiredDefaultDescription
querystringYes自然言語クエリ。最大8,192文字。
top_kintegerNo10返す結果の最大数。
filterobjectNonullメタデータの述語。単純な値は完全一致であり、演算子オブジェクトは上記の演算子を使用します。
modestringNo"hybrid""vector"または"hybrid"
rerankbooleanNofalse候補を再ランク付けするかどうか。
min_scorenumberNonull最小スコアのしきい値(0.01.0)。
Terminal window
curl -X POST ${API_BASE_URL:-https://api.schift.io}/v2/buckets/product-docs/search \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "fire safety inspection cycle",
"top_k": 10,
"filter": {
"tag": "urgent",
"source_url": {"like": "%fire-safety%"},
"filename": {"prefix": "2024-"},
"doc_type": {"in": ["policy", "spec"]},
"score": {"gte": 0.8},
"stage": {"ne": "draft"},
"author": {"exists": true},
"$or": [
{"severity": "high"},
{"priority": {"in": ["P0", "P1"]}}
]
}
}'
FieldTypeDescription
bucket_idstring検索されたバケット。
querystring実行されたクエリ。
search_idstring | nullサーバー生成の検索識別子。
resultsarray関連性順に並べられた一致するチャンク。
results[].idstringチャンク識別子。
results[].scorenumber最終的な関連性スコア。
results[].textstringチャンクテキスト。
results[].metadataobjectチャンクメタデータ。
results[].citationstring | null要求された場合のフォーマットされた引用。
degradedboolean応答が劣化モードで生成されたかどうか。
warningsarray検索警告がある場合。
{
"bucket_id": "product-docs",
"query": "fire safety inspection cycle",
"search_id": "srch_01j8x9q2mvk8r",
"results": [
{
"id": "chunk_01j8x9q2mvn9q",
"score": 0.91,
"text": "Annual fire safety inspections must follow the 2024 inspection cycle.",
"metadata": {
"doc_type": "policy",
"filename": "2024-fire-safety.pdf",
"tag": "urgent",
"author": "safety-team"
},
"citation": "[1] 2024-fire-safety.pdf, p. 4"
}
],
"degraded": false,
"warnings": []
}
// 400 Bad Request — invalid operator combination
{
"detail": "FilterOperator must have exactly one of eq/ne/like/prefix/in/gt/gte/lt/lte/exists"
}
// 400 Bad Request — unsupported filter key
{
"detail": "Invalid filter: unsupported metadata key 'internal_tag'"
}
// 413 Payload Too Large — filter exceeds size limit
{
"detail": "filter parameter exceeds 8KB"
}
// 413 Payload Too Large — filter too deeply nested
{
"detail": "filter JSON exceeds nesting depth"
}
// 402 Payment Required — search quota exhausted
{
"allowed": false,
"reason": "quota_exceeded"
}
// 403 Forbidden — search quota unavailable
{
"detail": "Search quota unavailable. Upgrade your plan."
}
// 404 Not Found
{
"detail": "Bucket 'product-docs' not found"
}