プレフィックスクエリを実行すると、指定されたプレフィックスに一致するデータをクエリできます。プレフィックス条件に使用される列が TEXT 列の場合、その列はトークン化されます。少なくとも 1 つのトークンが指定されたプレフィックスを含む場合、その行はクエリ条件を満たします。
前提条件
-
OTSClient インスタンスが初期化されている必要があります。詳細については、「Tablestore クライアントの初期化」をご参照ください。
-
データテーブルが作成され、データがデータテーブルに書き込まれます。詳細については、「データテーブルを作成する」および「データを書き込む」をご参照ください。
-
データテーブルの検索インデックスが作成されます。詳細については、「検索インデックスを作成する」をご参照ください。
パラメーター
|
パラメーター |
説明 |
|
field_name |
クエリ対象の列名です。 |
|
prefix |
一致させるプレフィックスです。 列が TEXT 列の場合、まず列がトークン化されます。少なくとも 1 つのトークンが指定されたプレフィックスを含む場合、その行は一致とみなされます。 |
|
query |
クエリタイプです。 |
|
table_name |
データテーブルの名前です。 |
|
index_name |
検索インデックスの名前。 |
|
limit |
1 回のクエリで返される最大行数です。 データを取得せずに一致する行数をカウントするには、このパラメーターを |
|
get_total_count |
クエリ条件に一致する行の総数を返すかどうかを指定します。デフォルト値は このパラメーターを |
|
columns_to_get |
一致する各行に対して返す列を制御します。
|
使用例
以下の例では、Col_Keyword 列の値が tablestore で始まる行をクエリする方法を示します。
-
Tablestore SDK for Python V5.2.1 以降を使用したプレフィックスクエリの実行
Tablestore SDK for Python V5.2.1 以降では、デフォルトで
SearchResponseオブジェクトが返されます。以下のコードはリクエストのサンプルです。query = PrefixQuery('Col_Keyword', 'tablestore') 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) # # 深いページングが必要な場合は、next_token を使用してページング深度の制限を回避します。 # all_rows = [] # next_token = None # # 最初のラウンド # search_response = client.search( # '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', # SearchQuery(query, next_token=next_token, limit=100, get_total_count=True), # columns_to_get=ColumnsToGet(return_type=ColumnReturnType.ALL)) # all_rows.extend(search_response.rows) # # # ループ # while search_response.next_token: # search_response = client.search( # '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', # SearchQuery(query, next_token=search_response.next_token, limit=100, get_total_count=True), # columns_to_get=ColumnsToGet(return_type=ColumnReturnType.ALL)) # all_rows.extend(search_response.rows) # print('Total rows:%s' % len(all_rows))結果をタプル形式で返すには、結果に対して
.v1_response()を呼び出します。query = PrefixQuery('Col_Keyword', 'tablestore') 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() -
Tablestore SDK for Python V5.2.1 より前のバージョンを使用したプレフィックスクエリの実行
Tablestore SDK for Python V5.2.1 より前のバージョンでは、デフォルトで結果がタプル形式で返されます。以下のコードはリクエストのサンプルです。
query = PrefixQuery('Col_Keyword', 'tablestore') 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) )
よくある質問
参考資料
多次元インデックスを使用してデータをクエリする際は、以下のクエリ方法を使用できます:完全一致検索、複数値完全一致検索、完全一致検索、一致検索、フレーズ一致検索、プレフィックスクエリ、範囲クエリ、ワイルドカード検索、ジオクエリ、ブール値クエリ、KNN ベクタークエリ、ネストされたクエリ、およびexists クエリ。ビジネス要件に応じて、多次元インデックスが提供するこれらのクエリ方法を使用して、複数のディメンションからデータをクエリできます。
ソートおよびページング機能を使用して、クエリ条件を満たす行をソートまたはページングできます。詳細については、「ソートとページング」をご参照ください。
折りたたみ (distinct) 機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。これにより、指定されたタイプのデータがクエリ結果に 1 回だけ表示されます。詳細については、「折りたたみ (distinct)」をご参照ください。
データテーブル内のデータを分析したい場合は、Search 操作の集約機能を使用するか、SQL ステートメントを実行できます。たとえば、最小値、最大値、合計値、行数の合計を取得できます。詳細については、「集約」および「SQL クエリ」をご参照ください。
行をソートする必要がなく、クエリ条件を満たすすべての行を取得したい場合は、ParallelScan 操作および ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、「並列スキャン」をご参照ください。