Utilisez le SDK Tablestore pour Python pour effectuer des recherches en texte intégral sur les champs Text ou Keyword et renvoyer les données correspondantes.
Prérequis
Installez le SDK Tablestore pour Python et initialisez un client.
Description
Une requête de correspondance (MatchQuery) recherche dans les champs Text ou Keyword (voir Types de chaînes). Pour un champ Text, l'analyseur du champ tokenize le texte de la requête ; les paramètres operator ou minimum_should_match déterminent alors les jetons devant correspondre. Pour un champ Keyword, le texte de la requête n'est pas tokenisé. Une requête de correspondance n'impose ni la consecutivité ni l'ordre des jetons tels qu'ils apparaissent dans le texte de requête. Pour faire correspondre l'ordre et la position des jetons, utilisez une Requête de correspondance de phrase.
MatchQuery(
field_name,
text,
minimum_should_match=None,
operator=None,
weight=None,
)
L'exemple suivant interroge les lignes dont le champ description contient à la fois les jetons tablestore et durable.
query = MatchQuery(
"description",
"tablestore durable",
operator=QueryOperator.AND,
)
response = client.search(
"example_table",
"example_index",
SearchQuery(
query,
sort=Sort([ScoreSort()]),
limit=10,
get_total_count=True,
),
ColumnsToGet(return_type=ColumnReturnType.ALL),
)
for hit in response.search_hits:
print(hit.score, hit.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. Si ce paramètre est omis, seules les colonnes de clé primaire sont renvoyées. |
|
routing_keys (facultatif) |
|
Valeurs de clé primaire des champs de routage personnalisés. Ce paramètre est inutile si le routage personnalisé n'est pas configuré. |
|
timeout_s (facultatif) |
|
Délai d'expiration de la requête, en secondes. À défaut, le délai d'expiration défini au niveau du client s'applique. |
Configuration de la requête
Le paramètre search_query est de type SearchQuery et accepte 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 la section 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) |
|
Jeton de pagination. Transmettez le paramètre |
|
offset (facultatif) |
|
Décalage de départ de la requête. Utilisez ce paramètre pour une pagination peu profonde. |
|
limit (facultatif) |
|
Nombre maximal de lignes à renvoyer. Si ce paramètre vaut |
|
aggs (facultatif) |
|
Configurations d'agrégation de métriques. Pour plus d'informations, consultez la section Agrégation. |
|
group_bys (facultatif) |
|
Configurations de regroupement. Pour plus d'informations, consultez la section Agrégation. |
|
collapse_field (facultatif) |
|
Configuration de réduction des résultats. Pour plus d'informations, consultez la section Réduire les résultats de la requête. |
|
highlight (facultatif) |
|
Configuration de résumé et de mise en évidence pour les champs |
Condition de correspondance
Le paramètre search_query.query est de type MatchQuery et accepte les paramètres suivants.
|
Nom |
Type |
Description |
|
field_name (obligatoire) |
|
Nom du champ |
|
text (obligatoire) |
|
Texte de la requête. Il est tokenisé pour un champ |
|
minimum_should_match (facultatif) |
|
Nombre minimal de jetons de requête devant correspondre lorsque |
|
operator (facultatif) |
|
Mode de combinaison des jetons. |
|
weight (facultatif) |
|
Poids de la requête, qui doit être un nombre à virgule flottante positif. Valeur par défaut : |
Colonnes renvoyées
Le paramètre columns_to_get est de type ColumnsToGet et accepte les paramètres suivants.
|
Nom |
Type |
Description |
|
column_names (facultatif) |
|
Noms des colonnes d'attributs à 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. Leur nombre ne dépasse pas la valeur de |
|
next_token |
|
Jeton pour la page suivante. Une valeur vide indique qu'aucune autre donnée n'est disponible. |
|
total_count |
|
Nombre de lignes correspondantes. La valeur dépend du paramètre |
|
is_all_succeed |
|
Indique si toutes les partitions d'index ont été interrogées. Si la valeur est |
|
agg_results |
|
Résultats de l'agrégation de métriques. Ce champ est vide si le paramètre |
|
group_by_results |
|
Résultats du regroupement. Ce champ est vide si le paramètre |
|
search_hits |
|
Occurrences de recherche, incluant des informations étendues telles que les lignes, les scores de pertinence et les mises en évidence. |
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 la méthode SearchResponse.v1_response() pour obtenir un tuple compatible avec les versions antérieures. Pour le nouveau code, accédez directement aux attributs de l'objet SearchResponse afin d'éviter les erreurs de décompression 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()
Exemples
Spécifier le nombre minimal de jetons correspondants
L'exemple suivant exige qu'au moins deux jetons du texte de requête tokenisé correspondent.
query = MatchQuery(
"description",
"tablestore durable cloud",
operator=QueryOperator.OR,
minimum_should_match=2,
)
response = client.search(
"example_table",
"example_index",
SearchQuery(query, limit=10),
)
print(response.rows)