すべてのプロダクト
Search
ドキュメントセンター

Tablestore:ワイルドカードクエリ

最終更新日:Dec 28, 2024

ワイルドカードクエリを実行する場合、クエリでアスタリスク (*) および疑問符 (?) ワイルドカード文字を使用してデータを検索できます。アスタリスク (*) は、検索語の前、後、または検索語にある任意の長さの文字列と一致します。疑問符 (?) は、特定の位置にある単一の文字と一致します。文字列は、アスタリスク (*) または疑問符 (?) で始めることができます。たとえば、「table*e」という文字列を検索すると、「tablestore」が一致する可能性があります。

説明

NOT LIKE 演算子を使用する場合は、WildcardQuery を BoolQuery の must_not_queries と共に使用する必要があります。

前提条件

パラメーター

パラメーター

説明

query

クエリのタイプ。query パラメーターを WildcardQuery に設定します。

field_name

クエリする列の名前。

value

ワイルドカード文字を含む文字列。文字列の長さは 32 文字を超えることはできません。

table_name

データテーブルの名前。

index_name

検索インデックスの名前。

limit

クエリで返される最大行数。

get_total_count

一致する行の総数を返すかどうかを指定します。デフォルト値:False。

get_total_count パラメーターを true に設定すると、クエリのパフォーマンスが低下します。

ColumnsToGet

クエリ条件を満たす行のすべての列を返すかどうかを指定します。

  • return_type パラメーターを ColumnReturnType.SPECIFIED に設定する場合は、返す列を指定する必要があります。

  • return_type を ColumnReturnType.ALL に設定すると、すべての列が返されます。

  • return_type を ColumnReturnType.NONE に設定すると、プライマリキー列のみが返されます。

次のサンプルコードは、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

参考資料