Utilice Tablestore SDK for Python para combinar varias condiciones de consulta mediante la lógica AND, OR y NOT.
Requisitos previos
Instale Tablestore SDK for Python e inicialice un cliente.
Descripción
Una consulta booleana utiliza BoolQuery para combinar varias consultas secundarias en una condición compleja. Una consulta secundaria puede ser de cualquier tipo u otra BoolQuery. must_queries y filter_queries representan AND, should_queries representa OR, y must_not_queries representa NOT. filter_queries y must_not_queries no contribuyen a las puntuaciones de relevancia.
Si no se especifica minimum_should_match, should_queries es opcional cuando existen must_queries o filter_queries en el mismo nivel. En otros casos que contienen should_queries, como mínimo una consulta secundaria de should_queries debe coincidir de forma predeterminada.
BoolQuery(
must_queries=None,
must_not_queries=None,
filter_queries=None,
should_queries=None,
minimum_should_match=None,
weight=None,
)
El siguiente ejemplo consulta filas donde city es hangzhou y category es 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)
Parámetros
Solicitud de búsqueda
El método search contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
table_name (obligatorio) |
|
El nombre de la tabla de datos. |
|
index_name (obligatorio) |
|
El nombre del índice de búsqueda. |
|
search_query (obligatorio) |
|
La condición de consulta y las configuraciones comunes de la consulta. |
|
columns_to_get (opcional) |
|
La configuración de columnas a devolver. Si no se especifica este parámetro, solo se devuelven las columnas de clave principal. |
|
routing_keys (opcional) |
|
Los valores de clave principal de los campos de enrutamiento personalizados. Este parámetro no es necesario si no se ha configurado el enrutamiento personalizado. |
|
timeout_s (opcional) |
|
El tiempo de espera de la solicitud en segundos. Si no se especifica este parámetro, se utiliza el tiempo de espera a nivel de cliente. |
Configuración de la consulta
search_query es de tipo SearchQuery y contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
query (obligatorio) |
|
La condición de consulta. Establezca este parámetro en |
|
sort (opcional) |
|
El orden de clasificación de los resultados. Para obtener más información, consulte Sort and paginate results. |
|
get_total_count (opcional) |
|
Especifica si se debe devolver el número total de filas coincidentes. Valor predeterminado: |
|
next_token (opcional) |
|
El token de paginación. Pase |
|
offset (opcional) |
|
El desplazamiento desde el cual comienza la consulta. Utilice este parámetro para la paginación superficial. |
|
limit (opcional) |
|
El número máximo de filas a devolver. Si este parámetro se establece en |
|
aggs (opcional) |
|
Las configuraciones de agregación de métricas. Para obtener más información, consulte Aggregation. |
|
group_bys (opcional) |
|
Las configuraciones de agrupamiento. Para obtener más información, consulte Aggregation. |
|
collapse_field (opcional) |
|
La configuración de colapso de resultados. Para obtener más información, consulte Collapse query results. |
|
highlight (opcional) |
|
La configuración de resumen y resaltado para campos |
Condición de consulta booleana
search_query.query es de tipo BoolQuery y contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
must_queries (opcional) |
|
Las consultas secundarias que deben coincidir en su totalidad. Las consultas secundarias coincidentes contribuyen a las puntuaciones de relevancia. |
|
filter_queries (opcional) |
|
Las consultas secundarias que deben coincidir en su totalidad, pero no contribuyen a las puntuaciones de relevancia. |
|
should_queries (opcional) |
|
Las consultas secundarias de las cuales debe coincidir un número mínimo especificado. Coincidir con más condiciones aumenta la puntuación de relevancia. |
|
must_not_queries (opcional) |
|
Las consultas secundarias que no deben coincidir. No contribuyen a las puntuaciones de relevancia. |
|
minimum_should_match (opcional) |
|
El número mínimo de consultas secundarias de |
|
weight (opcional) |
|
El peso de la consulta, que debe ser un número de punto flotante positivo. Valor predeterminado: |
Columnas de retorno
columns_to_get es de tipo ColumnsToGet y contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
column_names (opcional) |
|
Los nombres de las columnas de atributos a devolver. Especifique este parámetro solo cuando |
|
return_type (opcional) |
|
El modo de columnas de retorno. |
Respuesta
El método search devuelve SearchResponse. La siguiente tabla describe los campos principales.
|
Campo |
Tipo |
Descripción |
|
rows |
|
Las filas devueltas por la consulta. El número no excede |
|
next_token |
|
El token para la página siguiente. Un valor vacío indica que no hay más datos disponibles. |
|
total_count |
|
El número de filas coincidentes. El valor depende de |
|
is_all_succeed |
|
Indica si se consultaron todas las particiones del índice. Si el valor es |
|
agg_results |
|
Los resultados de la agregación de métricas. Este campo está vacío si no se configura |
|
group_by_results |
|
Los resultados del agrupamiento. Este campo está vacío si no se configura |
|
search_hits |
|
Los aciertos de búsqueda, que incluyen información extendida como filas, puntuaciones de relevancia y resaltados. |
Respuesta compatible con tuplas
A partir de Tablestore SDK for Python 5.2.0, las API de búsqueda devuelven objetos de respuesta en lugar de tuplas. La versión 5.1.0 y anteriores devuelven tuplas directamente. En la versión 5.2.1 y posteriores, puede llamar a SearchResponse.v1_response() para obtener una tupla compatible con versiones anteriores. Para código nuevo, acceda directamente a los atributos de SearchResponse para evitar errores de desempaquetado si se extienden los campos de respuesta.
(
rows,
next_token,
total_count,
is_all_succeed,
agg_results,
group_by_results,
search_hits,
) = response.v1_response()
Ejemplos
Combinar condiciones OR, NOT y de filtro
El siguiente ejemplo requiere que las filas pertenezcan a una categoría book-, coincidan con al menos una de las categorías Python o Java, y no tengan el estado 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)