As consultas geográficas classificam-se nos seguintes tipos: consulta por distância geográfica, consulta por caixa delimitadora geográfica e consulta por polígono geográfico.
Pré-requisitos
Inicialize um cliente do Tablestore. Para mais informações, consulte Inicializar um cliente do Tablestore.
Crie uma tabela de dados e grave dados nela. Para mais informações, consulte Criar uma tabela de dados e Gravar dados.
Crie um índice de busca para a tabela de dados. Para mais informações, consulte Criar um índice de busca.
Consulta por distância geográfica
Para executar uma consulta por distância geográfica, especifique uma área geográfica circular definindo um ponto central e um raio. O Tablestore retorna as linhas em que o valor de uma coluna específica está dentro dessa área circular.
-
Parâmetros
Parameter
Description
fieldName
Nome da coluna a consultar. O valor deste parâmetro deve ser do tipo de dados GEOPOINT.
centerPoint
Par de coordenadas do ponto central, composto por valores de latitude e longitude.
O valor deve seguir o formato
latitude,longitude. Valores válidos de latitude:[-90,+90]. Valores válidos de longitude:[-180,+180]. Exemplo:35,8,-45,91.distanceInMeter
Raio da área geográfica circular. O valor é do tipo de dados DOUBLE. Unidade: metros.
getTotalCount
Define se o número total de linhas correspondentes aos critérios da consulta será retornado. O valor padrão é false, indicando que a contagem total não é retornada.
Definir este parâmetro como true pode comprometer o desempenho da consulta.
query
Instrução de consulta para o índice de busca. Defina este parâmetro como GeoDistanceQuery.
tableName
Nome da tabela de dados.
indexName
Nome do índice de busca.
columnsToGet
Indica se todas as colunas de cada linha correspondente devem ser retornadas. Configure os campos returnAll e columns neste parâmetro.
Por padrão, o campo returnAll é false, ou seja, nem todas as colunas são retornadas. Nesse caso, utilize o campo columns para especificar quais colunas deseja obter. Sem essa especificação, apenas as colunas de chave primária serão devolvidas.
Se o campo returnAll for definido como true, todas as colunas serão retornadas.
-
Exemplos
O código de exemplo abaixo demonstra como consultar linhas onde o valor da coluna Col_GeoPoint está dentro de uma distância específica do ponto central.
public static void geoDistanceQuery(SyncClient client) { SearchQuery searchQuery = new SearchQuery(); GeoDistanceQuery geoDistanceQuery = new GeoDistanceQuery(); // Use GeoDistanceQuery. geoDistanceQuery.setFieldName("Col_GeoPoint"); geoDistanceQuery.setCenterPoint("5,5"); // Specify the coordinates of the central point. geoDistanceQuery.setDistanceInMeter(10000); // Set the distance from the central point to a value greater than or equal to 10,000. Unit: meter. searchQuery.setQuery(geoDistanceQuery); //searchQuery.setGetTotalCount(true); // Set the GetTotalCount parameter to true to return the total number of rows that meet the query conditions. SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery); // You can use the columnsToGet parameter to specify the columns that you want to return or specify that all columns are returned. If you do not specify this parameter, only the primary key columns are returned. //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet(); //columnsToGet.setReturnAll(true); // Specify that all columns are returned. //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // Specify the columns that you want to return. //searchRequest.setColumnsToGet(columnsToGet); SearchResponse resp = client.search(searchRequest); //System.out.println("TotalCount: " + resp.getTotalCount()); // Display the total number of rows that meet the query conditions instead of the number of rows that are returned. System.out.println("Row: " + resp.getRows()); }
Consulta por caixa delimitadora geográfica
Na consulta por caixa delimitadora geográfica, defina uma área retangular informando o canto superior esquerdo e o canto inferior direito. O Tablestore retorna as linhas cujo valor na coluna especificada se encontra dentro dessa área retangular.
-
Parâmetros
Parameter
Description
fieldName
Nome da coluna a consultar. O valor deste parâmetro deve ser do tipo de dados GEOPOINT.
topLeft
Par de coordenadas do canto superior esquerdo da área geográfica retangular.
bottomRight
Par de coordenadas do canto inferior direito da área geográfica retangular. A definição desses dois pontos (superior esquerdo e inferior direito) delimita o retângulo.
O formato é
latitude,longitude. Valores válidos de latitude:[-90,+90]. Valores válidos de longitude:[-180,+180]. Exemplo:35,8,-45,91.query
Instrução de consulta para o índice de busca. Defina este parâmetro como GeoBoundingBoxQuery.
getTotalCount
Define se o número total de linhas correspondentes aos critérios da consulta será retornado. O valor padrão é false, indicando que a contagem total não é retornada.
Definir este parâmetro como true pode comprometer o desempenho da consulta.
tableName
Nome da tabela de dados.
indexName
Nome do índice de busca.
columnsToGet
Indica se todas as colunas de cada linha correspondente devem ser retornadas. Configure os campos returnAll e columns neste parâmetro.
Por padrão, o campo returnAll é false, ou seja, nem todas as colunas são retornadas. Nesse caso, utilize o campo columns para especificar quais colunas deseja obter. Sem essa especificação, apenas as colunas de chave primária serão devolvidas.
Se o campo returnAll for definido como true, todas as colunas serão retornadas.
-
Exemplos
O trecho de código a seguir ilustra como buscar linhas onde o valor da coluna Col_GeoPoint está dentro da área retangular definida pelo canto superior esquerdo "10,0" e canto inferior direito "0,10":
public static void geoBoundingBoxQuery(SyncClient client) { SearchQuery searchQuery = new SearchQuery(); GeoBoundingBoxQuery geoBoundingBoxQuery = new GeoBoundingBoxQuery(); // Use GeoBoundingBoxQuery. geoBoundingBoxQuery.setFieldName("Col_GeoPoint"); // Specify the name of the column that you want to query. geoBoundingBoxQuery.setTopLeft("10,0"); // Specify the coordinates of the upper-left corner of the rectangular geographic area. geoBoundingBoxQuery.setBottomRight("0,10"); // Specify the coordinates of the lower-right corner of the rectangular geographic area. searchQuery.setQuery(geoBoundingBoxQuery); //searchQuery.setGetTotalCount(true); // Set the GetTotalCount parameter to true to return the total number of rows that meet the query conditions. SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery); // You can use the columnsToGet parameter to specify the columns that you want to return or specify that all columns are returned. If you do not specify this parameter, only the primary key columns are returned. //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet(); //columnsToGet.setReturnAll(true); // Specify that all columns are returned. //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // Specify the columns that you want to return. //searchRequest.setColumnsToGet(columnsToGet); SearchResponse resp = client.search(searchRequest); //System.out.println("TotalCount: " + resp.getTotalCount()); // Display the total number of rows that meet the query conditions instead of the number of rows that are returned. System.out.println("Row: " + resp.getRows()); }
Consulta por polígono geográfico
Para executar uma consulta por polígono geográfico, defina uma área poligonal fornecendo pares de coordenadas de múltiplos pontos. O Tablestore retorna as linhas em que o valor da coluna indicada está dentro dessa área poligonal.
-
Parâmetros
Parameter
Description
fieldName
Nome da coluna a consultar. O valor deste parâmetro deve ser do tipo de dados GEOPOINT.
points
Pares de coordenadas dos pontos que formam a área geográfica poligonal.
O valor deve seguir o formato
latitude,longitude. Valores válidos de latitude:[-90,+90]. Valores válidos de longitude:[-180,+180]. Exemplo:35,8,-45,91.query
Instrução de consulta para o índice de busca. Defina este parâmetro como GeoPolygonQuery.
getTotalCount
Define se o número total de linhas correspondentes aos critérios da consulta será retornado. O valor padrão é false, indicando que a contagem total não é retornada.
Definir este parâmetro como true pode comprometer o desempenho da consulta.
tableName
Nome da tabela de dados.
indexName
Nome do índice de busca.
columnsToGet
Indica se todas as colunas de cada linha correspondente devem ser retornadas. Configure os campos returnAll e columns neste parâmetro.
Por padrão, o campo returnAll é false, ou seja, nem todas as colunas são retornadas. Nesse caso, utilize o campo columns para especificar quais colunas deseja obter. Sem essa especificação, apenas as colunas de chave primária serão devolvidas.
Se o campo returnAll for definido como true, todas as colunas serão retornadas.
-
Exemplos
O exemplo de código abaixo mostra como recuperar linhas onde o valor da coluna Col_GeoPoint está contido na área poligonal especificada.
public static void geoPolygonQuery(SyncClient client) { SearchQuery searchQuery = new SearchQuery(); GeoPolygonQuery geoPolygonQuery = new GeoPolygonQuery(); // Use GeoPolygonQuery. geoPolygonQuery.setFieldName("Col_GeoPoint"); geoPolygonQuery.setPoints(Arrays.asList("0,0","5,5","5,0")); // Specify the coordinates of the vertices of a polygon geographic area. searchQuery.setQuery(geoPolygonQuery); //searchQuery.setGetTotalCount(true); // Set the GetTotalCount parameter to true to return the total number of rows that meet the query conditions. SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery); // You can use the columnsToGet parameter to specify the columns that you want to return or specify that all columns are returned. If you do not specify this parameter, only the primary key columns are returned. //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet(); //columnsToGet.setReturnAll(true); // Specify that all columns are returned. //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // Specify the columns that you want to return. //searchRequest.setColumnsToGet(columnsToGet); SearchResponse resp = client.search(searchRequest); //System.out.println("TotalCount: " + resp.getTotalCount()); // Display the total number of rows that meet the query conditions instead of the number of rows that are returned. System.out.println("Row: " + resp.getRows()); }
FAQ
Referências
-
Ao utilizar um índice de busca para consultar dados, você tem à disposição os seguintes métodos: consulta por termo, consulta por termos, consulta match all, consulta match, consulta match phrase, consulta por prefixo, consulta por intervalo, consulta por curinga, consulta geográfica, consulta vetorial KNN, consulta booleana, consulta aninhada e consulta exists. Após criar o índice de busca, utilize esses métodos para consultar dados sob múltiplas dimensões, conforme as necessidades do seu negócio.
Ordene ou pagine as linhas resultantes utilizando os recursos de classificação e paginação. Para mais detalhes, consulte Realizar classificação e paginação.
Utilize o recurso de colapso (distinct) para agrupar resultados com base em uma coluna específica, garantindo que dados desse tipo apareçam apenas uma vez no resultado da consulta. Para mais informações, consulte Colapso (distinct).
Para analisar dados de uma tabela, chame a operação Search para usar o recurso de agregação ou utilize a funcionalidade de consulta SQL. Isso permite obter valores máximos, mínimos, somatórios e contagem de linhas, entre outros. Para mais informações, consulte Agregação e Consulta SQL.
Para obter todas as linhas correspondentes sem necessidade de ordenação, utilize o recurso de varredura paralela chamando as operações ParallelScan e ComputeSplits. Para mais detalhes, consulte Varredura paralela.