Exists クエリは、NULL クエリまたは NULL 値クエリとも呼ばれます。このクエリは、スパースデータで使用され、行の列が存在するかどうかを判断します。たとえば、住所列の値が空でない行をクエリできます。
列に空の値が含まれているかどうかを確認するには、ExistsQuery を BoolQuery の must_not_queries と共に使用する必要があります。
次のいずれかの条件が満たされている場合、システムは列が存在しないと見なします。この例では、city 列を使用します。
検索インデックスの city 列のタイプが、keyword などの基本タイプである場合。データテーブルに city 列が存在しない行がある場合、検索インデックスは city 列が存在しないと見なします。
検索インデックスの city 列のタイプが、keyword などの基本タイプである場合。データテーブルの city 列の値が空の配列である行 ("city" = "[]") がある場合、検索インデックスは city 列が存在しないと見なします。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成とデータの書き込みを参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成を参照してください。
パラメーター
パラメーター | 説明 |
field_name | クエリ対象の列の名前。 |
query | クエリタイプ。このパラメーターを ExistsQuery に設定します。 |
get_total_count | クエリ条件を満たす行の総数を返すかどうかを指定します。このパラメーターのデフォルト値は false で、クエリ条件を満たす行の総数は返されません。 このパラメーターを true に設定すると、クエリのパフォーマンスが低下します。 |
table_name | データテーブルの名前。 |
index_name | 検索インデックスの名前。 |
columns_to_get | クエリ条件を満たす各行のすべての列を返すかどうかを指定します。このパラメーターには、return_type フィールドと column_names フィールドを設定できます。
|
例
次の例は、city 列の値が空でない行をクエリする方法を示しています。
Python SDK V5.2.1 以降を使用して Exists クエリを実行する
Python SDK V5.2.1 以降を使用して Exists クエリを実行する場合、デフォルトで SearchResponse オブジェクトが返されます。次のコードはリクエストの例です。
query = ExistsQuery("city") search_response = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) ) print('request_id : %s' % search_response.request_id) print('is_all_succeed : %s' % search_response.is_all_succeed) print('total_count : %s' % search_response.total_count) print('rows : %s' % search_response.rows)
次のリクエスト例を使用して、タプル型の結果を返すことができます。
query = ExistsQuery("city") rows, next_token, total_count, is_all_succeed, agg_results, group_by_results = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) ).v1_response()
5.2.1 より前のバージョンの Python SDK を使用して Exists クエリを実行する
5.2.1 より前のバージョンの Python SDK を使用して Exists クエリを実行する場合、デフォルトでタプル型の結果が返されます。次のコードはリクエストの例です。
query = ExistsQuery("city") rows, next_token, total_count, is_all_succeed = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) )
FAQ
参考資料
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます:タームクエリ、タームズクエリ、マッチオールクエリ、マッチクエリ、マッチフレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、ジオクエリ、ブールクエリ、KNNベクトル検索、ネストクエリ、Exists クエリ。ビジネス要件に基づいて、検索インデックスが提供するクエリメソッドを使用して、多次元からデータをクエリできます。
並べ替え機能とページング機能を使用して、クエリ条件を満たす行を並べ替えたり、ページネーションしたりできます。詳細については、並べ替えとページングを参照してください。
集約 (個別) 機能を使用して、特定の列に基づいて結果セットを集約できます。これにより、指定されたタイプのデータはクエリ結果に一度だけ表示されます。詳細については、集約 (個別)を参照してください。
データテーブルのデータを分析する場合は、Search オペレーションの集約機能を使用するか、SQL ステートメントを実行できます。たとえば、最小値、最大値、合計、行の総数などを取得できます。詳細については、集約とSQL クエリを参照してください。
行を並べ替えることなく、クエリ条件を満たすすべての行を取得する場合は、ParallelScan オペレーションと ComputeSplits オペレーションを呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンを参照してください。