Utilisez le SDK Tablestore pour Python afin de réduire les résultats d'un index de recherche selon un champ spécifié et de renvoyer une ligne pour chaque valeur distincte du champ.
Prérequis
Installez le SDK Tablestore pour Python et initialisez un client.
Description
La fonctionnalité de réduction regroupe les lignes correspondantes en fonction d'un champ d'index de recherche spécifié et renvoie une ligne représentative pour chaque valeur distincte du champ. L'ordre de tri de la requête détermine quelle ligne est renvoyée pour chaque groupe. Pour plus d'informations, consultez la rubrique Trier et paginer les résultats. La réduction modifie uniquement les résultats de la requête et n'affecte pas la table.
Le champ de réduction doit avoir le tri et l'agrégation activés, et doit être un champ non tableau de type Keyword, Long ou Double. Les requêtes de réduction supportent la pagination uniquement via limit et offset, et non via next_token. La somme limit + offset ne peut pas dépasser 100000. Les agrégations, le regroupement et le nombre total de lignes correspondantes sont calculés sur les résultats avant réduction. La réponse ne fournit pas le nombre total de groupes réduits.
L'exemple suivant réduit les résultats par category et trie par price dans l'ordre décroissant. Par conséquent, la ligne ayant le prix le plus élevé est renvoyée pour chaque catégorie.
query = MatchAllQuery()
search_query = SearchQuery(
query,
sort=Sort([FieldSort("price", SortOrder.DESC)]),
collapse_field=Collapse("category"),
limit=10,
get_total_count=True,
)
response = client.search(
"example_table",
"example_index",
search_query,
ColumnsToGet(
["category", "price"],
ColumnReturnType.SPECIFIED,
),
)
print(response.total_count)
print(response.rows)
Paramètres
Requête de recherche
La méthode search contient les paramètres suivants.
|
Nom |
Type |
Description |
|
table_name (obligatoire) |
|
Le nom de la table de données. |
|
index_name (obligatoire) |
|
Le nom de l'index de recherche. |
|
search_query (obligatoire) |
|
La condition de requête et les configurations de requête courantes. |
|
columns_to_get (facultatif) |
|
La configuration des colonnes à renvoyer. Si ce paramètre n'est pas spécifié, seules les colonnes de clé primaire sont renvoyées. |
|
routing_keys (facultatif) |
|
Les valeurs de clé primaire des champs de routage personnalisés. Ce paramètre n'est pas requis si le routage personnalisé n'est pas configuré. |
|
timeout_s (facultatif) |
|
Le délai d'expiration de la requête en secondes. Si ce paramètre n'est pas spécifié, le délai d'expiration au niveau du client est utilisé. |
Configuration de la requête
Le paramètre search_query est de type SearchQuery et contient les paramètres suivants.
|
Nom |
Type |
Description |
|
query (obligatoire) |
|
La condition de requête. Spécifiez un type de Query en fonction de vos exigences de correspondance. |
|
sort (facultatif) |
|
L'ordre de tri des résultats. Pour plus d'informations, consultez la rubrique Trier et paginer les résultats. |
|
get_total_count (facultatif) |
|
Indique s'il faut renvoyer le nombre total de lignes correspondantes. Valeur par défaut : |
|
next_token (facultatif) |
|
Ne spécifiez pas ce paramètre pour une requête de réduction. |
|
offset (facultatif) |
|
La position de départ du groupe. Valeur par défaut : |
|
limit (facultatif) |
|
Le nombre maximal de lignes à renvoyer. Si ce paramètre est défini sur |
|
aggs (facultatif) |
|
Les configurations d'agrégation de métriques. Pour plus d'informations, consultez la rubrique Agrégation. |
|
group_bys (facultatif) |
|
Les configurations de regroupement. Pour plus d'informations, consultez la rubrique Agrégation. |
|
collapse_field (obligatoire) |
|
La configuration de réduction des résultats. |
|
highlight (facultatif) |
|
La configuration de résumé et de mise en surbrillance pour les champs |
Configuration de réduction
Le paramètre search_query.collapse_field est de type Collapse et contient le paramètre suivant.
|
Nom |
Type |
Description |
|
field_name (obligatoire) |
|
Le nom du champ de réduction. Le tri et l'agrégation doivent être activés pour ce champ non tableau de type |
Colonnes de retour
Le paramètre columns_to_get est de type ColumnsToGet et contient les paramètres suivants.
|
Nom |
Type |
Description |
|
column_names (facultatif) |
|
Les noms des colonnes d'attribut à renvoyer. Spécifiez ce paramètre uniquement lorsque |
|
return_type (facultatif) |
|
Le mode de retour des colonnes. |
Réponse
La méthode search renvoie un objet SearchResponse. Le tableau suivant décrit les champs principaux.
|
Champ |
Type |
Description |
|
rows |
|
Les lignes après réduction. Au plus une ligne est renvoyée pour chaque valeur distincte du champ de réduction. |
|
next_token |
|
Le jeton pour la page suivante. Une valeur vide indique qu'aucune autre donnée n'est disponible. |
|
total_count |
|
Le nombre de lignes correspondantes avant réduction. La valeur dépend de |
|
is_all_succeed |
|
Indique si toutes les partitions d'index ont été interrogées. Si la valeur est |
|
agg_results |
|
Les résultats d'agrégation de métriques. Ce champ est vide si |
|
group_by_results |
|
Les résultats de regroupement. Ce champ est vide si |
|
search_hits |
|
Les résultats de recherche, incluant des informations étendues telles que les lignes, les scores de pertinence et les mises en surbrillance. |
Réponse compatible avec les tuples
À partir de la version 5.2.0 du SDK Tablestore pour Python, les API de recherche renvoient des objets de réponse au lieu de tuples. Les versions 5.1.0 et antérieures renvoient directement des tuples. Dans la version 5.2.1 et ultérieures, vous pouvez appeler SearchResponse.v1_response() pour obtenir un tuple compatible avec les versions antérieures. Pour le nouveau code, accédez directement aux attributs de SearchResponse afin d'éviter les erreurs de déballage si les champs de réponse sont étendus.
(
rows,
next_token,
total_count,
is_all_succeed,
agg_results,
group_by_results,
search_hits,
) = response.v1_response()