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

Tablestore:ブールクエリ

最終更新日:Dec 28, 2024

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

前提条件

パラメーター

パラメーター

説明

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

参考資料