Use o Tablestore SDK for Python para filtrar dados por distância de um ponto central, caixa delimitadora ou polígono.
Pré-requisitos
Instale o Tablestore SDK for Python e inicialize um cliente.
Descrição
Consultas geográficas filtram dados com base na localização geográfica em um campo GeoPoint. Você pode consultar por distância, caixa delimitadora ou polígono. Ao chamar o método search, defina o tipo de consulta como GeoDistanceQuery, GeoBoundingBoxQuery ou GeoPolygonQuery, conforme o intervalo geográfico necessário.
GeoDistanceQuery(field_name, center_point, distance)
GeoBoundingBoxQuery(field_name, top_left, bottom_right)
GeoPolygonQuery(field_name, points)
O exemplo a seguir consulta linhas em que o campo location está a no máximo 200.000 metros de 30.25,120.16. A consulta retorna até 10 linhas e o total de linhas correspondentes.
query = GeoDistanceQuery("location", "30.25,120.16", 200000)
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)
Parâmetros
Solicitação de busca
O método search contém os seguintes parâmetros.
|
Nome |
Tipo |
Descrição |
|
table_name (obrigatório) |
|
Nome da tabela de dados. |
|
index_name (obrigatório) |
|
Nome do índice de busca. |
|
search_query (obrigatório) |
|
Condição de consulta e configurações comuns de pesquisa. |
|
columns_to_get (opcional) |
|
Configuração das colunas de retorno. Se você não especificar este parâmetro, o sistema retornará apenas as colunas de chave primária. |
|
routing_keys (opcional) |
|
Lista de valores de chave primária para campos de roteamento personalizado. Não é necessário especificar este parâmetro se o roteamento personalizado não estiver configurado. |
|
timeout_s (opcional) |
|
Tempo limite da solicitação em segundos. Caso você não especifique este parâmetro, o sistema usará o tempo limite no nível do cliente. |
Configuração de consulta
O parâmetro search_query é do tipo SearchQuery e contém os seguintes parâmetros.
|
Nome |
Tipo |
Descrição |
|
query (obrigatório) |
|
Condição da consulta. Defina este parâmetro como |
|
sort (opcional) |
|
Ordem de classificação dos resultados da consulta. Para mais informações, consulte Sort and paginate results. |
|
get_total_count (opcional) |
|
Indica se deve retornar o número total de linhas correspondentes. Valor padrão: |
|
next_token (opcional) |
|
Token de paginação. Defina este parâmetro com o valor |
|
offset (opcional) |
|
Deslocamento inicial da consulta atual. Use este parâmetro para paginação superficial. |
|
limit (opcional) |
|
Número máximo de linhas a retornar. Se definido como |
|
aggs (opcional) |
|
Configurações de agregação. Para mais informações, consulte Aggregation. |
|
group_bys (opcional) |
|
Configurações de agrupamento. Para mais informações, consulte Aggregation. |
|
collapse_field (opcional) |
|
Configuração de colapso de resultados. Este recurso remove duplicatas com base em um campo especificado. Para mais informações, consulte Collapse query results. |
As coordenadas nos três tipos de consulta usam o formato latitude,longitude. A latitude precede a longitude. O intervalo de latitude é [-90,+90] e o de longitude é [-180,+180]. Exemplo: 35.8,-45.91.
Condição de distância geográfica
O parâmetro search_query.query é do tipo GeoDistanceQuery e contém os seguintes parâmetros.
|
Nome |
Tipo |
Descrição |
|
field_name (obrigatório) |
|
Nome do campo |
|
center_point (obrigatório) |
|
Coordenadas do ponto central. |
|
distance (obrigatório) |
|
Distância máxima do ponto central. Unidade: metros. |
Condição de caixa delimitadora geográfica
O parâmetro search_query.query é do tipo GeoBoundingBoxQuery e contém os seguintes parâmetros.
|
Nome |
Tipo |
Descrição |
|
field_name (obrigatório) |
|
Nome do campo |
|
top_left (obrigatório) |
|
Coordenadas do canto superior esquerdo. |
|
bottom_right (obrigatório) |
|
Coordenadas do canto inferior direito. |
Condição de polígono geográfico
O parâmetro search_query.query é do tipo GeoPolygonQuery e contém os seguintes parâmetros.
|
Nome |
Tipo |
Descrição |
|
field_name (obrigatório) |
|
Nome do campo |
|
points (obrigatório) |
|
Lista de coordenadas que formam o polígono. Especifique as coordenadas na ordem do perímetro. |
Colunas de retorno
O parâmetro columns_to_get é do tipo ColumnsToGet e contém os seguintes parâmetros.
|
Nome |
Tipo |
Descrição |
|
column_names (opcional) |
|
Nomes das colunas de atributo a retornar. Especifique este parâmetro apenas quando |
|
return_type (opcional) |
|
Modo de retorno das colunas. |
Resposta
O método search retorna um objeto SearchResponse. A tabela a seguir descreve os campos principais.
|
Campo |
Tipo |
Descrição |
|
rows |
|
Linhas retornadas pela consulta atual. A quantidade não excede o valor de |
|
next_token |
|
Token para a próxima página. Se este campo não estiver vazio, passe-o para a próxima solicitação e continue a leitura. |
|
total_count |
|
Número de linhas correspondentes. O valor depende da configuração |
|
is_all_succeed |
|
Indica se todas as partições do índice foram consultadas. Se o valor for |
|
agg_results |
|
Resultados da agregação. Este campo fica vazio se |
|
group_by_results |
|
Resultados do agrupamento. Este campo fica vazio se |
|
search_hits |
|
Resultados da busca, incluindo informações estendidas como pontuações de relevância, destaques e linhas filhas correspondentes. |
Resposta compatível com tupla
A partir do Tablestore SDK for Python 5.2.0, as APIs de busca retornam objetos de resposta em vez de tuplas. As versões 5.1.0 e anteriores retornavam tuplas diretamente. Na versão 5.2.1 e posteriores, chame SearchResponse.v1_response() para obter uma tupla compatível com versões anteriores. Em novos códigos, acesse os atributos de SearchResponse diretamente para evitar erros de desempacotamento caso novos campos sejam adicionados à resposta.
(
rows,
next_token,
total_count,
is_all_succeed,
agg_results,
group_by_results,
search_hits,
) = response.v1_response()
Exemplos
Consultar dados em uma caixa delimitadora
O exemplo abaixo consulta dados dentro da caixa delimitadora definida pelo canto superior esquerdo 32.0,119.0 e canto inferior direito 29.0,122.0.
query = GeoBoundingBoxQuery(
"location",
"32.0,119.0",
"29.0,122.0",
)
response = client.search(
"example_table",
"example_index",
SearchQuery(query, limit=10),
ColumnsToGet(return_type=ColumnReturnType.ALL),
)
print(response.rows)
Consultar dados em um polígono
Este exemplo consulta dados dentro do polígono formado por quatro coordenadas.
query = GeoPolygonQuery(
"location",
[
"29.0,119.0",
"32.0,119.0",
"32.0,122.0",
"29.0,122.0",
],
)
response = client.search(
"example_table",
"example_index",
SearchQuery(query, limit=10),
ColumnsToGet(return_type=ColumnReturnType.ALL),
)
print(response.rows)