As consultas geográficas dividem-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
Instância OTSClient inicializada. Para mais informações, consulte Inicializar uma instância OTSClient.
Tabela de dados criada e preenchida. Para mais informações, consulte Criar uma tabela de dados e Gravar dados.
Índice de pesquisa criado para a tabela de dados. Para mais informações, consulte Criar índices de pesquisa.
Consulta por distância geográfica
Na consulta por distância geográfica, defina uma área circular a partir de 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
Parâmetro
Descrição
FieldName
Nome da coluna usada para atender às condições da consulta. O valor deste parâmetro deve ser do tipo de dados GEOPOINT.
CenterPoint
Par de coordenadas do ponto central, composto por 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 deste parâmetro é do tipo de dados DOUBLE. Unidade: metros.
Query
Tipo da consulta. Defina o tipo de consulta como GeoDistanceQuery.
TableName
Nome da tabela de dados.
IndexName
Nome do índice de pesquisa.
-
Código de exemplo
O código abaixo mostra como consultar linhas em que o valor de Col_GeoPoint está dentro de uma área geográfica circular:
func GeoDistanceQuery(client *tablestore.TableStoreClient, tableName string, indexName string) { searchRequest := &tablestore.SearchRequest{} searchRequest.SetTableName(tableName) searchRequest.SetIndexName(indexName) query := &search.GeoDistanceQuery{} // Set the query type to GeoDistanceQuery. query.FieldName = "Col_GeoPoint" query.CenterPoint = "5.5" // Specify the coordinate pair of the central point. query.DistanceInMeter = 10000.0 // Set the radius of the circular geographical area to 10,000. Unit: meter. searchQuery := search.NewSearchQuery() searchQuery.SetQuery(query) searchRequest.SetSearchQuery(searchQuery) // Return all columns. searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{ ReturnAll:true, }) searchResponse, err := client.Search(searchRequest) if err != nil { fmt.Printf("%#v", err) return } fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // Check whether all rows that meet the query conditions are returned. fmt.Println("TotalCount: ", searchResponse.TotalCount) // Display the total number of rows that meet the query conditions instead of the number of returned rows. fmt.Println("RowCount: ", len(searchResponse.Rows)) for _, row := range searchResponse.Rows { jsonBody, err := json.Marshal(row) if err != nil { panic(err) } fmt.Println("Row: ", string(jsonBody)) } }
Consulta por caixa delimitadora geográfica
Para executar uma consulta por caixa delimitadora geográfica, especifique uma área retangular usando o canto superior esquerdo e o canto inferior direito. O Tablestore retorna as linhas cujo valor em uma coluna específica esteja contido nessa área retangular.
-
Parâmetros
Parâmetro
Descrição
FieldName
Nome da coluna usada para atender às condições da consulta. 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. Os pares de coordenadas dos cantos superior esquerdo e inferior direito definem uma área retangular única.
O valor deve estar no formato "latitude,longitude". Intervalo válido para latitude: [-90,90]. Intervalo válido para longitude: [-180,180]. Exemplo: “35,8,-45,91".
Query
Tipo da consulta. Defina o tipo de consulta como GeoBoundingBoxQuery.
TableName
Nome da tabela de dados.
IndexName
Nome do índice de pesquisa.
-
Código de exemplo
O exemplo a seguir demonstra como buscar linhas em que o valor de Col_GeoPoint está dentro de uma área retangular definida pelo canto superior esquerdo em '10,0' e canto inferior direito em '0,10':
func GeoBoundingBoxQuery(client *tablestore.TableStoreClient, tableName string, indexName string) { searchRequest := &tablestore.SearchRequest{} searchRequest.SetTableName(tableName) searchRequest.SetIndexName(indexName) query := &search.GeoBoundingBoxQuery{} // Set the query type to GeoBoundingBoxQuery. query.FieldName = "Col_GeoPoint" // Specify the name of the column that you want to query. query.TopLeft = "10.0" // Specify the coordinate pair of the upper-left corner of the rectangular geographic area. query.BottomRight = "0.10" // Specify the coordinate pair of the lower-right corner of the rectangular geographic area. searchQuery := search.NewSearchQuery() searchQuery.SetQuery(query) searchRequest.SetSearchQuery(searchQuery) // Return all columns in the rows that meet the query conditions. searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{ ReturnAll:true, }) searchResponse, err := client.Search(searchRequest) if err != nil { fmt.Printf("%#v", err) return } fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // Check whether all rows that meet the query conditions are returned. fmt.Println("TotalCount: ", searchResponse.TotalCount) // Display the total number of rows that meet the query conditions instead of the number of returned rows. fmt.Println("RowCount: ", len(searchResponse.Rows)) for _, row := range searchResponse.Rows { jsonBody, err := json.Marshal(row) if err != nil { panic(err) } fmt.Println("Row: ", string(jsonBody)) } }
Consulta por polígono geográfico
Na consulta por polígono geográfico, delimite uma área poligonal informando os pares de coordenadas de vários pontos. O Tablestore retorna as linhas em que o valor da coluna especificada está dentro desse polígono.
-
Parâmetros
Parâmetro
Descrição
FieldName
Nome da coluna usada para atender às condições da consulta. O valor deste parâmetro deve ser do tipo de dados GEOPOINT.
Points
Pares de coordenadas dos pontos que definem a área geográfica poligonal.
Cada par de coordenadas 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
Tipo da consulta. Defina o tipo de consulta como GeoPolygonQuery.
TableName
Nome da tabela de dados.
IndexName
Nome do índice de pesquisa.
-
Código de exemplo
O código a seguir mostra como consultar linhas em que o valor de Col_GeoPoint está dentro de uma área geográfica poligonal:
func GeoPolygonQuery(client *tablestore.TableStoreClient, tableName string, indexName string) { searchRequest := &tablestore.SearchRequest{} searchRequest.SetTableName(tableName) searchRequest.SetIndexName(indexName) query := &search.GeoPolygonQuery{} // Set the query type to GeoDistanceQuery. query.FieldName = "Col_GeoPoint" query.Points = []string{"0,0","5,5","5,0"} // Specify the coordinate pairs of the vertices of the polygon geographic area. searchQuery := search.NewSearchQuery() searchQuery.SetQuery(query) searchRequest.SetSearchQuery(searchQuery) // Return all columns in the rows that meet the query conditions. searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{ ReturnAll:true, }) searchResponse, err := client.Search(searchRequest) if err != nil { fmt.Printf("%#v", err) return } fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // Check whether all rows that meet the query conditions are returned. fmt.Println("TotalCount: ", searchResponse.TotalCount) // Display the total number of rows that meet the query conditions instead of the number of returned rows. fmt.Println("RowCount: ", len(searchResponse.Rows)) for _, row := range searchResponse.Rows { jsonBody, err := json.Marshal(row) if err != nil { panic(err) } fmt.Println("Row: ", string(jsonBody)) } }
Perguntas frequentes
Referências
-
Ao consultar dados com um índice de pesquisa, utilize 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 booleana, consulta vetorial KNN, consulta aninhada e consulta exists. Use esses métodos para consultar dados em várias dimensões conforme as necessidades do seu negócio.
Use os recursos de ordenação e paginação para classificar ou paginar as linhas que atendem às condições da consulta. Para mais informações, consulte Ordenação e paginação.
Use o recurso de colapso (deduplicação) para agrupar o conjunto de resultados com base em uma coluna específica. Assim, cada valor distinto aparece apenas uma vez nos resultados da consulta. Para mais informações, consulte Colapso (deduplicação).
Para analisar dados de uma tabela de dados, use o recurso de agregação da operação Search ou execute instruções SQL. Por exemplo, obtenha valores mínimos e máximos, soma e contagem total de linhas. Para mais informações, consulte Agregação e Consulta SQL.
Para obter todas as linhas que atendem às condições da consulta sem precisar ordená-las, chame as operações ParallelScan e ComputeSplits para usar o recurso de varredura paralela. Para mais informações, consulte Realizar uma varredura paralela.