Tous les produits
Search
Centre de documentation

Tablestore:Boolean query

Dernière mise à jour :Aug 08, 2026

Une requête booléenne combine plusieurs sous-requêtes pour récupérer des lignes d'une table de données. Tablestore renvoie uniquement les lignes satisfaisant l'ensemble des conditions combinées. Chaque sous-requête peut être de n'importe quel type, y compris une autre requête booléenne.

Prérequis

Paramètres

Paramètre

Description

TableName

Nom de la table de données.

IndexName

Nom de l'index de recherche.

MustQueries

Opérateur logique AND. Toutes les sous-requêtes de cette liste doivent correspondre. Seules les lignes satisfaisant toutes les conditions sont renvoyées.

MustNotQueries

Opérateur logique NOT. Les résultats excluent les lignes correspondant à l'une des sous-requêtes de cette liste.

FilterQueries

Opérateur logique AND appliqué comme filtre. Seules les lignes satisfaisant tous les sous-filtres sont renvoyées. Contrairement à MustQueries, FilterQueries ne calcule pas de score de pertinence. Il réalise une correspondance binaire (oui/non), ce qui le rend adapté aux correspondances exactes, aux plages et aux conditions numériques.

ShouldQueries

Opérateur logique OR. Les lignes correspondant au moins au nombre minimal de sous-requêtes sont renvoyées. Plus une ligne correspond à un grand nombre de sous-requêtes, plus son score de pertinence augmente. Si aucune condition MustQueries, MustNotQueries ou FilterQueries n'est définie, au moins une ShouldQuery doit correspondre. Si d'autres conditions sont définies, les ShouldQueries deviennent des boosters de pertinence optionnels avec un minimum par défaut de 0. Définissez MinimumShouldMatch pour remplacer la valeur par défaut.

MinimumShouldMatch

Nombre minimal de conditions ShouldQueries qu'une ligne doit satisfaire pour être renvoyée. La valeur par défaut est 1 lorsque ShouldQueries est la seule condition, et 0 lorsque des conditions MustQueries, MustNotQueries ou FilterQueries sont également présentes.

Exemple de code

Les exemples suivants montrent comment construire une requête booléenne. Le premier utilise MustQueries pour exiger que toutes les conditions soient remplies, tandis que le second utilise ShouldQueries pour exiger qu'au moins une condition soit remplie.

/**
 * Perform a Boolean query based on a combination of subqueries.
 */
func BoolQuery(client *tablestore.TableStoreClient, tableName string, indexName string) {
    searchRequest := &tablestore.SearchRequest{}
    searchRequest.SetTableName(tableName)
    searchRequest.SetIndexName(indexName)

    // Condition 1: range query — Col_Long > 3
    rangeQuery := &search.RangeQuery{}
    rangeQuery.FieldName = "Col_Long"
    rangeQuery.GT(3)

    // Condition 2: match query — Col_Keyword contains "hangzhou"
    matchQuery := &search.MatchQuery{}
    matchQuery.FieldName = "Col_Keyword"
    matchQuery.Text = "hangzhou"

    {
        // MustQueries: both conditions must match (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) // Whether all matching rows were returned
        fmt.Println("TotalCount: ", searchResponse.TotalCount)     // Total rows matching the query
        fmt.Println("RowCount: ", len(searchResponse.Rows))
    }
    {
        // ShouldQueries: at least one condition must match (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) // Whether all matching rows were returned
        fmt.Println("TotalCount: ", searchResponse.TotalCount)     // Total rows matching the query
        fmt.Println("RowCount: ", len(searchResponse.Rows))
    }
}

FAQ

Références

  • Lorsque vous utilisez un index de recherche pour interroger des données, vous pouvez recourir aux méthodes de requête suivantes : requête term, requête terms, requête match all, requête match, requête match phrase, requête prefix, requête range, requête wildcard, requête geo, requête booléenne, requête vectorielle KNN, requête nested et requête exists. Vous pouvez utiliser les méthodes de requête fournies par l'index de recherche pour interroger des données selon plusieurs dimensions, en fonction de vos besoins métier.

    Vous pouvez trier ou paginer les lignes satisfaisant aux conditions de requête en utilisant les fonctionnalités de tri et de pagination. Pour plus d'informations, consultez la rubrique Tri et pagination.

    Vous pouvez utiliser la fonctionnalité de collapse (distinction) pour réduire l'ensemble des résultats en fonction d'une colonne spécifique. Ainsi, les données du type spécifié n'apparaissent qu'une seule fois dans les résultats de la requête. Pour plus d'informations, consultez la rubrique Collapse (déduplication).

  • Si vous souhaitez analyser les données d'une table de données, vous pouvez utiliser la fonctionnalité d'agrégation de l'opération Search ou exécuter des instructions SQL. Par exemple, vous pouvez obtenir les valeurs minimales et maximales, la somme et le nombre total de lignes. Pour plus d'informations, consultez les rubriques Agrégation et Requête SQL.

  • Si vous souhaitez obtenir toutes les lignes satisfaisant aux conditions de requête sans avoir besoin de les trier, vous pouvez appeler les opérations ParallelScan et ComputeSplits pour utiliser la fonctionnalité de scan parallèle. Pour plus d'informations, consultez la rubrique Effectuer un scan parallèle.