ブールクエリは、サブクエリの組み合わせに基づいてデータテーブル内のデータを取得します。Tablestore は、サブクエリに一致する行を返します。サブクエリは、ブールクエリを含む任意のタイプにすることができます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化 を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成 および データの書き込み を参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成 を参照してください。
パラメーター
パラメーター | 説明 |
TableName | データテーブルの名前。 |
IndexName | 検索インデックスの名前。 |
MustQueries | クエリ結果が一致する必要があるサブクエリのリスト。このパラメーターは AND 演算子と同等です。 |
MustNotQueries | クエリ結果が一致してはならないサブクエリのリスト。このパラメーターは NOT 演算子と同等です。 |
FilterQueries | サブクエリのリスト。すべてのサブフィルターを満たす行のみが返されます。フィルターはクエリに似ていますが、フィルターは行が満たすサブフィルターの数に基づいて関連性スコアを計算しない点が異なります。 |
ShouldQueries | サブクエリのリスト。指定されたサブクエリ条件の最小数に一致する行が返されます。サブクエリは OR 関係にあります。 ShouldQueries パラメーターで指定された最小数のサブクエリ条件を少なくとも満たす行のみが返されます。 全体的な関連性スコアが高いほど、ShouldQueries パラメーターで指定されたより多くのサブクエリ条件が満たされていることを示します。 |
MinimumShouldMatch | 返される行が満たす必要がある、ShouldQueries パラメーターで指定されたサブクエリ条件の最小数。ShouldQueries で指定されたサブクエリ条件以外のサブクエリ条件が指定されていない場合、MinimumShouldMatch パラメーターのデフォルト値は 1 です。MustQueries、MustNotQueries、または FilterQueries パラメーターで指定されたサブクエリ条件など、他のサブクエリ条件が指定されている場合、MinimumShouldMatch パラメーターのデフォルト値は 0 です。 |
サンプルコード
次のサンプルコードは、サブクエリの組み合わせに基づいてブールクエリを実行する方法の例を示しています。
/**
* サブクエリの組み合わせに基づいてブールクエリを実行します。
*/
func BoolQuery(client *tablestore.TableStoreClient, tableName string, indexName string) {
searchRequest := &tablestore.SearchRequest{}
searchRequest.SetTableName(tableName)
searchRequest.SetIndexName(indexName)
/**
* 条件 1: 範囲クエリを実行して、Col_Long 列の値が 3 より大きい行をクエリします。
*/
rangeQuery := &search.RangeQuery{}
rangeQuery.FieldName = "Col_Long"
rangeQuery.GT(3)
/**
* 条件 2: 一致クエリを実行して、Col_Keyword 列の値が hangzhou である行をクエリします。
*/
matchQuery := &search.MatchQuery{}
matchQuery.FieldName = "Col_Keyword"
matchQuery.Text = "hangzhou"
{
/**
* 行がクエリ条件 1 とクエリ条件 2 の両方を満たす必要があるブールクエリを構築します。
*/
boolQuery := &search.BoolQuery{
MustQueries: []search.Query{
rangeQuery,
matchQuery,
},
}
searchQuery := search.NewSearchQuery()
searchQuery.SetQuery(boolQuery)
searchRequest.SetSearchQuery(searchQuery)
searchResponse, err := client.Search(searchRequest)
if err != nil {
fmt.Printf("%#v", err)
return
}
fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // クエリ条件を満たすすべての行が返されたかどうかを確認します。
fmt.Println("TotalCount: ", searchResponse.TotalCount) // 返された行の数ではなく、クエリ条件を満たす行の総数を表示します。
fmt.Println("RowCount: ", len(searchResponse.Rows))
}
{
/**
* 行がクエリ条件 1 とクエリ条件 2 の少なくとも一方を満たすブールクエリを構築します。
*/
boolQuery := &search.BoolQuery{
ShouldQueries: []search.Query{
rangeQuery,
matchQuery,
},
MinimumShouldMatch: proto.Int32(1),
}
searchQuery := search.NewSearchQuery()
searchQuery.SetQuery(boolQuery)
searchRequest.SetSearchQuery(searchQuery)
searchResponse, err := client.Search(searchRequest)
if err != nil {
fmt.Printf("%#v", err)
return
}
fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // クエリ条件を満たすすべての行が返されたかどうかを確認します。
fmt.Println("TotalCount: ", searchResponse.TotalCount) // 返された行の数ではなく、クエリ条件を満たす行の総数を表示します。
fmt.Println("RowCount: ", len(searchResponse.Rows))
}
}
FAQ
参考資料
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます。タームクエリ、タームズクエリ、すべて一致クエリ、一致クエリ、一致フレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、ジオクエリ、ブールクエリ、KNNベクトル クエリ、ネストされたクエリ、存在クエリ。検索インデックスによって提供されるクエリメソッドを使用して、ビジネス要件に基づいて複数のディメンションからデータをクエリできます。
ソート機能とページング機能を使用して、クエリ条件を満たす行をソートまたはページングできます。詳細については、ソートとページング を参照してください。
折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。このようにして、指定されたタイプのデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ(重複排除) を参照してください。
データテーブル内のデータを分析する場合は、Search 操作の集計機能を使用するか、SQL ステートメントを実行できます。たとえば、最小値、最大値、合計、行の総数などを取得できます。詳細については、集計 および SQL クエリ を参照してください。
行をソートする必要なく、クエリ条件を満たすすべての行を取得する場合は、ParallelScan 操作と ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンの実行 を参照してください。