Utilisez le SDK Tablestore pour Python pour faire correspondre les données d'un champ Nested tout en préservant les limites des lignes enfants et, éventuellement, renvoyer les lignes enfants correspondantes.
Prérequis
Installez le SDK Tablestore pour Python et initialisez un client.
Description
Une requête imbriquée interroge les lignes enfants d'un champ Nested. Chaque ligne enfant conserve les relations entre ses champs. Vous ne pouvez pas interroger directement un champ enfant ; vous devez encapsuler la requête enfant dans un objet NestedQuery. Le paramètre path spécifie le chemin du champ Nested et les champs de la requête enfant doivent utiliser des chemins complets. La requête enfant peut être de n'importe quel type Query. Si plusieurs conditions doivent s'appliquer à la même ligne enfant, utilisez une BoolQuery contenant ces conditions comme requête enfant d'un seul NestedQuery. Si différentes lignes enfants peuvent satisfaire différentes conditions, créez un NestedQuery pour chaque condition et combinez-les avec une BoolQuery externe.
NestedQuery(path, query, score_mode=ScoreMode.NONE, inner_hits=None, weight=None)
L'exemple suivant interroge les lignes où la même ligne enfant du champ items Nested a un items.name égal à alice et un items.age inférieur à 40.
child_query = BoolQuery(
must_queries=[
TermQuery("items.name", "alice"),
RangeQuery("items.age", range_to=40),
]
)
query = NestedQuery("items", child_query)
search_query = SearchQuery(
query,
limit=10,
get_total_count=True,
)
response = client.search(
"example_table",
"example_index",
search_query,
ColumnsToGet(return_type=ColumnReturnType.ALL),
)
print(response.total_count)
for row in response.rows:
print(row)
Paramètres
Requête de recherche
La méthode search accepte les paramètres suivants.
|
Nom |
Type |
Description |
|
table_name (obligatoire) |
|
Nom de la table de données. |
|
index_name (obligatoire) |
|
Nom de l'index de recherche. |
|
search_query (obligatoire) |
|
Condition de requête et configurations courantes. |
|
columns_to_get (facultatif) |
|
Configuration des colonnes à renvoyer. Par défaut, seules les colonnes de clé primaire sont renvoyées. |
|
routing_keys (facultatif) |
|
Liste des valeurs de clé primaire pour les champs de routage personnalisés. Inutile si le routage personnalisé n'est pas configuré. |
|
timeout_s (facultatif) |
|
Délai d'expiration de la requête en secondes. Par défaut, le délai d'expiration défini au niveau du client s'applique. |
Configuration de la requête
L'objet search_query est de type SearchQuery et contient les paramètres suivants.
|
Nom |
Type |
Description |
|
query (obligatoire) |
|
Condition de requête. Définissez ce paramètre sur |
|
sort (facultatif) |
|
Ordre de tri des résultats. Pour plus d'informations, consultez Tri et pagination des résultats. |
|
get_total_count (facultatif) |
|
Indique s'il faut renvoyer le nombre total de lignes correspondantes. Valeur par défaut : |
|
next_token (facultatif) |
|
Jeton de pagination. Définissez ce paramètre sur le |
|
offset (facultatif) |
|
Décalage de départ de la requête actuelle. Utilisez ce paramètre pour une pagination superficielle. |
|
limit (facultatif) |
|
Nombre maximal de lignes à renvoyer. La valeur |
|
aggs (facultatif) |
|
Configurations d'agrégation. Pour plus d'informations, consultez Agrégation. |
|
group_bys (facultatif) |
|
Configurations de regroupement. Pour plus d'informations, consultez Agrégation. |
|
collapse_field (facultatif) |
|
Configuration de réduction des résultats, qui supprime les doublons selon un champ spécifié. Pour plus d'informations, consultez Réduction des résultats de requête. |
Condition de requête
L'objet search_query.query est de type NestedQuery et contient les paramètres suivants.
|
Nom |
Type |
Description |
|
path (obligatoire) |
|
Chemin du champ |
|
query (obligatoire) |
|
Condition de requête à exécuter sur les lignes enfants situées à |
|
score_mode (facultatif) |
|
Méthode de calcul du score de la ligne parente lorsque plusieurs lignes enfants correspondent. |
|
inner_hits (facultatif) |
|
Configurations de renvoi, de tri, de pagination et de mise en évidence pour les lignes enfants correspondantes. Par défaut, les détails des lignes enfants correspondantes ne sont pas renvoyés. |
|
weight (facultatif) |
|
Poids de pertinence de la condition de requête. La valeur doit être un nombre à virgule flottante positif. Valeur par défaut : |
Lignes enfants correspondantes
L'objet search_query.query.inner_hits est de type InnerHits et contient les paramètres suivants.
|
Nom |
Type |
Description |
|
sort (obligatoire) |
|
Ordre de tri des lignes enfants correspondantes. Définissez ce paramètre sur |
|
offset (obligatoire) |
|
Décalage de départ pour le renvoi des lignes enfants correspondantes. Transmettez |
|
limit (obligatoire) |
|
Nombre de lignes enfants correspondantes à renvoyer. Par défaut, le serveur renvoie trois lignes enfants si vous transmettez |
|
highlight (obligatoire) |
|
Configuration de résumé et de mise en évidence pour les champs enfants. Définissez ce paramètre sur |
Colonnes renvoyées
L'objet columns_to_get est de type ColumnsToGet et contient les paramètres suivants.
|
Nom |
Type |
Description |
|
column_names (facultatif) |
|
Noms des colonnes d'attribut à renvoyer. Spécifiez ce paramètre uniquement lorsque |
|
return_type (facultatif) |
|
Mode de renvoi des colonnes. |
Réponse
La méthode search renvoie un objet SearchResponse. Le tableau suivant décrit les champs principaux.
|
Champ |
Type |
Description |
|
rows |
|
Lignes renvoyées par la requête actuelle. Le nombre de lignes ne dépasse pas |
|
next_token |
|
Jeton pour la page suivante. Si ce champ n'est pas vide, transmettez-le à la requête suivante pour poursuivre la lecture. |
|
total_count |
|
Nombre de lignes correspondantes. La valeur dépend de la configuration |
|
is_all_succeed |
|
Indique si toutes les partitions d'index ont été interrogées. Si la valeur est |
|
agg_results |
|
Résultats d'agrégation. Ce champ est vide si |
|
group_by_results |
|
Résultats de regroupement. Ce champ est vide si |
|
search_hits |
|
Hits de recherche, incluant des informations étendues telles que les scores de pertinence, les mises en évidence et les lignes enfants correspondantes. |
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. À partir de la version 5.2.1, appelez SearchResponse.v1_response() pour obtenir un tuple compatible avec les versions antérieures. Pour le nouveau code, accédez directement aux attributs SearchResponse afin d'éviter les erreurs de déballage en cas d'extension des champs de réponse.
(
rows,
next_token,
total_count,
is_all_succeed,
agg_results,
group_by_results,
search_hits,
) = response.v1_response()
Exemples
Renvoyer les lignes enfants correspondantes et les mises en évidence
L'exemple suivant interroge les lignes enfants imbriquées où items.name est égal à alice et renvoie les lignes enfants correspondantes ainsi que les fragments mis en évidence. Les résultats de mise en évidence sont disponibles à l'emplacement search_hits[].search_inner_hits[].search_hits[].highlight_result.
highlight = Highlight([HighlightParameter("items.name")])
inner_hits = InnerHits(
sort=None,
offset=0,
limit=10,
highlight=highlight,
)
query = NestedQuery(
"items",
TermQuery("items.name", "alice"),
inner_hits=inner_hits,
)
response = client.search(
"example_table",
"example_index",
SearchQuery(query, limit=10),
)
for search_hit in response.search_hits:
for inner_hit in search_hit.search_inner_hits:
for child_hit in inner_hit.search_hits:
print(child_hit.row)
print(child_hit.highlight_result.highlight_fields)