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

Tablestore:ブールクエリ

最終更新日:Dec 28, 2024

ブールクエリは、サブクエリの組み合わせに基づいてデータテーブル内のデータを取得します。Tablestore は、サブクエリに一致する行を返します。サブクエリは、ブールクエリを含む任意のタイプにすることができます。

前提条件

パラメーター

パラメーター

説明

must_queries

サブクエリのリスト。すべてのサブクエリの条件を満たす行のみが返されます。このパラメーターは AND 演算子と同等です。

must_not_queries

サブクエリのリスト。いずれのサブクエリの条件も満たさない行のみが返されます。このパラメーターは NOT 演算子と同等です。

filter_queries

サブクエリのリスト。すべてのサブフィルターに一致する行のみが返されます。フィルターは、行が一致するサブフィルターの数に基づいて関連性スコアを計算しないことを除いて、クエリに似ています。

should_queries

クエリ結果が一致する、または一致しない可能性のあるサブクエリのリスト。このパラメーターは OR 演算子と同等です。

should_queries で指定された最小数のサブクエリの条件を満たす行のみが返されます。

全体的な関連性スコアが高いほど、should_queries パラメーターで指定されたサブクエリの条件がより多く満たされていることを示します。

minimum_should_match

返される行が満たす必要がある should_queries パラメーターで指定されたサブクエリの条件の最小数。should_queries パラメーターのみを使用してサブクエリの条件を指定する場合、minimum_should_match パラメーターのデフォルト値は 1 です。must_queries、must_not_queries、および filter_queries パラメーターの 1 つ以上も使用してサブクエリの条件を指定する場合、minimum_should_match パラメーターのデフォルト値は 0 です。

table_name

データテーブルの名前。

index_name

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

次のサンプルコードは、ブールクエリを実行する方法の例を示しています。

  • Python V5.2.1 以降向けの Tablestore SDK

    デフォルトでは、Python V5.2.1 以降向けの Tablestore SDK を使用してブールクエリを実行すると、SearchResponse オブジェクトが返されます。次のコードはサンプルリクエストを示しています。

    # Col_Keyword > 'key100' and (Col_Long > 110 and Col_Long < 200) and not (Col_Keyword = 'key121') and
    # should_queries(Col_Keyword > 'key120' or Col_Long < 300, minimum_should_match = 2)
    # Col_Keyword > 'key100' かつ (Col_Long > 110 かつ Col_Long < 200) かつ not (Col_Keyword = 'key121') かつ
    # should_queries(Col_Keyword > 'key120' または Col_Long < 300, minimum_should_match = 2)
    
    
    

    次のサンプルリクエストを使用して、Tuple 型の結果を返すことができます。

    # Col_Keyword > 'key100' and (Col_Long > 110 and Col_Long < 200) and not (Col_Keyword = 'key121') and 
    # should_queries(Col_Keyword > 'key120' or Col_Long < 300, minimum_should_match = 2)
    # Col_Keyword が 'key100' より大きく、(Col_Long が 110 より大きく 200 より小さく) 、(Col_Keyword が 'key121' と等しくない) 、
    # should_queries(Col_Keyword が 'key120' より大きい、または Col_Long が 300 より小さい、minimum_should_match = 2)
    bool_query = BoolQuery(
        must_queries=[
            RangeQuery('Col_Keyword', range_from='key100', include_lower=False),
            # BoolQuery を使用します。
            BoolQuery(
                # すべてのフィルタリング条件を満たすデータを取得するために、サブクエリを設定します。
                must_queries=[
                    RangeQuery('Col_Long', range_from=110, include_lower=False),
                    RangeQuery('Col_Long', range_to=200, include_upper=False)
                ],
            )
        ],
        # すべてのフィルタリング条件を満たすデータを除外するために、サブクエリを設定します。
        must_not_queries=[
            TermQuery('Col_Keyword', 'key121')
        ],
        should_queries=[
            RangeQuery('Col_Keyword', range_from='key120', include_lower=False),
            RangeQuery('Col_Long', range_to=300, include_upper=130)
        ],
        minimum_should_match=2
    )
    # sort、limit、get_total_count などのクエリパラメータを指定して、ブールクエリを構築します。
    rows, next_token, total_count, is_all_succeed, agg_results, group_by_results = client.search(
        '<TABLE_NAME>', '<SEARCH_INDEX_NAME>',
        SearchQuery(
            bool_query,
            sort=Sort(sorters=[FieldSort('Col_Long', SortOrder.ASC)]),
            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 型の結果が返されます。次のサンプルコードは、サンプルリクエストを示しています。

    # Col_Keyword > 'key100' and (Col_Long > 110 and Col_Long < 200) and not (Col_Keyword = 'key121') and 
    # should_queries(Col_Keyword > 'key120' or Col_Long < 300, minimum_should_match = 2)
    # Col_Keyword > 'key100' かつ (Col_Long > 110 かつ Col_Long < 200) かつ not (Col_Keyword = 'key121') かつ
    # should_queries(Col_Keyword > 'key120' または Col_Long < 300, minimum_should_match = 2)
    bool_query = BoolQuery(
        must_queries=[
            RangeQuery('Col_Keyword', range_from='key100', include_lower=False),
            # BoolQuery を使用します。
            BoolQuery(
                # すべてのフィルタリング条件を満たすデータを取得するために、サブクエリを設定します。
                must_queries=[
                    RangeQuery('Col_Long', range_from=110, include_lower=False),
                    RangeQuery('Col_Long', range_to=200, include_upper=False)
                ],
            )
        ],
        # すべてのフィルタリング条件を満たすデータを除外するために、サブクエリを設定します。
        must_not_queries=[
            TermQuery('Col_Keyword', 'key121')
        ],
        should_queries=[
            RangeQuery('Col_Keyword', range_from='key120', include_lower=False),
            RangeQuery('Col_Long', range_to=300, include_upper=130)
        ],
        minimum_should_match=2
    )
    # 並べ替え、制限、get_total_count などのクエリパラメータを指定して、ブールクエリを構築します。
    rows, next_token, total_count, is_all_succeed = client.search(
        '<TABLE_NAME>', '<SEARCH_INDEX_NAME>',
        SearchQuery(
            bool_query,
            sort=Sort(sorters=[FieldSort('Col_Long', SortOrder.ASC)]),
            limit=100,
            get_total_count=True),
        ColumnsToGet(return_type=ColumnReturnType.ALL)
    )

FAQ

参照情報