タームクエリを使用すると、指定したキーワードと完全に一致するフィールド値をクエリできます。タームクエリは、文字列照合と同様に機能します。 TEXT 列がクエリされ、行内のトークンの少なくとも 1 つがキーワードと完全に一致する場合、その行はクエリ条件を満たします。キーワードはトークン化されません。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成とデータの書き込みを参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成を参照してください。
パラメーター
パラメーター | 説明 |
query_type | クエリのタイプ。 query_type パラメーターを TermQuery に設定します。 |
field_name | 照合するフィールドの名前。 |
term | タームクエリを実行するときにフィールド値の照合に使用されるキーワード。 このキーワードはトークン化されません。代わりに、キーワード全体がフィールド値の照合に使用されます。 フィールドのタイプが TEXT の場合、Tablestore は文字列をトークン化し、トークンを使用してキーワードを照合します。行内のトークンの少なくとも 1 つがキーワードと完全に一致する場合、その行はクエリ条件を満たします。たとえば、行の TEXT タイプのフィールドの値が "tablestore is cool" の場合、値は "tablestore"、"is"、"cool" にトークン化できます。フィールドの値と照合するキーワードとして "tablestore"、"is"、または "cool" を指定すると、行はクエリ条件を満たします。 |
table_name | データテーブルの名前。 |
index_name | 検索インデックスの名前。 |
limit | クエリで返される行の最大数。 クエリ条件を満たす行の数を特定のデータを返さずにクエリするには、limit を 0 に設定します。 |
get_total_count | クエリ条件を満たす行の総数を返すかどうかを指定します。このパラメーターのデフォルト値は false で、クエリ条件を満たす行の総数は返されません。 このパラメーターを true に設定すると、クエリのパフォーマンスが低下します。 |
columns_to_get | 一致した各行のすべての列を返すかどうかを指定します。このパラメーターには return_type と column_names を設定できます。
|
例
次のサンプルコードは、Col_Keyword 列の値が 'tablestore' キーワードと完全に一致する行をクエリする方法の例を示しています。
Python V5.2.1 以降の Tablestore SDK
デフォルトでは、Python V5.2.1 以降の Tablestore SDK を使用してタームクエリを実行すると、SearchResponse オブジェクトが返されます。次のコードはサンプルリクエストを示しています。
query = TermQuery('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))
次のサンプルリクエストを使用して、Tuple タイプの結果を返すことができます。
query = TermQuery('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()
5.2.1 より前の Tablestore SDK for Python
5.2.1 より前のバージョンの Tablestore SDK for Python を使用してタームクエリを実行すると、デフォルトで Tuple タイプの結果が返されます。次のサンプルコードはサンプルリクエストを示しています。
query = TermQuery('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) )
FAQ
関連情報
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます。 タームクエリ、複数タームクエリ、すべて一致クエリ、一致クエリ、一致フレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、地理クエリ、ブールクエリ、KNNベクトル検索クエリ、ネストされたクエリ、存在クエリ。検索インデックスによって提供されるクエリメソッドを使用して、ビジネス要件に基づいて複数のディメンションからデータをクエリできます。
並べ替えとページング機能を使用して、クエリ条件を満たす行を並べ替えたりページネーションしたりできます。詳細については、並べ替えとページングを参照してください。
折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。これにより、指定されたタイプのデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ(重複排除)を参照してください。
データテーブルのデータを分析する場合は、Search 操作の集計機能を使用するか、SQL ステートメントを実行できます。たとえば、最小値、最大値、合計、行の総数などを取得できます。詳細については、集計とSQL クエリを参照してください。
行を並べ替えることなく、クエリ条件を満たすすべての行を取得する場合は、ParallelScan および ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンを参照してください。