Les requêtes géographiques se divisent en trois catégories : requête par distance géographique, requête par cadre délimitant (bounding box) et requête par polygone.
Prérequis
Initialisez une instance OTSClient. Pour plus d'informations, consultez la rubrique Initialiser une instance OTSClient.
Créez une table de données et insérez-y des données. Pour plus d'informations, consultez les rubriques Créer une table de données et Écrire des données.
Créez un index de recherche pour la table de données. Pour plus d'informations, consultez la rubrique Créer un index de recherche.
Requête par distance géographique
Pour exécuter une requête par distance géographique, définissez une zone circulaire à l'aide d'un point central et d'un rayon. Tablestore renvoie les lignes dont la valeur d'une colonne spécifique se situe dans cette zone circulaire.
-
Paramètres
Parameter
Description
table_name
Nom de la table de données.
index_name
Nom de l'index de recherche.
query
Instruction de requête pour l'index de recherche. Pour utiliser une requête par distance géographique, définissez le type de requête sur QueryTypeConst::GEO_DISTANCE_QUERY.
field_name
Nom de la colonne à interroger. La valeur de ce paramètre doit être de type GEOPOINT.
center_point
Paire de coordonnées du point central, composée de la latitude et de la longitude.
La paire de coordonnées suit le format
latitude,longitude. Les valeurs valides pour la latitude vont de [-90,+90] et celles pour la longitude de [-180,+180]. Exemple :35.8,-45.91.distance
Rayon de la zone géographique circulaire. La valeur de ce paramètre est de type DOUBLE. Unité : mètres.
-
Exemples
L'extrait de code suivant montre comment interroger toutes les lignes dont les données de la colonne geo se trouvent à moins de 1 000 mètres du point central
30.001,120.001dans une table de données.$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);
Requête par cadre délimitant (Geo-bounding box)
Pour exécuter une requête par cadre délimitant, spécifiez une zone rectangulaire à l'aide des coins supérieur gauche et inférieur droit. Tablestore renvoie les lignes dont la valeur d'une colonne spécifique se situe dans cette zone rectangulaire.
-
Paramètres
Parameter
Description
table_name
Nom de la table de données.
index_name
Nom de l'index de recherche.
query
Instruction de requête pour l'index de recherche. Pour utiliser une requête par cadre délimitant, définissez le type de requête sur QueryTypeConst::GEO_BOUNDING_BOX_QUERY.
field_name
Nom de la colonne à interroger. La valeur de ce paramètre doit être de type GEOPOINT.
top_left
Paire de coordonnées du coin supérieur gauche de la zone géographique rectangulaire.
bottom_right
Paire de coordonnées du coin inférieur droit du rectangle. Une zone géographique rectangulaire se définit par ses coins supérieur gauche et inférieur droit.
La paire de coordonnées suit le format
latitude,longitude. Les valeurs valides pour la latitude vont de [-90,+90] et celles pour la longitude de [-180,+180]. Exemple :35.8,-45.91. -
Exemples
L'extrait de code suivant montre comment interroger toutes les lignes dont les données de la colonne geo se situent dans la zone rectangulaire définie par un point supérieur gauche (coordonnées :
31,119) et un point inférieur droit (coordonnées :29,121) dans une table de données.$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);
Requête par polygone (Geo-polygon)
Pour exécuter une requête par polygone, spécifiez une zone polygonale à l'aide des paires de coordonnées de plusieurs points. Tablestore renvoie les lignes dont la valeur d'une colonne spécifique se situe dans cette zone polygonale.
-
Paramètres
Parameter
Description
table_name
Nom de la table de données.
index_name
Nom de l'index de recherche.
query
Instruction de requête pour l'index de recherche. Pour utiliser une requête par polygone, définissez le type de requête sur QueryTypeConst::GEO_POLYGON_QUERY.
field_name
Nom de la colonne à interroger. La valeur de ce paramètre doit être de type GEOPOINT.
points
Paires de coordonnées des points définissant la zone géographique polygonale. Vous pouvez définir un polygone à l'aide de plusieurs paires de coordonnées.
La paire de coordonnées suit le format
latitude,longitude. Les valeurs valides pour la latitude vont de [-90,+90] et celles pour la longitude de [-180,+180]. Exemple :35.8,-45.91. -
Exemples
L'extrait de code suivant montre comment interroger toutes les lignes dont les données de la colonne geo se situent dans la zone polygonale définie par les points aux coordonnées respectives
31,120,29,121et29,119dans une table de données.$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);
FAQ
Références
-
Lorsque vous utilisez un index de recherche pour interroger des données, vous pouvez recourir aux méthodes de requête suivantes : requête term, requête terms, requête match all, requête match, requête match phrase, requête prefix, requête range, requête wildcard, requête Boolean, requête géographique, requête nested et requête exists. Vous pouvez combiner différentes méthodes de requête pour interroger les données selon plusieurs dimensions, en fonction de vos besoins métier.
Si vous souhaitez trier ou paginer les lignes correspondant aux conditions de requête, utilisez la fonctionnalité de tri et de pagination. Pour plus d'informations, consultez la rubrique Tri et pagination.
Si vous souhaitez regrouper l'ensemble de résultats en fonction d'une colonne spécifique, utilisez la fonctionnalité de regroupement (distinct). Ainsi, les données du type spécifié n'apparaissent qu'une seule fois dans les résultats de la requête. Pour plus d'informations, consultez la rubrique Regroupement (distinct).
Si vous souhaitez analyser les données d'une table, par exemple pour obtenir les valeurs extrêmes, la somme ou le nombre total de lignes, effectuez des opérations d'agrégation ou exécutez des instructions SQL. Pour plus d'informations, consultez les rubriques Agrégation et Requête SQL.
Si vous souhaitez obtenir rapidement toutes les lignes correspondant aux conditions de requête sans avoir besoin de les trier, appelez les opérations ParallelScan et ComputeSplits pour utiliser la fonctionnalité d'analyse parallèle. Pour plus d'informations, consultez la rubrique Analyse parallèle.