Tous les produits
Search
Centre de documentation

Tablestore:Utiliser des filtres post-requête

Dernière mise à jour :Aug 08, 2026

Utilisez les filtres post-requête avec le SDK Tablestore pour Java pour affiner les résultats d'une requête principale et isoler les conditions susceptibles d'être exécutées ultérieurement.

Prérequis

  • Installez le SDK Tablestore pour Java et initialisez le client.

  • Utilisez le SDK Tablestore pour Java version 5.17.5 ou ultérieure.

Fonctionnement

Un filtre post-requête (SearchFilter) affine les lignes candidates après l'exécution de la requête principale (query). Les agrégations et les regroupements (group-by) sont ensuite calculés à partir des résultats filtrés. Isoler les conditions adaptées à une exécution ultérieure réduit le coût d'évaluation des conditions complexes lors de la requête principale. Le gain de performance réel dépend de la sélectivité de la requête principale et de la condition de filtrage.

Pour utiliser un filtre post-requête, appelez search et configurez séparément la requête principale et SearchFilter dans SearchQuery. La requête principale prend en charge les types de requête fournis par les index de recherche. Le filtre post-requête ne prend en charge que certains types de requête et types de champ. Pour plus d'informations, consultez Limites.

SearchResponse search(SearchRequest request)

L'exemple suivant utilise d'abord TermsQuery pour interroger les lignes dont la valeur du champ category est book. Il applique ensuite un filtre post-requête pour conserver les lignes dont la valeur du champ score_long est supérieure à 1 et inférieure à 10.

String tableName = "example_table";
String indexName = "example_index";

// Configure the main query.
TermsQuery termsQuery = new TermsQuery();
termsQuery.setFieldName("category");
termsQuery.addTerm(ColumnValue.fromString("book"));

// Configure the post-query filter.
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("score_long");
rangeQuery.setFrom(ColumnValue.fromLong(1));
rangeQuery.setIncludeLower(false);
rangeQuery.setTo(ColumnValue.fromLong(10));
rangeQuery.setIncludeUpper(false);

SearchFilter searchFilter = new SearchFilter();
searchFilter.setQuery(rangeQuery);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(termsQuery);
searchQuery.setFilter(searchFilter);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);

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

SearchResponse response = client.search(request);
System.out.println("Total count: " + response.getTotalCount());
System.out.println("Rows: " + response.getRows());

Limites

  • Utilisez un filtre post-requête conjointement avec une requête principale. Configurez la requête principale afin de réduire le nombre de lignes candidates avant l'exécution du filtre post-requête. Ne définissez pas la requête principale sur MatchAllQuery, sauf si vous devez filtrer toutes les lignes de l'index de recherche.

  • Un filtre post-requête prend uniquement en charge les conditions TermQuery, TermsQuery, RangeQuery, ExistsQuery et BoolQuery composées de ces types de requête.

  • Dans une BoolQuery utilisée comme filtre post-requête, seuls mustQueries, mustNotQueries et shouldQueries sont pris en charge. filterQueries n'est pas pris en charge.

  • Seuls les champs Keyword, Long et Double peuvent être filtrés. Activez l'option enableSortAndAgg pour ces champs.

  • Les conditions de filtre post-requête ne participent pas au calcul de la pertinence. Définir weight pour une condition de filtre ne modifie pas les scores de pertinence des résultats de la requête.

Paramètres

Requête de recherche

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

Nom

Type

Description

tableName (obligatoire)

String

Le nom de la table.

indexName (obligatoire)

String

Le nom de l'index de recherche.

searchQuery (obligatoire)

SearchQuery

La requête principale, le filtre post-requête et les paramètres de requête communs.

columnsToGet (facultatif)

SearchRequest.ColumnsToGet

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

timeoutInMillisecond (facultatif)

int

Le délai d'expiration de la requête en millisecondes. La valeur par défaut est -1, ce qui indique qu'aucun délai d'expiration au niveau de la requête n'est défini.

routingValues (facultatif)

List<PrimaryKey>

Les valeurs de clé primaire d'un champ de routage personnalisé. Vous n'avez pas besoin de configurer ce paramètre si le routage personnalisé n'est pas utilisé.

Paramètres de requête

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

