Tous les produits
Search
Centre de documentation

Tablestore:Requête Exists

Dernière mise à jour :Aug 20, 2026

Une requête Exists avec le SDK Tablestore pour Java filtre les données selon qu'un champ spécifié existe ou non.

Prérequis

Installez le SDK Tablestore pour Java et initialisez un client.

Description de la fonctionnalité

Une requête Exists (ExistsQuery, également appelée requête NULL ou requête sur valeur nulle) renvoie les lignes contenant un champ indexé spécifié. Un champ est considéré comme inexistant si la colonne correspondante n'a pas été écrite dans la table de données. Un tableau vide est également traité comme un champ de tableau inexistant.

Lors de l'appel à search, définissez le type de requête sur ExistsQuery et indiquez le nom du champ. Pour interroger un champ parent Nested ou un sous-champ, encapsulez ExistsQuery dans une NestedQuery. Pour cibler les lignes où un champ est absent, ajoutez ExistsQuery à BoolQuery.mustNotQueries.

SearchResponse search(SearchRequest request)

L'exemple suivant interroge les lignes où le champ city existe. La requête renvoie jusqu'à 10 lignes ainsi que le nombre total de correspondances.

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

ExistsQuery existsQuery = new ExistsQuery();
existsQuery.setFieldName("city");

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(existsQuery);
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.getTotalCount());
System.out.println(response.getRows());

Paramètres

Requête 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 requête et paramètres généraux.

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 en millisecondes. La valeur par défaut est -1, ce qui signifie qu'aucun délai d'expiration distinct n'est configuré.

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 requête. Définissez ce paramètre sur un objet ExistsQuery pour une requête Exists.

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.

collapse (facultatif)

Collapse

Paramètres de regroupement des résultats, permettant 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

request.searchQuery.query est un objet ExistsQuery qui contient le paramètre suivant.

Nom

Type

Description

fieldName (obligatoire)

String

Nom du champ indexé à interroger.

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

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.

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.

Exemples de scénarios

Interroger les lignes dans lesquelles un champ n'existe pas

Ajoutez ExistsQuery à BoolQuery.mustNotQueries pour cibler les lignes où le champ city n'existe pas.

ExistsQuery existsQuery = new ExistsQuery();
existsQuery.setFieldName("city");

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

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

Interroger un champ Nested

Encapsulez ExistsQuery dans une NestedQuery. Pour interroger le champ parent, définissez fieldName sur items. Pour interroger un sous-champ, spécifiez le chemin complet, par exemple items.keyword. L'exemple suivant interroge les lignes où le sous-champ items.keyword existe.

ExistsQuery existsQuery = new ExistsQuery();
existsQuery.setFieldName("items.keyword");

NestedQuery nestedQuery = new NestedQuery();
nestedQuery.setPath("items");
nestedQuery.setQuery(existsQuery);
nestedQuery.setScoreMode(ScoreMode.None);

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