Utilisez le SDK Tablestore pour Python afin de combiner plusieurs conditions de recherche à l'aide des opérateurs logiques ET, OU et NON.
Prérequis
Installez le SDK Tablestore pour Python et initialisez un client.
Description
Une requête booléenne utilise BoolQuery pour combiner plusieurs sous-requêtes en une condition complexe. Une sous-requête peut être de n'importe quel type ou une autre BoolQuery. Les paramètres must_queries et filter_queries représentent l'opérateur ET (AND), should_queries représente l'opérateur OU (OR) et must_not_queries représente l'opérateur NON (NOT). Les paramètres filter_queries et must_not_queries n'influencent pas le score de pertinence.
Si minimum_should_match n'est pas spécifié, should_queries est facultatif lorsque must_queries ou filter_queries existe au même niveau. Dans les autres cas contenant should_queries, au moins une sous-requête should_queries doit correspondre par défaut.
BoolQuery(
must_queries=None,
must_not_queries=None,
filter_queries=None,
should_queries=None,
minimum_should_match=None,
weight=None,
)
L'exemple suivant interroge les lignes où city est égal à hangzhou et category est égal à book.
query = BoolQuery(
must_queries=[
TermQuery("city", "hangzhou"),
TermQuery("category", "book"),
]
)
response = client.search(
"example_table",
"example_index",
SearchQuery(query, limit=10, get_total_count=True),
ColumnsToGet(return_type=ColumnReturnType.ALL),
)
print(response.rows)
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 recherche et configurations courantes de la requête. |
|
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 configuré 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 recherche. Définissez ce paramètre sur |
|
sort (facultatif) |
|
Ordre de tri des résultats. Pour plus d'informations, consultez la rubrique 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. Transmettez |
|
offset (facultatif) |
|
Décalage à partir duquel la requête commence. Utilisez ce paramètre pour une pagination superficielle. |
|
limit (facultatif) |
|
Nombre maximal de lignes à renvoyer. Si ce paramètre est défini sur |
|
aggs (facultatif) |
|
Configurations d'agrégation de métriques. Pour plus d'informations, consultez la rubrique Agrégation. |
|
group_bys (facultatif) |
|
Configurations de regroupement. Pour plus d'informations, consultez la rubrique Agrégation. |
|
collapse_field (facultatif) |
|
Configuration de la réduction des résultats. Pour plus d'informations, consultez la rubrique Réduction des résultats de recherche. |
|
highlight (facultatif) |
|
Configuration du résumé et de la mise en surbrillance pour les champs |
Condition de requête booléenne
Le paramètre search_query.query est de type BoolQuery et accepte les paramètres suivants.
|
Nom |
Type |
Description |
|
must_queries (facultatif) |
|
Sous-requêtes qui doivent toutes correspondre. Les sous-requêtes correspondantes contribuent au score de pertinence. |
|
filter_queries (facultatif) |
|
Sous-requêtes qui doivent toutes correspondre mais ne contribuent pas au score de pertinence. |
|
should_queries (facultatif) |
|
Sous-requêtes dont un nombre minimal spécifié doit correspondre. Le fait que davantage de conditions correspondent augmente le score de pertinence. |
|
must_not_queries (facultatif) |
|
Sous-requêtes qui ne doivent pas correspondre. Elles ne contribuent pas au score de pertinence. |
|
minimum_should_match (facultatif) |
|
Nombre minimal de sous-requêtes |
|
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'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. Le nombre ne dépasse pas |
|
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 de |
|
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 |
|
group_by_results |
|
Résultats du regroupement. Ce champ est vide si |
|
search_hits |
|
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 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()
Exemples
Combiner les conditions OU, NON et filtre
L'exemple suivant exige que les lignes appartiennent à une catégorie commençant par book-, correspondent à au moins l'une des catégories Python ou Java et n'aient pas le statut deprecated.
query = BoolQuery(
filter_queries=[PrefixQuery("category", "book-")],
should_queries=[
TermQuery("category", "book-python"),
TermQuery("category", "book-java"),
],
must_not_queries=[TermQuery("status", "deprecated")],
minimum_should_match=1,
)
response = client.search(
"example_table",
"example_index",
SearchQuery(query, limit=10),
)
print(response.rows)