Une requête de plage sur un index de recherche avec le SDK Tablestore pour Java filtre les données selon des bornes inférieures et supérieures de valeurs de champ, et permet d'inclure ou d'exclure chaque borne.
Prérequis
Installez le SDK Tablestore pour Java et initialisez un client.
Description de la fonctionnalité
Une requête de plage sélectionne les lignes dont les valeurs de champ indexées se situent dans un intervalle spécifié. Vous pouvez définir uniquement une borne inférieure, uniquement une borne supérieure, ou les deux. Au moins une borne est requise. Pour un champ Text, une ligne correspond si l'un des jetons générés à partir de la valeur du champ se situe dans l'intervalle.
Utilisez greaterThan, greaterThanOrEqual, lessThan et lessThanOrEqual pour spécifier respectivement les conditions strictement supérieur, supérieur ou égal, strictement inférieur et inférieur ou égal. Définissez le type de requête sur RangeQuery lors de l'appel à search.
SearchResponse search(SearchRequest request)
L'exemple suivant interroge les valeurs Long du champ price qui se situent dans l'intervalle semi-ouvert [100, 500). La requête renvoie au maximum 10 lignes ainsi que le nombre total de correspondances.
String tableName = "example_table";
String indexName = "example_index";
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("price");
rangeQuery.greaterThanOrEqual(ColumnValue.fromLong(100L));
rangeQuery.lessThan(ColumnValue.fromLong(500L));
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(rangeQuery);
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 |
Le nom de la table de données. |
|
indexName (obligatoire) |
String |
Le nom de l'index de recherche. |
|
searchQuery (obligatoire) |
SearchQuery |
La condition de requête et les paramètres généraux de la requête. |
|
columnsToGet (facultatif) |
SearchRequest.ColumnsToGet |
Les colonnes à renvoyer. Si ce paramètre n'est pas configuré, seules les colonnes de clé primaire sont renvoyées. |
|
timeoutInMillisecond (facultatif) |
int |
Le délai d'expiration de la requête au niveau de la demande, en millisecondes. La valeur par défaut est |
|
routingValues (facultatif) |
|
Les 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 |
La condition de requête. Définissez ce paramètre sur un objet |
|
offset (facultatif) |
Integer |
La position de départ de la requête. |
|
limit (facultatif) |
Integer |
Le nombre maximal de lignes à renvoyer. Définissez ce paramètre sur |
|
highlight (facultatif) |
Highlight |
Les paramètres de résumé et de mise en surbrillance pour les champs |
|
collapse (facultatif) |
Collapse |
Les paramètres de regroupement, qui permettent de dédupliquer les résultats selon un champ spécifié. Pour plus de détails sur la configuration, consultez la rubrique Regrouper les résultats de requête. |
|
sort (facultatif) |
Sort |
L'ordre de tri des résultats. Pour plus de détails sur la configuration, consultez la rubrique Trier et paginer les résultats. |
|
trackTotalCount (facultatif) |
int |
Le nombre maximal attendu de lignes correspondantes à compter. La valeur par défaut est |
|
filter (facultatif) |
SearchFilter |
Un filtre appliqué aux résultats de |
|
aggregationList (facultatif) |
|
Les paramètres d'agrégation. Pour plus de détails sur la configuration, consultez la rubrique Agrégation. |
|
groupByList (facultatif) |
|
Les paramètres de regroupement. Pour plus de détails sur la configuration, consultez la rubrique Agrégation. |
|
token (facultatif) |
byte[] |
Le jeton de pagination. Définissez ce paramètre sur la valeur |
Condition de requête
request.searchQuery.query est un objet RangeQuery qui contient les paramètres suivants.
|
Nom |
Type |
Description |
|
fieldName (obligatoire) |
String |
Le nom du champ indexé à interroger. Les requêtes de plage prennent en charge les champs |
|
from (facultatif) |
ColumnValue |
La borne inférieure. Au moins l'un des paramètres |
|
to (facultatif) |
ColumnValue |
La borne supérieure. Au moins l'un des paramètres |
|
includeLower (facultatif) |
boolean |
Indique s'il faut inclure |
|
includeUpper (facultatif) |
boolean |
Indique s'il faut inclure |
Colonnes renvoyées
request.columnsToGet est un objet SearchRequest.ColumnsToGet qui contient les paramètres suivants.
|
Nom |
Type |
Description |
|
columns (facultatif) |
|
Les colonnes d'attribut à renvoyer. Définissez ce paramètre uniquement si |
|
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 |
|
returnAllFromIndex (facultatif) |
boolean |
Indique s'il faut renvoyer toutes les colonnes d'attribut indexées. La valeur par défaut est |
Valeurs de retour
search renvoie un objet SearchResponse. Le tableau suivant décrit les champs principaux.
|
Nom |
Type |
Description |
|
totalCount |
long |
Le nombre de lignes correspondantes. Appelez |
|
rows |
|
Les lignes renvoyées par cette requête. Appelez |
|
searchHits |
|
Les résultats de la requête. Appelez |
|
nextToken |
byte[] |
Le jeton de la page suivante. Appelez |
|
isAllSuccess |
boolean |
Indique si toutes les partitions d'index ont été interrogées avec succès. Appelez |
Exemples de scénarios
Interroger des dates dans un format personnalisé
Si date_string est un champ String dans la table de données et qu'il est mappé à un champ Date dans l'index de recherche avec le format yyyy-MM-dd HH:mm:ss, utilisez des chaînes au même format comme bornes de requête. L'exemple suivant interroge l'intervalle [2021-01-01 00:00:00, 2023-01-01 00:00:00).
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("date_string");
rangeQuery.greaterThanOrEqual(ColumnValue.fromString("2021-01-01 00:00:00"));
rangeQuery.lessThan(ColumnValue.fromString("2023-01-01 00:00:00"));
Interroger des horodatages en secondes epoch
Si date_epoch est un champ Integer dans la table de données et qu'il est mappé à un champ Date dans l'index de recherche avec le format epoch_second, utilisez des horodatages en secondes epoch comme bornes de requête. L'exemple suivant interroge les valeurs supérieures à 1609459200.
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("date_epoch");
rangeQuery.greaterThan(ColumnValue.fromLong(1609459200L));