Lorsque vous interrogez un index de recherche à l'aide du SDK Tablestore pour Java, vous pouvez réduire les résultats en fonction d'un champ spécifié afin de ne renvoyer qu'une seule ligne pour chaque valeur distincte de ce champ.
Prérequis
Installez le SDK Tablestore pour Java et initialisez un client.
Fonctionnement
La réduction de champ regroupe les lignes correspondantes selon la valeur d'un champ d'index de recherche spécifié et renvoie une ligne représentative pour chaque groupe. L'ordre de tri effectif détermine la ligne renvoyée pour chaque groupe. Utilisez les options de tri et pagination pour configurer l'ordre de tri. La réduction de champ modifie uniquement l'affichage des résultats de la requête et n'altère pas les données de la table.
Le tri et l'agrégation doivent être activés pour le champ de réduction. Ce champ doit être un champ non tableau de type Keyword, Long ou Double.
Une requête de réduction prend uniquement en charge la pagination basée sur
limitetoffset. La pagination par jeton n'est pas prise en charge. La somme delimitetoffsetne peut pas dépasser100000.Les agrégations et les regroupements (group-by) s'appliquent aux résultats correspondants avant la réduction. Le nombre total de lignes correspond également au nombre de lignes correspondantes avant la réduction. Il est impossible d'obtenir le nombre total de groupes après la réduction.
Appelez search pour interroger les données et configurez SearchQuery.collapse pour spécifier le champ de réduction.
SearchResponse search(SearchRequest request)
L'exemple suivant interroge toutes les lignes, réduit les résultats selon le champ category et trie les lignes par le champ price dans l'ordre décroissant. La ligne affichant le prix le plus élevé dans chaque catégorie est renvoyée.
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(new MatchAllQuery());
searchQuery.setLimit(10);
searchQuery.setCollapse(new Collapse("category"));
searchQuery.setSort(new Sort(
Arrays.asList(new FieldSort("price", SortOrder.DESC))));
SearchRequest.ColumnsToGet columnsToGet =
new SearchRequest.ColumnsToGet();
columnsToGet.setColumns(Arrays.asList("category", "price"));
SearchRequest request =
new SearchRequest("example_table", "example_index", searchQuery);
request.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(request);
System.out.println(response.getRows());
Paramètres
Requête de recherche
Le type de request est SearchRequest. Le tableau suivant décrit ses paramètres.
|
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 configuration de la réduction. |
|
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. Valeur par défaut : |
|
routingValues (facultatif) |
|
Valeurs de clé primaire des champs de routage personnalisés. Vous n'avez pas besoin de configurer ce paramètre si le routage personnalisé n'est pas utilisé. |
Configuration de la requête
Le type de request.searchQuery est SearchQuery. Le tableau suivant décrit ses paramètres.
|
Nom |
Type |
Description |
|
query (obligatoire) |
Query |
Condition de requête. Les types de requête d'index de recherche sont pris en charge. |
|
collapse (obligatoire) |
Collapse |
Configuration de la réduction. |
|
offset (facultatif) |
Integer |
Position du groupe à partir de laquelle la requête actuelle commence. Valeur par défaut : |
|
limit (facultatif) |
Integer |
Nombre maximal de groupes à renvoyer. Valeur par défaut : |
|
highlight (facultatif) |
Highlight |
Configuration du résumé et de la mise en surbrillance. Le retour des résultats mis en surbrillance dépend du type de requête et de la configuration du champ d'index. |
|
sort (facultatif) |
Sort |
Ordre de tri des résultats, qui détermine la ligne représentative renvoyée pour chaque groupe ainsi que l'ordre des groupes. Si ce paramètre n'est pas configuré, le tri de l'index est utilisé. |
|
trackTotalCount (facultatif) |
int |
Nombre maximal attendu de lignes correspondantes à compter. Valeur par défaut : |
|
filter (facultatif) |
SearchFilter |
Filtre appliqué aux résultats de |
|
aggregationList (facultatif) |
|
Configurations d'agrégation. Les agrégations s'appliquent aux résultats correspondants avant la réduction. |
|
groupByList (facultatif) |
|
Configurations de regroupement (group-by). Les regroupements s'appliquent aux résultats correspondants avant la réduction. |
|
token (facultatif) |
byte[] |
Jeton de pagination. Ne configurez pas ce paramètre lors de l'utilisation de la réduction de champ. |
Configuration de la réduction
Le type de request.searchQuery.collapse est Collapse. Le tableau suivant décrit son paramètre.
|
Nom |
Type |
Description |
|
fieldName (obligatoire) |
String |
Nom du champ de réduction. Le tri et l'agrégation doivent être activés pour ce champ, qui doit être un champ non tableau de type Keyword, Long ou Double. |
Colonnes à renvoyer
Le type de request.columnsToGet est SearchRequest.ColumnsToGet. Le tableau suivant décrit ses paramètres.
|
Nom |
Type |
Description |
|
columns (facultatif) |
|
Noms des colonnes d'attribut à renvoyer. Configurez ce paramètre uniquement si |
|
returnAll (facultatif) |
boolean |
Indique s'il faut renvoyer toutes les colonnes d'attribut de la table de données. Valeur par défaut : |
|
returnAllFromIndex (facultatif) |
boolean |
Indique s'il faut renvoyer toutes les colonnes d'attribut stockées dans l'index de recherche. Valeur par défaut : |
Réponse
La méthode search renvoie SearchResponse. Le tableau suivant décrit les champs liés à la réduction de champ.
|
Nom |
Type |
Description |
|
totalCount |
long |
Nombre de lignes correspondantes avant la réduction. Appelez |
|
rows |
|
Lignes après la réduction. Appelez |
|
searchHits |
|
Résultats de recherche (hits) après la réduction. Appelez |
|
isAllSuccess |
boolean |
Indique si toutes les partitions d'index ont été interrogées. Appelez |
|
aggregationResults |
AggregationResults |
Résultats d'agrégation calculés à partir des lignes correspondantes avant la réduction. Appelez |
|
groupByResults |
GroupByResults |
Résultats de regroupement (group-by) calculés à partir des lignes correspondantes avant la réduction. Appelez |