地理位置情報クエリは、地理的距離クエリ、地理的境界ボックスクエリ、地理的多角形クエリの3つのタイプに分類されます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成とデータの書き込みを参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成を参照してください。
地理的距離クエリ
地理的距離クエリを使用すると、中心点と半径で構成される円形の地理的領域をクエリのフィルタリング条件として指定できます。Tablestore は、Geopoint カラムの値が円形の地理的領域内にある行を返します。
パラメータ
パラメータ
説明
tableName
データテーブルの名前。
indexName
検索インデックスの名前。
query
クエリの種類。クエリの種類を TableStore.QueryType.GEO_DISTANCE_QUERY に設定します。
fieldName
フィールドの名前。フィールド値の型は Geopoint です。
centerPoint
中心点の座標ペア。座標ペアは緯度と経度の値で構成されます。
このパラメータ値は、「緯度,経度」の形式である必要があります。緯度の有効な値:[-90,90]。経度の有効な値:[-180,180]。例:「35.8,-45.91」。
distance
円形地理領域の半径。このパラメータの値は DOUBLE データ型です。単位:メートル。
例
次のサンプルコードは、Col_GeoPoint カラムの値が特定の円形地理領域内にある行をクエリする方法の例を示しています。
client.search({ tableName: TABLE_NAME, indexName: INDEX_NAME, searchQuery: { offset: 0, limit: 10, // クエリ条件を満たす行数を特定のデータなしでクエリするには、limit パラメータを 0 に設定します。 query: { // クエリタイプを TableStore.QueryType.GEO_DISTANCE_QUERY に設定します。 queryType: TableStore.QueryType.GEO_DISTANCE_QUERY, query: { fieldName: "Col_GeoPoint", centerPoint: "1,1", // 中心点の座標ペアを指定します。 distance: 10000 // 中心点からの距離を 10,000 以下の値に設定します。単位:メートル。 } }, getTotalCount: true // クエリ条件を満たす行の総数を返すかどうかを指定します。デフォルト値:false。 }, columnToGet: { // 返すカラムを指定します。パラメータを RETURN_SPECIFIED に設定して指定したカラムを返すか、RETURN_ALL に設定してすべてのカラムを返すか、RETURN_ALL_FROM_INDEX に設定して検索インデックス内のすべてのカラムを返すか、RETURN_NONE に設定して主キーカラムのみを返すことができます。 returnType: TableStore.ColumnReturnType.RETURN_ALL } }, function (err, data) { if (err) { console.log('error:', err); return; } console.log('success:', JSON.stringify(data, null, 2)); });
地理的境界ボックスクエリ
地理的境界ボックスクエリを使用すると、矩形の地理的領域をクエリのフィルタリング条件として指定できます。Tablestore は、Geopoint カラムの値が矩形地理領域内にある行を返します。
パラメータ
パラメータ
説明
tableName
データテーブルの名前。
indexName
検索インデックスの名前。
query
クエリの種類。クエリの種類を TableStore.QueryType.GEO_BOUNDING_BOX_QUERY に設定します。
fieldName
フィールドの名前。フィールド値の型は Geopoint です。
topLeft
矩形地理領域の左上隅の座標ペア。
bottomRight
矩形地理領域の右下隅の座標ペア。左上隅と右下隅の座標ペアは、一意の矩形地理領域を定義します。
このパラメータ値は、「緯度,経度」の形式である必要があります。緯度の有効な値:[-90,90]。経度の有効な値:[-180,180]。例:「35.8,-45.91」。
例
次のサンプルコードは、Col_GeoPoint カラムの値が、座標ペアが「10,0」の左上隅と座標ペアが「0,10」の右下隅で定義された矩形地理領域内にある行をクエリする方法の例を示しています。
client.search({ tableName: TABLE_NAME, indexName: INDEX_NAME, searchQuery: { offset: 0, limit: 10, // クエリ条件を満たす行数を特定のデータなしでクエリするには、limit パラメータを 0 に設定します。 query: { // クエリタイプを TableStore.QueryType.GEO_BOUNDING_BOX_QUERY に設定します。 queryType: TableStore.QueryType.GEO_BOUNDING_BOX_QUERY, query: { fieldName: "Col_GeoPoint", // フィールドの名前を指定します。 topLeft: "10,0", // 矩形地理領域の左上隅の座標ペアを指定します。 bottomRight: "0,10" // 矩形地理領域の右下隅の座標ペアを指定します。 } }, getTotalCount: true // クエリ条件を満たす行の総数を返すかどうかを指定します。デフォルト値:false。 }, columnToGet: { // 返すカラムを指定します。パラメータを RETURN_SPECIFIED に設定して指定したカラムを返すか、RETURN_ALL に設定してすべてのカラムを返すか、RETURN_ALL_FROM_INDEX に設定して検索インデックス内のすべてのカラムを返すか、RETURN_NONE に設定して主キーカラムのみを返すことができます。 returnType: TableStore.ColumnReturnType.RETURN_ALL } }, function (err, data) { if (err) { console.log('error:', err); return; } console.log('success:', JSON.stringify(data, null, 2)); });
地理的多角形クエリ
地理的多角形クエリを使用すると、多角形の地理的領域を指定できます。Tablestore は、Geopoint カラムの値が多角形地理領域内にある行を返します。
パラメータ
パラメータ
説明
tableName
データテーブルの名前。
indexName
検索インデックスの名前。
query
クエリの種類。クエリの種類を TableStore.QueryType.GEO_POLYGON_QUERY に設定します。
fieldName
フィールドの名前。フィールド値の型は Geopoint です。
points
多角形地理領域を定義する点の座標ペア。
各点の座標ペアは、「緯度,経度」の形式である必要があります。緯度の有効な値:[-90,90]。経度の有効な値:[-180,180]。例:「35.8,-45.91」。
例
次のサンプルコードは、Col_GeoPoint カラムの値が多角形地理領域内にある行をクエリする方法の例を示しています。
client.search({ tableName: TABLE_NAME, indexName: INDEX_NAME, searchQuery: { offset: 0, limit: 10, // クエリ条件を満たす行数を特定のデータなしでクエリするには、limit パラメータを 0 に設定します。 query: { // クエリタイプを TableStore.QueryType.GEO_POLYGON_QUERY に設定します。 queryType: TableStore.QueryType.GEO_POLYGON_QUERY, query: { fieldName: "Col_GeoPoint", points: ["0,0","5,5","5,0"] // 多角形地理領域の頂点の座標ペアを指定します。 } }, getTotalCount: true // クエリ条件を満たす行の総数を返すかどうかを指定します。デフォルト値:false。 }, columnToGet: { // 返すカラムを指定します。パラメータを RETURN_SPECIFIED に設定して指定したカラムを返すか、RETURN_ALL に設定してすべてのカラムを返すか、RETURN_ALL_FROM_INDEX に設定して検索インデックス内のすべてのカラムを返すか、RETURN_NONE に設定して主キーカラムのみを返すことができます。 returnType: TableStore.ColumnReturnType.RETURN_ALL } }, function (err, data) { if (err) { console.log('error:', err); return; } console.log('success:', JSON.stringify(data, null, 2)); });
FAQ
参考資料
検索インデックスでは、次のクエリタイプがサポートされています:用語クエリ、複数用語クエリ、すべて一致クエリ、一致クエリ、フレーズ一致クエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、ブールクエリ、地理位置情報クエリ、ネストされたクエリ、ベクトル検索クエリ、存在クエリ。ビジネス要件に基づいてクエリタイプを選択してデータをクエリできます。
クエリ条件を満たす行をソートまたはページネーションする場合は、ソートおよびページネーション機能を使用できます。詳細については、ソートとページネーションを参照してください。
特定のカラムに基づいて結果セットを折りたたむ場合は、折りたたみ(重複排除)機能を使用できます。このようにして、指定されたタイプのデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ(重複排除)を参照してください。
データテーブルのデータ(極値、合計、行の総数など)を分析する場合は、集計操作を実行するか、SQL ステートメントを実行できます。詳細については、集計とSQL クエリを参照してください。
行をソートする必要なく、クエリ条件を満たすすべての行をすばやく取得する場合は、ParallelScan および ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンを参照してください。