La fonctionnalité collapse déduplique un ensemble de résultats de requête en se basant sur une colonne spécifiée, de sorte que chaque valeur unique n'apparaisse qu'une seule fois dans les résultats renvoyés. Utilisez cette fonctionnalité pour garantir la diversité des résultats lorsqu'une seule catégorie domine l'ensemble des résultats.
La fonctionnalité collapse permet d'effectuer une déduplication (Distinct) dans la plupart des scénarios, ce qui équivaut à dédupliquer selon la colonne de collapse. Toutefois, elle s'applique uniquement aux colonnes de type entier, nombre à virgule flottante et Keyword. Elle ne prend pas en charge les colonnes de type array et ne peut renvoyer que les 100 000 premiers résultats triés.
Limites d'utilisation
Avant d'utiliser la fonctionnalité collapse, tenez compte des contraintes suivantes :
Types de colonnes pris en charge — La fonctionnalité collapse s'applique uniquement aux colonnes de type entier, nombre à virgule flottante et Keyword. Les colonnes de type array ne sont pas prises en charge.
Pagination — La fonctionnalité collapse prend en charge la pagination uniquement via les paramètres offset et limit. La pagination basée sur un token n'est pas prise en charge.
Agrégation — Lorsque vous utilisez l'agrégation statistique conjointement avec la fonctionnalité collapse, l'agrégation s'applique uniquement à l'ensemble de résultats avant l'opération de collapse.
Limite du nombre de groupes — Après l'opération de collapse, le nombre total de groupes renvoyés dépend de la valeur maximale de offset plus limit. Un maximum de 100 000 groupes peut être renvoyé.
Nombre total — Le nombre total de lignes dans la réponse correspond au nombre de lignes correspondantes avant l'opération de collapse. Il n'est pas possible d'obtenir le nombre total de groupes après l'opération de collapse.
Paramètres
La fonctionnalité collapse est fournie par l'opération Search et est implémentée à l'aide du paramètre collapse. Le tableau suivant décrit les paramètres utilisés dans une requête de collapse.
| Paramètre | Description |
| query | Tout type de requête. |
| collapse | Les paramètres de collapse, qui incluent le paramètre fieldName. fieldName : nom de la colonne selon laquelle l'ensemble de résultats est réduit (collapsed). Ce paramètre s'applique uniquement aux colonnes de type entier, nombre à virgule flottante et Keyword. Les colonnes de type array ne sont pas prises en charge. |
| offset | La position à partir de laquelle la requête actuelle commence. |
| limit | Le nombre maximal de lignes à renvoyer pour la requête actuelle. Si vous souhaitez obtenir uniquement le nombre de lignes sans les données, définissez limit sur 0. Aucune ligne n'est renvoyée. |
| getTotalCount | Indique s'il faut renvoyer le nombre total de lignes correspondantes. La valeur par défaut est false, ce qui signifie que le nombre total de lignes correspondantes n'est pas renvoyé. Le renvoi du nombre total de lignes correspondantes affecte les performances de la requête. |
| tableName | Le nom de la table de données. |
| indexName | Le nom de l'index de recherche. |
| columnsToGet | Indique s'il faut renvoyer toutes les colonnes. Ce paramètre inclut les paramètres returnAll et columns. La valeur par défaut de returnAll est false, ce qui signifie que toutes les colonnes ne sont pas renvoyées. Dans ce cas, vous pouvez utiliser columns pour spécifier les colonnes à renvoyer. Si vous n'utilisez pas columns pour spécifier les colonnes à renvoyer, seules les colonnes de clé primaire sont renvoyées. Si vous définissez returnAll sur true, toutes les colonnes sont renvoyées. |
Utilisation
Utilisez l'interface de ligne de commande ou un SDK pour réduire les résultats lors de l'interrogation des données.
-
Utilisez un compte Alibaba Cloud ou un utilisateur RAM disposant des permissions requises pour les opérations Table Store. Pour accorder des permissions à un utilisateur RAM, consultez la rubrique Accorder des permissions à un utilisateur RAM à l'aide d'une politique RAM.
Si vous utilisez un SDK ou un outil de ligne de commande, créez un AccessKey pour votre compte Alibaba Cloud ou votre utilisateur RAM si vous n'en possédez pas.
Vous avez créé une table de données.
Un Search Index a été créé pour la table de données.
Si vous utilisez un SDK, initialisez le client Tablestore.
Si vous utilisez l'outil de ligne de commande, téléchargez et démarrez l'outil, puis configurez la connexion à votre instance et sélectionnez la table cible. Pour plus d'informations, consultez les rubriques Télécharger l'outil de ligne de commande, Démarrer l'outil et configurer les informations de connexion et Opérations sur les tables de données.
Utiliser l'interface de ligne de commande
Exécutez la commande search dans l'interface de ligne de commande pour interroger les données à l'aide d'un index de recherche, et configurez le paramètre Collapse dans les conditions de requête pour utiliser la fonctionnalité collapse. Pour plus d'informations, consultez la rubrique Index de recherche.
Exécutez la commande
searchpour interroger les données de la table à l'aide d'un index de recherche et renvoyer toutes les colonnes indexées.
search -n search_index --return_all_indexed
Saisissez les conditions de requête comme indiqué. L'exemple de code suivant illustre cette étape :
{
"Offset": -1,
"Limit": 10,
"Collapse": {
"FieldName": "product_name"
},
"Sort": null,
"GetTotalCount": true,
"Token": null,
"Query": {
"Name": "MatchQuery",
"Query": {
"FieldName": "user_id",
"Text": "00002",
"MinimumShouldMatch": 1
}
}
}
Le tableau suivant décrit les champs clés de l'exemple :
| Champ | Description |
| Offset | La position à partir de laquelle la requête commence. Une valeur de -1 indique qu'aucun décalage n'est appliqué. |
| Limit | Le nombre maximal de lignes à renvoyer. |
| Collapse.FieldName | Le nom de la colonne selon laquelle les résultats sont dédupliqués. Dans cet exemple, product_name est utilisé comme colonne de collapse. Remplacez cette valeur par le nom de votre colonne cible. |
| Query | Les conditions de requête. Cet exemple utilise une MatchQuery sur la colonne user_id. Remplacez le nom du champ et le texte de la requête par vos propres valeurs. |
Une fois que la requête a renvoyé des résultats, vérifiez que la fonctionnalité collapse fonctionne comme prévu en vous assurant que les valeurs de la colonne de collapse sont uniques parmi les lignes renvoyées.
Utiliser un SDK
Utilisez le SDK Java, le SDK Go, le SDK Python, le SDK Node.js, le SDK .NET ou le SDK PHP pour réduire les résultats lors de l'interrogation des données. L'exemple suivant utilise le SDK Java pour expliquer comment utiliser la fonctionnalité collapse.
L'exemple suivant interroge toutes les lignes, réduit les résultats selon le champ category et trie les lignes selon le champ price par ordre décroissant. La ligne ayant 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());
Interrogation des données
En mode VCU (anciennement mode Reserved), l'interrogation des données à l'aide d'un index de recherche consomme les ressources de calcul des VCU. En mode CU (anciennement mode Pay-As-You-Go), l'interrogation des données à l'aide d'un index de recherche consomme du débit de lecture. Pour plus d'informations, consultez la rubrique Facturation des index de recherche.
L'interrogation des données à l'aide d'un index de recherche consomme du débit de lecture. Pour plus d'informations, consultez la rubrique Éléments facturables des index de recherche.
L'utilisation de la fonctionnalité collapse lors de l'interrogation des données n'affecte pas les règles de facturation existantes.
FAQ
Références
Search Index prend en charge divers types de requêtes pour les interrogations de données multidimensionnelles, notamment la requête term, la requête terms, la requête match all, la requête match, la requête phrase match, la requête range, la requête prefix, la requête suffix, la requête wildcard, la requête wildcard basée sur un token, la requête boolean, la requête geo, la requête nested, la recherche vectorielle, et la requête exists.
Lors de l'interrogation des données, vous pouvez trier et paginer l'ensemble de résultats ou effectuer un collapse (déduplication).
Pour l'analyse des données, telle que la recherche de la valeur maximale ou minimale, le calcul d'une somme ou le comptage de lignes, vous pouvez utiliser les fonctionnalités d'agrégation statistique ou de requête SQL.
Pour exporter rapidement des données indépendamment de l'ordre de l'ensemble de résultats, vous pouvez utiliser la fonctionnalité Parallel Scan.