ブールクエリは、複数のサブクエリを組み合わせてデータテーブルから行を取得します。Tablestore は、組み合わせた条件を満たす行のみを返します。各サブクエリには、別のブールクエリを含め、任意のクエリタイプを使用できます。
前提条件
-
OTSClient インスタンスが初期化されている必要があります。詳細については、「OTSClient インスタンスの初期化」をご参照ください。
-
データテーブルが作成され、データが書き込まれている必要があります。詳細については、「データテーブルの作成」および「データの書き込み」をご参照ください。
-
データテーブルに対して検索インデックスが作成されます。詳細については、「検索インデックスを作成する」をご参照ください。
パラメーター
|
パラメーター |
説明 |
|
TableName |
データテーブルの名前です。 |
|
IndexName |
検索インデックスの名前。 |
|
MustQueries |
論理 AND 演算子です。このリスト内のすべてのサブクエリに一致する必要があります。すべての条件を満たす行のみが返されます。 |
|
MustNotQueries |
論理 NOT 演算子です。このリスト内のいずれかのサブクエリに一致する行は、結果から除外されます。 |
|
FilterQueries |
フィルターとして適用される論理 AND 演算子です。すべてのサブフィルターを満たす行のみが返されます。MustQueries とは異なり、FilterQueries は関連性スコアを計算しません。Yes/No の一致判定を行うため、完全一致、範囲、数値条件などに適しています。 |
|
ShouldQueries |
論理 OR 演算子です。最低限指定された数以上のサブクエリに一致する行が返されます。より多くのサブクエリに一致すると、その行の関連性スコアが高くなります。MustQueries、MustNotQueries、または FilterQueries の条件が設定されていない場合、少なくとも 1 つの ShouldQuery に一致する必要があります。他の条件が設定されている場合は、ShouldQueries はオプションの関連性スコア向上機能となり、デフォルトの最小一致数は 0 になります。デフォルト値を上書きするには、MinimumShouldMatch を設定してください。 |
|
MinimumShouldMatch |
行が返されるために満たす必要のある ShouldQueries 条件の最小数です。ShouldQueries のみが条件として指定されている場合はデフォルトで 1、MustQueries、MustNotQueries、または FilterQueries の条件も存在する場合はデフォルトで 0 になります。 |
サンプルコード
以下の例では、ブールクエリの構築方法を示します。最初の例では MustQueries を使用してすべての条件を必須とし、2 番目の例では ShouldQueries を使用して少なくとも 1 つの条件を必須としています。
/**
* サブクエリの組み合わせに基づいてブールクエリを実行します。
*/
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"
{
// MustQueries:両方の条件に一致(AND)
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))
}
{
// ShouldQueries:少なくとも 1 つの条件に一致(OR)
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))
}
}
よくある質問
参照
多次元インデックスを使用してデータをクエリする際は、以下のクエリ方法を利用できます:完全一致検索、複数値完全一致検索、完全一致検索、一致検索、フレーズ一致検索、プレフィックス検索、範囲クエリ、ワイルドカード検索、ジオクエリ、ブールクエリ、KNN ベクタークエリ、ネストされたクエリ、およびexists クエリ。ビジネス要件に応じて、多次元インデックスが提供するクエリ方法を使用して多角的にデータをクエリできます。
ソートおよびページング機能を使用して、クエリ条件を満たす行をソートまたはページネーションできます。詳細については、「ソートとページング」をご参照ください。
折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。これにより、指定されたタイプのデータがクエリ結果に 1 回だけ表示されます。詳細については、「折りたたみ(重複排除)」をご参照ください。
データテーブル内のデータを分析したい場合は、Search 操作の集約機能を使用するか、SQL ステートメントを実行できます。たとえば、最小値、最大値、合計値、行の総数を取得できます。詳細については、「集約」および「SQL クエリ」をご参照ください。
クエリ条件を満たすすべての行を取得する必要があり、かつ行のソートが不要な場合は、ParallelScan 操作および ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、「並列スキャンの実行」をご参照ください。