Les requêtes géographiques se divisent en trois catégories : la requête par distance géographique, la requête par cadre de délimitation géographique et la requête par polygone géographique.
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 des tables 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
La requête par distance géographique permet de définir une zone circulaire à partir d'un point central et d'un rayon comme condition de filtrage. Tablestore renvoie les lignes dont la valeur de la colonne Geopoint se situe dans cette zone circulaire.
-
Paramètres
Paramètre
Description
tableName
Nom de la table de données.
indexName
Nom de l'index de recherche.
query
Type de requête. Définissez ce paramètre sur TableStore.QueryType.GEO_DISTANCE_QUERY.
fieldName
Nom du champ. Le type des valeurs du champ doit être Geopoint.
centerPoint
Paire de coordonnées du point central, composée de la latitude et de la longitude.
Ce paramètre doit respecter le format « latitude,longitude ». La latitude doit être comprise entre [-90,90] et la longitude entre [-180 180]. Exemple : « 35,8,-45,91 ».
distance
Rayon de la zone circulaire. Ce paramètre accepte une valeur de type DOUBLE. L'unité est le mètre.
-
Exemples
L'extrait de code suivant illustre comment interroger les lignes dont la valeur de la colonne Col_GeoPoint se trouve dans une zone circulaire spécifique.
client.search({ tableName: TABLE_NAME, indexName: INDEX_NAME, searchQuery: { offset: 0, limit: 10, // To query only the number of rows that meet the query conditions without specific data, set the limit parameter to 0. query: { // Set the query type to TableStore.QueryType.GEO_DISTANCE_QUERY. queryType: TableStore.QueryType.GEO_DISTANCE_QUERY, query: { fieldName: "Col_GeoPoint", centerPoint: "1,1", // Specify the coordinate pair for the central point. distance: 10000 // Set the distance from the central point to a value smaller than or equal to 10,000. Unit: meter. } }, getTotalCount: true // Specify whether to return the total number of rows that meet the query conditions. Default value: false. }, columnToGet: { // Specify the columns that you want to return. You can set the parameter to RETURN_SPECIFIED to return the specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. returnType: TableStore.ColumnReturnType.RETURN_ALL } }, function (err, data) { if (err) { console.log('error:', err); return; } console.log('success:', JSON.stringify(data, null, 2)); });
Requête par cadre de délimitation géographique
La requête par cadre de délimitation géographique permet de définir une zone rectangulaire comme condition de filtrage. Tablestore renvoie les lignes dont la valeur de la colonne Geopoint se situe dans cette zone rectangulaire.
-
Paramètres
Paramètre
Description
tableName
Nom de la table de données.
indexName
Nom de l'index de recherche.
query
Type de requête. Définissez ce paramètre sur TableStore.QueryType.GEO_BOUNDING_BOX_QUERY.
fieldName
Nom du champ. Le type des valeurs du champ doit être Geopoint.
topLeft
Paire de coordonnées du coin supérieur gauche de la zone rectangulaire.
bottomRight
Paire de coordonnées du coin inférieur droit de la zone rectangulaire. Les paires de coordonnées des coins supérieur gauche et inférieur droit définissent une zone rectangulaire unique.
Ce paramètre doit respecter le format « latitude,longitude ». La latitude doit être comprise entre [-90,90] et la longitude entre [-180 180]. Exemple : « 35,8,-45,91 ».
-
Exemples
L'extrait de code suivant illustre comment interroger les lignes dont la valeur de la colonne Col_GeoPoint se trouve dans une zone rectangulaire définie par un coin supérieur gauche aux coordonnées « 10,0 » et un coin inférieur droit aux coordonnées « 0,10 » :
client.search({ tableName: TABLE_NAME, indexName: INDEX_NAME, searchQuery: { offset: 0, limit: 10, // To query only the number of rows that meet the query conditions without specific data, set the limit parameter to 0. query: { // Set the query type to TableStore.QueryType.GEO_BOUNDING_BOX_QUERY. queryType: TableStore.QueryType.GEO_BOUNDING_BOX_QUERY, query: { fieldName: "Col_GeoPoint", // Specify the name of the field. topLeft: "10,0", // Specify the coordinate pair for the upper-left corner of the rectangular geographical area. bottomRight: "0,10" // Specify coordinate pair for the lower-right corner of the rectangular geographical area. } }, getTotalCount: true // Specify whether to return the total number of rows that meet the query conditions. Default value: false. }, columnToGet: { // Specify the columns that you want to return. You can set the parameter to RETURN_SPECIFIED to return the specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. returnType: TableStore.ColumnReturnType.RETURN_ALL } }, function (err, data) { if (err) { console.log('error:', err); return; } console.log('success:', JSON.stringify(data, null, 2)); });
Requête par polygone géographique
La requête par polygone géographique permet de définir une zone polygonale. Tablestore renvoie les lignes dont la valeur de la colonne Geopoint se situe dans cette zone polygonale.
-
Paramètres
Paramètre
Description
tableName
Nom de la table de données.
indexName
Nom de l'index de recherche.
query
Type de requête. Définissez ce paramètre sur TableStore.QueryType.GEO_POLYGON_QUERY.
fieldName
Nom du champ. Le type des valeurs du champ doit être Geopoint.
points
Paires de coordonnées des points définissant la zone polygonale.
Chaque paire de coordonnées doit respecter le format « latitude,longitude ». La latitude doit être comprise entre [-90,90] et la longitude entre [-180 180]. Exemple : « 35,8,-45,91 ».
-
Exemples
L'extrait de code suivant illustre comment interroger les lignes dont la valeur de la colonne Col_GeoPoint se trouve dans une zone polygonale :
client.search({ tableName: TABLE_NAME, indexName: INDEX_NAME, searchQuery: { offset: 0, limit: 10, // To query only the number of rows that meet the query conditions without specific data, set the limit parameter to 0. query: { // Set the query type to TableStore.QueryType.GEO_POLYGON_QUERY. queryType: TableStore.QueryType.GEO_POLYGON_QUERY, query: { fieldName: "Col_GeoPoint", points: ["0,0","5,5","5,0"] // Specify coordinate pairs for vertices of a polygon geographical area. } }, getTotalCount: true // Specify whether to return the total number of rows that meet the query conditions. Default value: false. }, columnToGet: { // Specify the columns that you want to return. You can set the parameter to RETURN_SPECIFIED to return the specified columns, RETURN_ALL to return all columns, RETURN_ALL_FROM_INDEX to return all columns in the search index, or RETURN_NONE to return only the primary key columns. returnType: TableStore.ColumnReturnType.RETURN_ALL } }, function (err, data) { if (err) { console.log('error:', err); return; } console.log('success:', JSON.stringify(data, null, 2)); });
FAQ
Références
-
Les index de recherche prennent en charge les types de requêtes suivants : 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 geo, requête nested, requête vector et requête exists. Sélectionnez le type de requête adapté à vos besoins métier.
Pour 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.
Pour regrouper l'ensemble des résultats selon 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).
Pour 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.
Pour récupérer rapidement toutes les lignes correspondant aux conditions de requête sans avoir besoin de les trier, appelez les opérations ParallelScan et ComputeSplits afin d'utiliser la fonctionnalité d'analyse parallèle. Pour plus d'informations, consultez la rubrique Analyse parallèle.