Tous les produits
Search
Centre de documentation

Tablestore:Requête booléenne

Dernière mise à jour :Aug 20, 2026

Une requête booléenne avec le SDK Tablestore pour Java combine plusieurs conditions de recherche à l'aide des opérateurs logiques ET, OU et NON, et renvoie les lignes satisfaisant la condition combinée.

Prérequis

Installez le SDK Tablestore pour Java et initialisez un client.

Description de la fonctionnalité

Une requête booléenne utilise BoolQuery pour combiner une ou plusieurs sous-requêtes en une condition de recherche complexe. Une sous-requête peut être de n'importe quel type Query, y compris une autre BoolQuery.

BoolQuery prend en charge les types de clauses suivants :

  • mustQueries : la ligne doit correspondre à toutes les sous-requêtes. Les sous-requêtes correspondantes contribuent au score de pertinence. Ce type de clause équivaut à l'opérateur ET.

  • filterQueries : la ligne doit correspondre à toutes les sous-requêtes, mais celles-ci ne contribuent pas au score de pertinence. Ce type de clause équivaut également à l'opérateur ET.

  • shouldQueries : la ligne doit correspondre au moins au nombre de sous-requêtes spécifié par minShouldMatch. Plus le nombre de sous-requêtes correspondantes est élevé, plus le score de pertinence augmente. Ce type de clause équivaut à l'opérateur OU.

  • mustNotQueries : la ligne ne doit correspondre à aucune sous-requête. Ce type de clause équivaut à l'opérateur NON et ne contribue pas au score de pertinence.

Si minShouldMatch n'est pas configuré et que la requête booléenne contient uniquement des shouldQueries et des mustNotQueries, au moins une sous-requête shouldQueries doit correspondre. Si la requête booléenne contient simultanément des mustQueries ou des filterQueries au même niveau, les sous-requêtes shouldQueries sont facultatives par défaut.

Appelez search pour exécuter une requête booléenne.

SearchResponse search(SearchRequest request)

L'exemple suivant interroge les lignes dont la valeur de city est égale à hangzhou et dont la valeur de category est égale à book. La requête renvoie jusqu'à 10 lignes ainsi que le nombre total de correspondances.

String tableName = "example_table";
String indexName = "example_index";
TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

TermQuery categoryQuery = new TermQuery();
categoryQuery.setFieldName("category");
categoryQuery.setTerm(ColumnValue.fromString("book"));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setMustQueries(Arrays.asList(cityQuery, categoryQuery));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);
searchQuery.setLimit(10);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);

SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
request.setColumnsToGet(columnsToGet);

SearchResponse response = client.search(request);
System.out.println(response.getRows());

Paramètres

Demande de recherche

request est un objet SearchRequest qui contient les paramètres suivants.

Nom

Type

Description

tableName (obligatoire)

String

Nom de la table de données.

indexName (obligatoire)

String

Nom de l'index de recherche.

searchQuery (obligatoire)

SearchQuery

Condition de recherche et paramètres généraux de la requête.

columnsToGet (facultatif)

SearchRequest.ColumnsToGet

Colonnes à renvoyer. Si ce paramètre n'est pas configuré, seules les colonnes de clé primaire sont renvoyées.

timeoutInMillisecond (facultatif)

int

Délai d'expiration de la requête au niveau de la demande, en millisecondes. La valeur par défaut est -1, ce qui signifie qu'aucun délai d'expiration distinct n'est configuré pour la requête.

routingValues (facultatif)

List<PrimaryKey>

Valeurs de clé primaire correspondant aux champs de routage personnalisés. Laissez ce paramètre non défini si le routage personnalisé n'est pas configuré.

Paramètres de la requête

request.searchQuery est un objet SearchQuery qui contient les paramètres suivants.

Nom

Type

Description

query (obligatoire)

Query

Condition de recherche. Définissez ce paramètre sur un objet BoolQuery pour une requête booléenne.

offset (facultatif)

Integer

Position de départ de la requête.

limit (facultatif)

Integer

Nombre maximal de lignes à renvoyer. Définissez ce paramètre sur 0 pour ne renvoyer aucune ligne.

highlight (facultatif)

Highlight

Paramètres de résumé et de mise en surbrillance lorsqu'une sous-requête correspond à un champ Text. Pour plus de détails sur la configuration, consultez Résumé et mise en surbrillance.

collapse (facultatif)

