Las consultas geográficas se clasifican en los siguientes tipos: geo-distance query, geo-bounding box query y geo-polygon query.
Requisitos previos
Se inicializó una instancia de OTSClient. Para obtener más información, consulte Initialize an OTSClient instance.
Se creó una tabla de datos y se escribieron datos en ella. Para obtener más información, consulte Create data tables y Write data.
Se creó un índice de búsqueda para la tabla de datos. Para obtener más información, consulte Create search indexes.
Geo-distance query
Para ejecutar una geo-distance query, especifique un área geográfica circular mediante un punto central y un radio. Tablestore devuelve las filas donde el valor de una columna específica se encuentra dentro de dicha área geográfica circular.
-
Parámetros
Parámetro
Descripción
FieldName
Nombre de la columna que desea consultar. El valor de este parámetro es del tipo de datos GEOPOINT.
CenterPoint
Par de coordenadas del punto central. Este par está formado por valores de latitud y longitud.
El par de coordenadas utiliza el formato latitud,longitud. Valores válidos de latitud: [-90,+90]. Valores válidos de longitud: [-180,+180]. Ejemplo: "35.8,-45.91".
DistanceInMeter
Radio del área geográfica circular. El valor de este parámetro es del tipo de datos DOUBLE. Unidad: metros.
Query
Instrucción de consulta para el índice de búsqueda. Establezca el tipo de consulta como GeoDistanceQuery.
TableName
Nombre de la tabla de datos.
IndexName
Nombre del índice de búsqueda.
ColumnsToGet
Indica si se devuelven todas las columnas de las filas que cumplen las condiciones de la consulta. Puede especificar los parámetros ReturnAll, Columns y ReturnAllFromIndex.
De forma predeterminada,
ReturnAllesfalse, lo que significa que solo se devuelven las columnas de la clave principal. Para devolver columnas adicionales, utilice una de las siguientes opciones:-
Establezca
Columnspara indicar qué columnas se deben devolver. -
Establezca
ReturnAllFromIndexentruepara devolver todas las columnas del índice de búsqueda.
Establezca
ReturnAllentruepara devolver todas las columnas de la tabla de datos. -
-
Ejemplo
A continuación se muestra un código de ejemplo para consultar las filas donde el valor de la columna geo_type_col se encuentra dentro de un área geográfica circular en una tabla.
/// <summary> /// Query the rows in which the value of the geo_type_col column falls within a circular geographical area in a table. /// </summary> /// <param name="client"></param> public static void GeoDistanceQuery(OTSClient client) { SearchQuery searchQuery = new SearchQuery(); GeoDistanceQuery geoDistanceQuery = new GeoDistanceQuery(); // Set the query type to GeoDistanceQuery. geoDistanceQuery.FieldName = Geo_type_col; geoDistanceQuery.CenterPoint = "10,11"; // Specify the coordinate pair for a central point. geoDistanceQuery.DistanceInMeter = 10000; // Set the radius of the circular geographical area to 10,000. Unit: meter. searchQuery.Query = geoDistanceQuery; SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery); ColumnsToGet columnsToGet = new ColumnsToGet(); columnsToGet.Columns = new List<string>() { Geo_type_col }; // Specify that the Geo_type_col column is returned. searchRequest.ColumnsToGet = columnsToGet; SearchResponse response = client.Search(searchRequest); Console.WriteLine(response.TotalCount); }
Geo-bounding box query
Para ejecutar una geo-bounding box query, especifique un área geográfica rectangular mediante una esquina superior izquierda y una esquina inferior derecha. Tablestore devuelve las filas donde el valor de una columna específica se encuentra dentro de dicha área geográfica rectangular.
-
Parámetros
Parámetro
Descripción
FieldName
Nombre de la columna que desea consultar. El valor de este parámetro es del tipo de datos GEOPOINT.
TopLeft
Par de coordenadas de la esquina superior izquierda del área geográfica rectangular.
BottomRight
Par de coordenadas de la esquina inferior derecha del área geográfica rectangular. Los pares de coordenadas de ambas esquinas definen un área geográfica rectangular única.
El par de coordenadas utiliza el formato latitud,longitud. Valores válidos de latitud: [-90,+90]. Valores válidos de longitud: [-180,+180]. Ejemplo: "35.8,-45.91".
Query
Instrucción de consulta para el índice de búsqueda. Establezca el tipo de consulta como GeoBoundingBoxQuery.
TableName
Nombre de la tabla de datos.
IndexName
Nombre del índice de búsqueda.
ColumnsToGet
Indica si se devuelven todas las columnas de las filas que cumplen las condiciones de la consulta. Puede especificar los parámetros ReturnAll, Columns y ReturnAllFromIndex.
De forma predeterminada,
ReturnAllesfalse, lo que significa que solo se devuelven las columnas de la clave principal. Para devolver columnas adicionales, utilice una de las siguientes opciones:-
Establezca
Columnspara indicar qué columnas se deben devolver. -
Establezca
ReturnAllFromIndexentruepara devolver todas las columnas del índice de búsqueda.
Establezca
ReturnAllentruepara devolver todas las columnas de la tabla de datos. -
-
Ejemplo
A continuación se muestra un código de ejemplo para consultar las filas donde el valor de la columna geo_type_col se encuentra dentro de un área geográfica rectangular. Esta área tiene su esquina superior izquierda en "10,0" y su esquina inferior derecha en "0,10".
/// <summary> /// Query the rows in which the value of the geo_type_col column is within a rectangular geographical area in a table. The value of the geo_type_col column is of the GEOPOINT data type. The rectangular geographical area is specified by an upper-left corner whose coordinate pair is "10,0" and a lower-right corner whose coordinate pair is "0,10". /// </summary> /// <param name="client"></param> public static void GeoBoundingBoxQuery(OTSClient client) { SearchQuery searchQuery = new SearchQuery(); GeoBoundingBoxQuery geoBoundingBoxQuery = new GeoBoundingBoxQuery(); // Set the query type to GeoBoundingBoxQuery. geoBoundingBoxQuery.FieldName = Geo_type_col; // Specify the name of the column that you want to query. geoBoundingBoxQuery.TopLeft = "10,0"; // Specify the coordinate pair for the upper-left corner of the rectangular geographical area. geoBoundingBoxQuery.BottomRight = "0,10"; // Specify coordinate pair for the lower-right corner of the rectangular geographical area. searchQuery.Query = geoBoundingBoxQuery; SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery); var columnsToGet = new ColumnsToGet(); columnsToGet.Columns = new List<string> { Geo_type_col }; // Specify that the Geo_type_col column is returned. searchRequest.ColumnsToGet = columnsToGet; SearchResponse response = client.Search(searchRequest); Console.WriteLine(response.TotalCount); }
Geo-polygon query
Para ejecutar una geo-polygon query, especifique un área geográfica poligonal mediante los pares de coordenadas de varios puntos. Tablestore devuelve las filas donde el valor de una columna específica se encuentra dentro de dicha área geográfica poligonal.
-
Parámetros
Parámetro
Descripción
FieldName
Nombre de la columna que desea consultar. El valor de este parámetro es del tipo de datos GEOPOINT.
Points
Pares de coordenadas de los puntos que definen un área geográfica poligonal.
El par de coordenadas utiliza el formato latitud,longitud. Valores válidos de latitud: [-90,+90]. Valores válidos de longitud: [-180,+180]. Ejemplo: "35.8,-45.91".
Query
Instrucción de consulta para el índice de búsqueda. Establezca el tipo de consulta como GeoPolygonQuery.
TableName
Nombre de la tabla de datos.
IndexName
Nombre del índice de búsqueda.
ColumnsToGet
Indica si se devuelven todas las columnas de las filas que cumplen las condiciones de la consulta. Puede especificar los parámetros ReturnAll, Columns y ReturnAllFromIndex.
De forma predeterminada,
ReturnAllesfalse, lo que significa que solo se devuelven las columnas de la clave principal. Para devolver columnas adicionales, utilice una de las siguientes opciones:-
Establezca
Columnspara indicar qué columnas se deben devolver. -
Establezca
ReturnAllFromIndexentruepara devolver todas las columnas del índice de búsqueda.
Establezca
ReturnAllentruepara devolver todas las columnas de la tabla de datos. -
-
Ejemplo
A continuación se muestra un código de ejemplo para consultar las filas donde el valor de la columna geo_type_col se encuentra dentro de un área geográfica poligonal en una tabla.
/// <summary> /// Query the rows in which the value of the geo_type_col column is within a polygon geographical area in a table. /// </summary> /// <param name="client"></param> public static void GeoPolygonQuery(OTSClient client) { SearchQuery searchQuery = new SearchQuery(); GeoPolygonQuery geoPolygonQuery = new GeoPolygonQuery(); // Set the query type to GeoPolygonQuery. geoPolygonQuery.FieldName = Geo_type_col; geoPolygonQuery.Points = new List<string>() { "0,0", "10,0", "10,10" }; // Specify coordinate pairs for vertices of a polygon geographical area. searchQuery.Query = geoPolygonQuery; SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery); ColumnsToGet columnsToGet = new ColumnsToGet(); columnsToGet.Columns = new List<string>() { Geo_type_col }; // Specify that the Geo_type_col column is returned. searchRequest.ColumnsToGet = columnsToGet; SearchResponse response = client.Search(searchRequest); Console.WriteLine(response.TotalCount); }
Preguntas frecuentes
Referencias
-
Cuando utiliza un índice de búsqueda para consultar datos, puede emplear los siguientes métodos de consulta: term query, terms query, match all query, match query, match phrase query, prefix query, range query, wildcard query, Boolean query, geo query, nested query y exists query. Según sus requisitos de negocio, estos métodos le permiten consultar datos desde múltiples dimensiones.
Mediante las funciones de ordenación y paginación, puede ordenar o paginar las filas que cumplen las condiciones de la consulta. Para obtener más información, consulte Sorting and paging.
La función collapse (distinct) permite contraer el conjunto de resultados con base en una columna específica. De esta manera, los datos del tipo indicado aparecen solo una vez en los resultados de la consulta. Para obtener más información, consulte Collapse (distinct).
Si necesita analizar datos de una tabla, utilice la función de agregación de la operación Search o ejecute instrucciones SQL. Por ejemplo, puede obtener los valores mínimo y máximo, la suma y el número total de filas. Para obtener más información, consulte Aggregation y SQL query.
Si desea obtener todas las filas que cumplen las condiciones de la consulta sin necesidad de ordenarlas, llame a las operaciones ParallelScan y ComputeSplits para usar la función de exploración paralela. Para obtener más información, consulte Parallel scan.