Nom

Type

Description

query (obligatoire)

Query

La condition de requête principale. Les types de requête d'index de recherche sont pris en charge.

filter (obligatoire)

SearchFilter

Le filtre post-requête qui affine davantage les lignes candidates après l'exécution de la requête principale.

offset (facultatif)

Integer

Le décalage à partir duquel la requête commence.

limit (facultatif)

Integer

Le nombre maximal de lignes à renvoyer. Si vous définissez ce paramètre sur 0, aucune ligne n'est renvoyée.

highlight (facultatif)

Highlight

Les paramètres de résumé et de mise en surbrillance pour les champs Text. Pour plus de détails sur la configuration, consultez Résumé et mise en surbrillance.

collapse (facultatif)

Collapse

Les paramètres de regroupement utilisés pour dédupliquer les résultats de requête par champ. Pour plus de détails sur la configuration, consultez Regrouper les résultats de requête.

sort (facultatif)

Sort

L'ordre de tri des résultats de la requête. Pour plus de détails sur la configuration, consultez Trier et paginer les résultats.

trackTotalCount (facultatif)

int

Le nombre maximal de lignes correspondantes à compter. La valeur par défaut est TRACK_TOTAL_COUNT_DISABLED, ce qui indique que les lignes correspondantes ne sont pas comptées. Définissez ce paramètre sur TRACK_TOTAL_COUNT pour compter toutes les lignes correspondantes. Une valeur plus faible offre de meilleures performances de requête.

aggregationList (facultatif)

List<Aggregation>

Les paramètres d'agrégation. Les agrégations sont calculées à partir des résultats du filtre post-requête. Pour plus de détails sur la configuration, consultez Agrégation.

groupByList (facultatif)

List<GroupBy>

Les paramètres de regroupement (group-by). Les regroupements sont calculés à partir des résultats du filtre post-requête. Pour plus de détails sur la configuration, consultez Agrégation.

token (facultatif)

byte[]

Le jeton de pagination. Pour lire la page suivante, définissez ce paramètre sur la valeur nextToken renvoyée par la requête précédente. Lorsque token est défini, le SDK efface sort car le jeton de pagination contient déjà la condition de tri.

Filtre post-requête

request.searchQuery.filter est un objet SearchFilter qui contient le paramètre suivant.

Nom

Type

Description

query (obligatoire)

Query

La condition de filtre. Les conditions TermQuery, TermsQuery, RangeQuery, ExistsQuery et BoolQuery composées de ces types de requête sont prises en charge.

Colonnes renvoyées

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

Nom

Type

Description

columns (facultatif)

List<String>

Les colonnes d'attribut à renvoyer. Configurez ce paramètre uniquement si returnAll et returnAllFromIndex sont tous deux définis sur false. Si ce paramètre n'est pas spécifié, 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. Valeur par défaut : false.

returnAllFromIndex (facultatif)

boolean

Indique s'il faut renvoyer toutes les colonnes d'attribut indexées. Valeur par défaut : false. Ce paramètre et returnAll ne peuvent pas être tous deux définis sur true.

Réponse

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

Nom

Type

Description

totalCount

long

Le nombre de lignes correspondant au filtre post-requête, obtenu via getTotalCount(). La valeur dépend du paramètre trackTotalCount.

rows

List<Row>

Les lignes renvoyées par la requête actuelle, obtenues via getRows(). Le nombre de lignes ne dépasse pas limit.

searchHits

List<SearchHit>

Les occurrences de recherche, obtenues via getSearchHits().

aggregationResults

AggregationResults

Les résultats d'agrégation calculés à partir des résultats du filtre post-requête, obtenus via getAggregationResults().

groupByResults

GroupByResults

Les résultats de regroupement calculés à partir des résultats du filtre post-requête, obtenus via getGroupByResults().

nextToken

byte[]

Le jeton pour la page suivante, obtenu via getNextToken(). Si la valeur n'est pas null, utilisez-la comme token dans la requête suivante.

isAllSuccess

boolean

Indique si toutes les partitions d'index ont été interrogées, obtenu via isAllSuccess(). Si la valeur est false, des résultats partiels sont renvoyés et totalCount peut être inférieur au nombre réel de lignes correspondantes.