Las consultas geográficas se clasifican en los siguientes tipos: consulta por distancia geográfica, consulta por cuadro delimitador geográfico y consulta por polígono geográfico.
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 a data table y Write data.
Se creó un índice de búsqueda para la tabla de datos. Para obtener más información, consulte Create a search index.
Consulta por distancia geográfica
Para ejecutar una consulta por distancia geográfica, 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 circular.
-
Parámetros
Parámetro
Descripción
table_name
El nombre de la tabla de datos.
index_name
El nombre del índice de búsqueda.
query
La instrucción de consulta para el índice de búsqueda. Para usar la consulta por distancia geográfica, establezca el tipo de consulta como QueryTypeConst::GEO_DISTANCE_QUERY.
field_name
El nombre de la columna que desea consultar. El valor de este parámetro es del tipo de datos GEOPOINT.
center_point
El par de coordenadas del punto central, compuesto por los valores de latitud y longitud.
El formato del par de coordenadas es
latitude,longitude. Los valores válidos de latitud son [-90,+90] y los de longitud son [-180,+180]. Ejemplo:35.8,-45.91.distance
El radio del área geográfica circular. El valor de este parámetro es del tipo de datos DOUBLE. Unidad: metros.
-
Ejemplos
A continuación se muestra un ejemplo de código para consultar todas las filas de una tabla de datos cuyo valor en la columna geo no supere los 1000 metros de distancia respecto al punto central
30.001,120.001.$request = array( 'table_name' => 'php_sdk_test', 'index_name' => 'php_sdk_test_search_index', 'search_query' => array( 'offset' => 0, 'limit' => 2, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::GEO_DISTANCE_QUERY, 'query' => array( 'field_name' => 'geo', 'center_point' => '30.001,120.001', 'distance' => 1000 ) ), 'sort' => array( array( 'geo_distance_sort' => array( 'field_name' => 'geo', 'order' => SortOrderConst::SORT_ORDER_ASC, 'distance_type' => GeoDistanceTypeConst::GEO_DISTANCE_PLANE, 'points' => array('30,120') ) ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED, 'return_names' => array('geo') ) ); $response = $otsClient->search($request);
Consulta por cuadro delimitador geográfico
Para ejecutar una consulta por cuadro delimitador geográfico, 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 rectangular.
-
Parámetros
Parámetro
Descripción
table_name
El nombre de la tabla de datos.
index_name
El nombre del índice de búsqueda.
query
La instrucción de consulta para el índice de búsqueda. Para usar la consulta por cuadro delimitador geográfico, establezca el tipo de consulta como QueryTypeConst::GEO_BOUNDING_BOX_QUERY.
field_name
El nombre de la columna que desea consultar. El valor de este parámetro es del tipo de datos GEOPOINT.
top_left
El par de coordenadas de la esquina superior izquierda del área geográfica rectangular.
bottom_right
El par de coordenadas de la esquina inferior derecha del cuadro rectangular. Un área geográfica rectangular se define mediante una esquina superior izquierda y una esquina inferior derecha.
El formato del par de coordenadas es
latitude,longitude. Los valores válidos de latitud son [-90,+90] y los de longitud son [-180,+180]. Ejemplo:35.8,-45.91. -
Ejemplos
A continuación se muestra un ejemplo de código para consultar todas las filas de una tabla de datos cuyo valor en la columna geo se encuentre dentro del área rectangular definida por un punto superior izquierdo (coordenadas:
31,119) y un punto inferior derecho (coordenadas:29,121).$request = array( 'table_name' => 'php_sdk_test', 'index_name' => 'php_sdk_test_search_index', 'search_query' => array( 'offset' => 0, 'limit' => 2, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::GEO_BOUNDING_BOX_QUERY, 'query' => array( 'field_name' => 'geo', 'top_left' => '31,119', 'bottom_right' => '29,121' ) ), 'sort' => array( array( 'geo_distance_sort' => array( 'field_name' => 'geo', 'order' => SortOrderConst::SORT_ORDER_ASC, 'distance_type' => GeoDistanceTypeConst::GEO_DISTANCE_PLANE, 'points' => array('30,120') ) ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED, 'return_names' => array('geo') ) ); $response = $otsClient->search($request);
Consulta por polígono geográfico
Para ejecutar una consulta por polígono geográfico, 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 poligonal.
-
Parámetros
Parámetro
Descripción
table_name
El nombre de la tabla de datos.
index_name
El nombre del índice de búsqueda.
query
La instrucción de consulta para el índice de búsqueda. Para usar la consulta por polígono geográfico, establezca el tipo de consulta como QueryTypeConst::GEO_POLYGON_QUERY.
field_name
El nombre de la columna que desea consultar. El valor de este parámetro es del tipo de datos GEOPOINT.
points
Los pares de coordenadas de los puntos que definen el área geográfica poligonal. Un polígono se especifica mediante varios pares de coordenadas.
El formato del par de coordenadas es
latitude,longitude. Los valores válidos de latitud son [-90,+90] y los de longitud son [-180,+180]. Ejemplo:35.8,-45.91. -
Ejemplos
A continuación se muestra un ejemplo de código para consultar todas las filas de una tabla de datos cuyo valor en la columna geo se encuentre dentro del área poligonal definida por los puntos con coordenadas
31,120,29,121y29,119.$request = array( 'table_name' => 'php_sdk_test', 'index_name' => 'php_sdk_test_search_index', 'search_query' => array( 'offset' => 0, 'limit' => 2, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::GEO_POLYGON_QUERY, 'query' => array( 'field_name' => 'geo', 'points' => array( "31,120", "29,121", "29,119" ) ) ), 'sort' => array( array( 'geo_distance_sort' => array( 'field_name' => 'geo', 'order' => SortOrderConst::SORT_ORDER_ASC, 'distance_type' => GeoDistanceTypeConst::GEO_DISTANCE_PLANE, 'points' => array('30,120') ) ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED, 'return_names' => array('geo') ) ); $response = $otsClient->search($request);
Preguntas frecuentes
Referencias
-
Cuando utilice 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 necesidades de negocio, combine distintos métodos para consultar datos desde múltiples dimensiones.
Si necesita ordenar o paginar las filas que cumplen las condiciones de consulta, utilice la función de ordenamiento y paginación. Para obtener más información, consulte Sorting and paging.
Para agrupar el conjunto de resultados con base en una columna específica, utilice la función de colapso (distinct). De esta manera, los datos del tipo especificado aparecerán solo una vez en los resultados de la consulta. Para obtener más información, consulte Collapse (distinct).
Si requiere analizar los datos de una tabla de datos, por ejemplo, para obtener los valores extremos, la suma y el número total de filas, ejecute operaciones de agregación o instrucciones SQL. Para obtener más información, consulte Aggregation y SQL query.
Cuando necesite obtener rápidamente todas las filas que cumplen las condiciones de consulta sin ordenarlas, llame a las operaciones ParallelScan y ComputeSplits para utilizar la función de escaneo paralelo. Para obtener más información, consulte Parallel scan.