Collapse

Paramètres de regroupement des résultats, qui permettent de dédupliquer les résultats selon un champ spécifié. Pour plus de détails sur la configuration, consultez Regrouper les résultats de la requête.

sort (facultatif)

Sort

Ordre de tri des résultats. Pour plus de détails sur la configuration, consultez Trier et paginer les résultats.

trackTotalCount (facultatif)

int

Nombre maximal attendu de lignes correspondantes à compter. La valeur par défaut est TRACK_TOTAL_COUNT_DISABLED, ce qui désactive le comptage. Définissez ce paramètre sur TRACK_TOTAL_COUNT pour compter toutes les lignes correspondantes. Une valeur plus faible améliore les performances de la requête.

filter (facultatif)

SearchFilter

Filtre appliqué aux résultats de query.

aggregationList (facultatif)

List<Aggregation>

Paramètres d'agrégation. Pour plus de détails sur la configuration, consultez Agrégation.

groupByList (facultatif)

List<GroupBy>

Paramètres de regroupement. Pour plus de détails sur la configuration, consultez Agrégation.

token (facultatif)

byte[]

Jeton de pagination. Définissez ce paramètre sur la valeur nextToken de la réponse précédente pour continuer à lire les lignes. Lorsque vous définissez token, le SDK efface sort car le jeton contient déjà les conditions de tri.

Condition de requête booléenne

request.searchQuery.query est un objet BoolQuery qui contient les paramètres suivants.

Nom

Type

Description

mustQueries (facultatif)

List<Query>

Sous-requêtes auxquelles la ligne doit obligatoirement correspondre. Les sous-requêtes correspondantes contribuent au score de pertinence. Ce type de clause équivaut à l'opérateur ET.

filterQueries (facultatif)

List<Query>

Sous-requêtes auxquelles la ligne doit obligatoirement correspondre. Les sous-requêtes correspondantes ne contribuent pas au score de pertinence. Ce type de clause équivaut à l'opérateur ET.

shouldQueries (facultatif)

List<Query>

Sous-requêtes dont un nombre minimum spécifié doit correspondre. Ce type de clause équivaut à l'opérateur OU. Plus le nombre de sous-requêtes correspondantes est élevé, plus le score de pertinence augmente.

mustNotQueries (facultatif)

List<Query>

Sous-requêtes auxquelles aucune ligne ne doit correspondre. Ce type de clause équivaut à l'opérateur NON et ne contribue pas au score de pertinence.

minShouldMatch (facultatif)

String ou int

Nombre minimum de sous-requêtes shouldQueries devant correspondre. Spécifiez un entier, tel que 2, ou une chaîne de pourcentage, telle que "75%". Si ce paramètre est omis, la valeur par défaut est 0 lorsque mustQueries ou filterQueries existe au même niveau. Dans les autres cas contenant des shouldQueries, la valeur par défaut est 1.

weight (facultatif)

Float

Poids de la requête booléenne. Si ce paramètre est omis, la requête utilise un poids de 1.0. Une valeur plus élevée augmente la contribution de mustQueries et de shouldQueries au score de pertinence final sans modifier les lignes correspondantes.

Remarque

setMinimumShouldMatch(Integer) est obsolète. Utilisez setMinShouldMatch(int) ou setMinShouldMatch(String).

Colonnes renvoyées

request.columnsToGet est un objet SearchRequest.ColumnsToGet qui contient les paramètres suivants.

Nom

Type

Description

columns (facultatif)

List<String>

Colonnes d'attribut à renvoyer. Définissez ce paramètre uniquement si returnAll et returnAllFromIndex sont tous deux définis sur false. Si vous omettez ce paramètre, seules les colonnes de clé primaire sont renvoyées.

returnAll (facultatif)

boolean

Indique s'il faut renvoyer toutes les colonnes d'attribut de la table de données. La valeur par défaut est false.

returnAllFromIndex (facultatif)

boolean

Indique s'il faut renvoyer toutes les colonnes d'attribut indexées. La valeur par défaut est false. Ne définissez pas returnAll et returnAllFromIndex sur true simultanément.

Valeurs de retour

Réponse de recherche

search renvoie un objet SearchResponse. Le tableau suivant décrit les champs principaux.

Nom

Type

Description

totalCount

long

Nombre de lignes correspondantes. Appelez getTotalCount() pour obtenir la valeur. La valeur renvoyée dépend du paramètre trackTotalCount.

