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

Tablestore:ブールクエリ

最終更新日:Apr 30, 2026

ブールクエリは、複数のサブクエリを組み合わせてデータテーブルから行を取得します。Tablestore は、組み合わせた条件を満たす行のみを返します。各サブクエリには、別のブールクエリを含め、任意のクエリタイプを使用できます。

前提条件

パラメーター

パラメーター

説明

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))
    }
}

よくある質問

参照