ワイルドカードクエリを実行する場合、クエリでアスタリスク (*) および疑問符 (?) ワイルドカード文字を使用してデータを検索できます。アスタリスク (*) は、検索語の前、後、または検索語にある任意の長さの文字列と一致します。疑問符 (?) は、特定の位置にある単一の文字と一致します。文字列は、アスタリスク (*) または疑問符 (?) で始めることができます。たとえば、「table*e」という文字列を検索すると、「tablestore」が一致する可能性があります。
NOT LIKE 演算子を使用する場合は、WildcardQuery を BoolQuery の must_not_queries と共に使用する必要があります。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成およびデータの書き込みを参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成を参照してください。
パラメーター
パラメーター | 説明 |
query | クエリのタイプ。query パラメーターを WildcardQuery に設定します。 |
field_name | クエリする列の名前。 |
value | ワイルドカード文字を含む文字列。文字列の長さは 32 文字を超えることはできません。 |
table_name | データテーブルの名前。 |
index_name | 検索インデックスの名前。 |
limit | クエリで返される最大行数。 |
get_total_count | 一致する行の総数を返すかどうかを指定します。デフォルト値:False。 get_total_count パラメーターを true に設定すると、クエリのパフォーマンスが低下します。 |
ColumnsToGet | クエリ条件を満たす行のすべての列を返すかどうかを指定します。
|
例
次のサンプルコードは、Col_Keyword 列の値が 'tablestor*' パターンに一致する行をクエリする方法の例を示しています。
Python V5.2.1 以降の Tablestore SDK
デフォルトでは、Python V5.2.1 以降の Tablestore SDK を使用してワイルドカードクエリを実行すると、SearchResponse オブジェクトが返されます。次のコードはサンプルリクエストを示しています。
query = WildcardQuery('Col_Keyword', 'tablestor*') 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 = WildcardQuery('Col_Keyword', 'tablestor*') 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 用 Tablestore SDK
5.2.1 より前のバージョンの Python 用 Tablestore SDK を使用してワイルドカードクエリを実行すると、デフォルトで Tuple タイプの結果が返されます。次のサンプルコードはサンプルリクエストを示しています。
query = WildcardQuery('Col_Keyword', 'tablestor*') 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 オペレーションを呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンを参照してください。