rows

List<Row>

Lignes renvoyées par cette requête. Appelez getRows() pour obtenir la valeur. Le nombre de lignes ne dépasse pas limit.

searchHits

List<SearchHit>

Résultats de la requête. Appelez getSearchHits() pour obtenir la valeur. Lisez les scores de pertinence ainsi que les résultats de résumé et de mise en surbrillance à partir de ce champ.

nextToken

byte[]

Jeton de la page suivante. Appelez getNextToken() pour obtenir la valeur. Si la valeur n'est pas null, définissez-la comme token dans la requête suivante pour continuer à lire les lignes.

isAllSuccess

boolean

Indique si toutes les partitions d'index ont été interrogées avec succès. Appelez isAllSuccess() pour obtenir la valeur. Si la valeur est false, la réponse contient des résultats partiels et totalCount peut être inférieur au nombre réel de lignes correspondantes.

Résultat de recherche

response.searchHits[] est un objet SearchHit qui contient les champs principaux suivants.

Nom

Type

Description

row

Row

Ligne correspondante. Appelez getRow() pour obtenir la valeur.

score

Double

Score de pertinence. Appelez getScore() pour obtenir la valeur. Lorsque vous utilisez ScoreSort pour trier par score de pertinence, ce champ contient le score réel.

highlightResultItem

HighlightResultItem

Résultat de résumé et de mise en surbrillance. Appelez getHighlightResultItem() pour obtenir la valeur.

Exemples de scénarios

Correspondance à n'importe quelle condition

Utilisez shouldQueries pour combiner des conditions et minShouldMatch pour spécifier le nombre minimum de conditions devant correspondre. L'exemple suivant interroge les lignes dont la valeur de city est égale à hangzhou ou dont la valeur de category est égale à book.

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

TermQuery categoryQuery = new TermQuery();
categoryQuery.setFieldName("category");
categoryQuery.setTerm(ColumnValue.fromString("book"));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setShouldQueries(Arrays.asList(cityQuery, categoryQuery));
boolQuery.setMinShouldMatch(1);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);

Exclure les lignes correspondant à une condition

Utilisez mustNotQueries pour exclure les lignes correspondant à n'importe quelle condition spécifiée. L'exemple suivant interroge les lignes dont la valeur de city n'est pas égale à hangzhou.

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setMustNotQueries(Collections.singletonList(cityQuery));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);

Filtrer par plusieurs conditions sans calcul de score de pertinence

Utilisez filterQueries pour exiger que toutes les sous-requêtes correspondent sans permettre aux conditions de contribuer au score de pertinence. L'exemple suivant interroge les lignes dont la valeur de city est égale à hangzhou et dont la valeur de category est égale à book.

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

TermQuery categoryQuery = new TermQuery();
categoryQuery.setFieldName("category");
categoryQuery.setTerm(ColumnValue.fromString("book"));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setFilterQueries(Arrays.asList(cityQuery, categoryQuery));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);

Imbriquer des combinaisons de conditions

Utilisez une BoolQuery comme sous-requête d'une autre BoolQuery pour exprimer une logique multiniveau. L'exemple suivant implémente (city = "hangzhou" OR price < 150) OR (category = "book" AND (price = 300 OR price = 400)).

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

RangeQuery lowPriceQuery = new RangeQuery();
lowPriceQuery.setFieldName("price");
lowPriceQuery.lessThan(ColumnValue.fromLong(150));

BoolQuery firstGroup = new BoolQuery();
firstGroup.setShouldQueries(Arrays.asList(cityQuery, lowPriceQuery));

TermQuery price300Query = new TermQuery();
price300Query.setFieldName("price");
price300Query.setTerm(ColumnValue.fromLong(300));

TermQuery price400Query = new TermQuery();
price400Query.setFieldName("price");
price400Query.setTerm(ColumnValue.fromLong(400));

BoolQuery priceGroup = new BoolQuery();
priceGroup.setShouldQueries(Arrays.asList(price300Query, price400Query));

TermQuery categoryQuery = new TermQuery();
categoryQuery.setFieldName("category");
categoryQuery.setTerm(ColumnValue.fromString("book"));

BoolQuery secondGroup = new BoolQuery();
secondGroup.setMustQueries(Arrays.asList(categoryQuery, priceGroup));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setShouldQueries(Arrays.asList(firstGroup, secondGroup));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);