ブールクエリは、サブクエリの組み合わせに基づいてデータテーブル内のデータを取得します。Tablestore は、サブクエリに一致する行を返します。サブクエリは、ブールクエリを含む任意のタイプにすることができます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成とデータの書き込みを参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成を参照してください。
パラメーター
パラメーター | 説明 |
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
参照情報
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます。タームクエリ、タームズクエリ、マッチオールクエリ、マッチクエリ、マッチフレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、ジオクエリ、ブールクエリ、KNNベクトル検索クエリ、ネストされたクエリ、存在クエリ。検索インデックスによって提供されるクエリメソッドを使用して、ビジネス要件に基づいて複数のディメンションからデータをクエリできます。
ソート機能とページング機能を使用して、クエリ条件を満たす行をソートまたはページングできます。詳細については、ソートとページングを参照してください。
折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。このようにして、指定されたタイプのデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ(重複排除)を参照してください。
データテーブル内のデータを分析する場合、Search操作の集計機能を使用するか、SQLステートメントを実行できます。たとえば、最小値、最大値、合計、行の総数などを取得できます。詳細については、集計とSQLクエリを参照してください。
行をソートする必要なく、クエリ条件を満たすすべての行を取得する場合、ParallelScan操作とComputeSplits操作を呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンを参照してください。