📣
TiDB Cloud Essential はパブリックプレビュー中です。このページは自動翻訳されたものです。原文はこちらからご覧ください。

フィルタリング



リレーショナル データベースである TiDB は、正確なクエリを実行するためのSQL演算子なフィルタリング条件と柔軟な組み合わせをサポートします。

概要

スカラーフィールドとJSONフィールドの両方でフィルタリングできます。JSONフィールドでのフィルタリングは、ベクター検索のメタデータフィルタリングでよく使用されます。

pytidbは、開発者が AI アプリケーションを効率的に構築できるように設計されています。

pytidb使用する場合、 table.query()table.delete()table.update() 、およびtable.search()メソッドにfiltersパラメータを渡すことでフィルタリングを適用できます。

フィルターパラメータは、 辞書フィルターSQL文字列フィルター 2 つの形式をサポートします。

辞書フィルター

pytidbでは、フィルターパラメータとして演算子を含む Python 辞書を使用して、フィルター条件を定義できます。

フィルターの辞書構造は次のとおりです。

{ "<key>": { "<operator>": <value> }, ... }

例: created_atが 2024-01-01 より大きいレコードをフィルタリングする

table.query({ # The `created_at` is a scalar field with DATETIME type "created_at": { "$gt": "2024-01-01" } })

例: meta.categoryが配列 ["tech", "science"] に含まれるレコードをフィルタリングする

results = ( table.search("some query", search_type="vector") .filter({ # The `meta` is a JSON field, and its value is a JSON object like {"category": "tech"} "meta.category": { "$in": ["tech", "science"] } }) .limit(10) .to_list() )

比較演算子

次の比較演算子を使用してレコードをフィルタリングできます。

オペレーター説明
$eq等しい値
$ne値と等しくない
$gt値より大きい
$gte値以上
$lt値より小さい
$lte値以下

例: user_id 1に等しいレコードをフィルタリングする

{ "user_id": { "$eq": 1 } }

$eq演算子は省略可能です。次のフィルタは前のフィルタと同等です。

{ "user_id": 1 }

包含演算子

次の包含演算子を使用してレコードをフィルタリングできます。

オペレーター説明
$in配列(文字列、整数、または浮動小数点数)
$nin配列内にありません(文字列、整数、浮動小数点数)

例: categoryが配列 ["tech", "science"] に含まれるレコードをフィルタリングする

{ "category": { "$in": ["tech", "science"] } }

論理演算子

論理演算子$and$orを使用して、複数のフィルターを組み合わせることができます。

オペレーター説明
$andリスト内のすべてのフィルターに一致する結果を返します
$orリスト内のいずれかのフィルターに一致する結果を返します

$andまたは$orの構文:

{ "$and|$or": [ { "field_name": { <operator>: <value> } }, { "field_name": { <operator>: <value> } } ... ] }

例: $andを使用して複数のフィルターを組み合わせる:

{ "$and": [ { "created_at": { "$gt": "2024-01-01" } }, { "meta.category": { "$in": ["tech", "science"] } } ] }

SQL文字列フィルター

SQL文字列をfiltersとして使用することもできます。文字列は、 TiDB SQL構文の有効なSQL WHERE句(キーワードWHEREなし)である必要があります。

例: created_atが 2024-01-01 より大きいレコードをフィルタリングする

results = table.query( filters="created_at > '2024-01-01'", limit=10 ).to_list()

例: JSONフィールドmeta.categoryが「tech」に等しいレコードをフィルタリングする

results = table.query( filters="meta->>'$.category' = 'tech'", limit=10 ).to_list()

ANDOR 、括弧を使用して複数の条件を組み合わせたり、TiDB でサポートされているSQL演算子使用したりできます。

このページは役に立ちましたか?