AI検索フィルタリングガイド
このページでは、AI Search クエリのフィルター式構文について説明します。標準エンドポイントとストレージ最適化エンドポイントとで、フィルター構文が異なります。
- 標準のエンドポイント はPythonディクショナリを使用し、キーは列名と演算子の両方をエンコードします(例:
{"price <": 200})。 - ストレージに最適化されたエンドポイント は、SQLの
WHERE句に似たフィルタ文字列(たとえば、"price < 200")を使用します。
サポートされている演算子と、クエリ API でフィルターを見つける場所の完全なリファレンスについては、クエリでフィルターを使用するを参照してください。ノートブックの例については、「ノートブックの例」を参照してください。
標準エンドポイント
標準のエンドポイントは、filtersパラメーターを介してsimilarity_search()に渡されるPython辞書を受け入れます。キーは、列名と演算子の両方をエンコードします(例:{"price >": 40000})、同じディクショナリ内の複数のキーはANDロジックと組み合わされます。このセクションでは、サポートされている演算子と既知の制限事項の概要を説明します。
クイック リファレンス
文字列列
オペレーター | 構文 | 例 |
|---|---|---|
完全一致 |
|
|
否定 |
|
|
または (複数の値) |
|
|
トークンベースの |
|
|
ハイフン付きの値 |
|
|
JSONパターン |
|
|
数値列(INT、DOUBLE)
オペレーター | 構文 | 例 |
|---|---|---|
超 |
|
|
以下 |
|
|
以上 |
|
|
整数マッチ |
|
|
範囲 | 辞書に2つのキー |
|
ブーリアン列
オペレーター | 構文 | 例 |
|---|---|---|
真に一致します。 |
|
|
一致はフォールスです |
|
|
配列列
標準エンドポイントはプリミティブなARRAY型に対応しています:ARRAY<STRING>、ARRAY<INT>、ARRAY<BIGINT>、ARRAY<SMALLINT>、ARRAY<TINYINT>、ARRAY<FLOAT>、ARRAY<DOUBLE>、ARRAY<BOOLEAN>、ARRAY<DATE>、ARRAY<TIMESTAMP>。ARRAY<STRUCT> はサポートされていません。
オペレーター | 構文 | 例 |
|---|---|---|
値が含まれています |
|
|
任意の値が含まれています (OR) |
|
|
ANDと別の列 |
|
|
タイムスタンプ列(ネイティブ TIMESTAMP または DATE)
オペレーター | 構文 | 例 |
|---|---|---|
後 |
|
|
タイムスタンプの完全一致 |
|
|
否定 |
|
|
範囲 | 辞書に2つのキー |
|
組み合わせフィルター
1つのdict内の複数のキーは、ANDロジックで結合されます。ORの{"col1 OR col2 op": [v1, v2]}構文を異なるフィールドで使用してください。
パターン | 構文 | 例 |
|---|---|---|
文字列と数値 | 複数のキー |
|
数値+数値 | 複数のキー |
|
文字列+数値+配列 | 複数のキー |
|
文字列、配列、数値 | 複数のキー |
|
文字列と数値とタイムスタンプ | 複数のキー |
|
| 結合キー |
|
JSON | ディクショナリのリスト |
|
| ディクショナリのリスト |
|
制限事項:
制限事項 | 詳細 | 回避策 |
|---|---|---|
|
| インデックス付けとフィルタリングのために、構造体を文字列列に非平坦化します。 |
| 空白で区切られたトークン全体に一致しますが、SQLワイルドカードパターン( | ワイルドカード |
|
|
|
|
| 辞書内で2つのキーを使用してください。たとえば、 |
フィルター内にSQL関数はありません。 |
| SQLフィルタ文字列を備えたストレージ最適化エンドポイントを使用してください。タイムスタンプは、エポック ミリ秒として保存してください。 |
JSON数値フィルタはサポートされていません | 標準エンドポイントでは、ネストされたJSON値を抽出したりキャストしたりすることはできません(例: | JSON文字列に |
重複する辞書キーは警告なしに破棄されます | Pythonでは、辞書内の重複キーに対しては、最後の値のみが保持されます。たとえば、 | 辞書のリストを使用してください: |
ストレージ最適化エンドポイント
ストレージに最適化されたエンドポイントは、filtersパラメーターを介してsimilarity_search()に渡されるSQLのようなフィルタ文字列を受け入れます。このセクションでは、サポートされている演算子と既知の制限事項の概要を説明します。
クイック リファレンス
文字列列
オペレーター | 構文 | 例 |
|---|---|---|
完全一致 |
|
|
否定 |
|
|
または (複数の値) |
|
|
ワイルドカードパターン |
|
|
ハイフン付きの値 |
|
|
JSON 部分文字列一致 |
|
|
数値列(INT、DOUBLE)
オペレーター | 構文 | 例 |
|---|---|---|
超 |
|
|
以下 |
|
|
以上 |
|
|
整数マッチ |
|
|
範囲 |
|
|
ブーリアン列
オペレーター | 構文 | 例 |
|---|---|---|
ブーリアン 真 |
|
|
配列列
配列フィルタリングは、ストレージ最適化エンドポイントではサポートされていません。ARRAY_CONTAINS が BadRequest: Syntax error を発生します。回避策として、配列の値を文字列列に連結し、LIKEを使用してください。例えば:
"body_type LIKE '%sedan%'""body_type LIKE '%hybrid%' OR body_type LIKE '%electric%'"
タイムスタンプ列(ネイティブ TIMESTAMP)
オペレーター | 構文 | 例 |
|---|---|---|
日付以降 |
|
|
範囲 | と結合します |
|
組み合わせフィルター
パターン | 構文 | 例 |
|---|---|---|
文字列と数値 |
|
|
数値+数値 |
|
|
文字列+数値+ |
|
|
|
|
|
タイムスタンプ + 数値 + 文字列 |
|
|
制限事項:
制限事項 | 詳細 | 回避策 |
|---|---|---|
|
| インデックス付けとフィルタリングのために、構造体を文字列列に非平坦化します。 |
|
| 配列の値を文字列の列に連結し、 |
|
|
|
生のタイムスタンプ文字列により、型が一致しません。 |
| 値を |
JSON数値フィルタはサポートされていません |
| インデックス作成時にJSONフィールドを事前にトップレベルの列に抽出し、あるいは、 |
後処理フィルタリング(過剰取得) | 結果はまず関連性でランク付けされ、その後フィルターされます。ほとんどのケースは自動的に処理されますが、まれなシナリオ(主に、 | 候補者プールを広げるには、 |