地理位置情報クエリは、地理的距離クエリ、地理的境界ボックスクエリ、地理的多角形クエリの3つのタイプに分類されます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成とデータの書き込みを参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成を参照してください。
地理的距離クエリ
地理的距離クエリを実行するには、中心点と半径を使用して円形の地理的エリアを指定します。Tablestore は、特定の列の値が円形の地理的エリア内にある行を返します。
パラメータ
パラメータ
説明
FieldName
クエリ対象の列の名前。このパラメータの値は GEOPOINT データ型です。
CenterPoint
中心点の座標ペア。座標ペアは緯度と経度の値で構成されます。
座標ペアは、緯度,経度の形式です。緯度の有効な値:[-90,+90]。経度の有効な値:[-180,+180]。例:"35.8,-45.91"。
DistanceInMeter
円形地理領域の半径。このパラメータの値は DOUBLE データ型です。単位:メートル。
Query
検索インデックスのクエリステートメント。クエリタイプを GeoDistanceQuery に設定します。
TableName
データテーブルの名前。
IndexName
検索インデックスの名前。
ColumnsToGet
クエリ条件を満たす行のすべての列を返すかどうかを指定します。ReturnAll、Columns、ReturnAllFromIndex パラメータを指定できます。
ReturnAll のデフォルト値は false で、すべての列が返されないことを指定します。次のいずれかの方法を使用して、返したい列を指定できます。次の方法を使用して返したい列を指定しない場合、主キー列のみが返されます。
Columns を設定して、返したい列を指定します。
ReturnAllFromIndex を true に設定して、検索インデックスからすべての列を返します。
ReturnAll を true に設定すると、すべての列が返されます。
例
次のサンプルコードは、geo_type_col 列の値がテーブル内の円形地理領域内にある行をクエリする方法を示しています。
/// <summary> /// テーブル内の円形地理領域内にある geo_type_col 列の値を持つ行をクエリします。 /// </summary> /// <param name="client"></param> public static void GeoDistanceQuery(OTSClient client) { SearchQuery searchQuery = new SearchQuery(); GeoDistanceQuery geoDistanceQuery = new GeoDistanceQuery(); // クエリタイプを GeoDistanceQuery に設定します。 geoDistanceQuery.FieldName = Geo_type_col; geoDistanceQuery.CenterPoint = "10,11"; // 中心点の座標ペアを指定します。 geoDistanceQuery.DistanceInMeter = 10000; // 円形地理領域の半径を 10,000 に設定します。単位:メートル。 searchQuery.Query = geoDistanceQuery; SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery); ColumnsToGet columnsToGet = new ColumnsToGet(); columnsToGet.Columns = new List<string>() { Geo_type_col }; // Geo_type_col 列が返されるように指定します。 searchRequest.ColumnsToGet = columnsToGet; SearchResponse response = client.Search(searchRequest); Console.WriteLine(response.TotalCount); }
地理的境界ボックスクエリ
地理的境界ボックスクエリを実行するには、左上隅と右下隅を使用して矩形の地理的エリアを指定します。Tablestore は、特定の列の値が矩形の地理的エリア内にある行を返します。
パラメータ
パラメータ
説明
FieldName
クエリ対象の列の名前。このパラメータの値は GEOPOINT データ型です。
TopLeft
矩形地理領域の左上隅の座標ペア。
BottomRight
矩形地理領域の右下隅の座標ペア。左上隅と右下隅の座標ペアは、一意の矩形地理領域を定義します。
座標ペアは、緯度,経度の形式です。緯度の有効な値:[-90,+90]。経度の有効な値:[-180,+180]。例:"35.8,-45.91"。
Query
検索インデックスのクエリステートメント。クエリタイプを GeoBoundingBoxQuery に設定します。
TableName
データテーブルの名前。
IndexName
検索インデックスの名前。
ColumnsToGet
クエリ条件を満たす行のすべての列を返すかどうかを指定します。ReturnAll、Columns、ReturnAllFromIndex パラメータを指定できます。
ReturnAll のデフォルト値は false で、すべての列が返されないことを指定します。次のいずれかの方法を使用して、返したい列を指定できます。次の方法を使用して返したい列を指定しない場合、主キー列のみが返されます。
Columns を設定して、返したい列を指定します。
ReturnAllFromIndex を true に設定して、検索インデックスからすべての列を返します。
ReturnAll を true に設定すると、すべての列が返されます。
例
次のサンプルコードは、geo_type_col 列の値が、左上隅が "10,0"、右下隅が "0,10" の矩形地理領域内にある行をクエリする方法を示しています。
/// <summary> /// テーブル内の矩形地理領域内にある geo_type_col 列の値を持つ行をクエリします。geo_type_col 列の値は GEOPOINT データ型です。矩形地理領域は、座標ペアが "10,0" の左上隅と座標ペアが "0,10" の右下隅によって指定されます。 /// </summary> /// <param name="client"></param> public static void GeoBoundingBoxQuery(OTSClient client) { SearchQuery searchQuery = new SearchQuery(); GeoBoundingBoxQuery geoBoundingBoxQuery = new GeoBoundingBoxQuery(); // クエリタイプを GeoBoundingBoxQuery に設定します。 geoBoundingBoxQuery.FieldName = Geo_type_col; // クエリ対象の列の名前を指定します。 geoBoundingBoxQuery.TopLeft = "10,0"; // 矩形地理領域の左上隅の座標ペアを指定します。 geoBoundingBoxQuery.BottomRight = "0,10"; // 矩形地理領域の右下隅の座標ペアを指定します。 searchQuery.Query = geoBoundingBoxQuery; SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery); var columnsToGet = new ColumnsToGet(); columnsToGet.Columns = new List<string> { Geo_type_col }; // Geo_type_col 列が返されるように指定します。 searchRequest.ColumnsToGet = columnsToGet; SearchResponse response = client.Search(searchRequest); Console.WriteLine(response.TotalCount); }
地理的多角形クエリ
地理的多角形クエリを実行するには、複数点の座標ペアを使用して多角形の地理的エリアを指定します。Tablestore は、特定の列の値が多角形の地理的エリア内にある行を返します。
パラメータ
パラメータ
説明
FieldName
クエリ対象の列の名前。このパラメータの値は GEOPOINT データ型です。
Points
多角形地理領域を定義する点の座標ペア。
座標ペアは、緯度,経度の形式です。緯度の有効な値:[-90,+90]。経度の有効な値:[-180,+180]。例:"35.8,-45.91"。
Query
検索インデックスのクエリステートメント。クエリタイプを GeoPolygonQuery に設定します。
TableName
データテーブルの名前。
IndexName
検索インデックスの名前。
ColumnsToGet
クエリ条件を満たす行のすべての列を返すかどうかを指定します。ReturnAll、Columns、ReturnAllFromIndex パラメータを指定できます。
ReturnAll のデフォルト値は false で、すべての列が返されないことを指定します。次のいずれかの方法を使用して、返したい列を指定できます。次の方法を使用して返したい列を指定しない場合、主キー列のみが返されます。
Columns を設定して、返したい列を指定します。
ReturnAllFromIndex を true に設定して、検索インデックスからすべての列を返します。
ReturnAll を true に設定すると、すべての列が返されます。
例
次のサンプルコードは、geo_type_col 列の値がテーブル内の多角形地理領域内にある行をクエリする方法を示しています。
/// <summary> /// テーブル内の多角形地理領域内にある geo_type_col 列の値を持つ行をクエリします。 /// </summary> /// <param name="client"></param> public static void GeoPolygonQuery(OTSClient client) { SearchQuery searchQuery = new SearchQuery(); GeoPolygonQuery geoPolygonQuery = new GeoPolygonQuery(); // クエリタイプを GeoPolygonQuery に設定します。 geoPolygonQuery.FieldName = Geo_type_col; geoPolygonQuery.Points = new List<string>() { "0,0", "10,0", "10,10" }; // 多角形地理領域の頂点の座標ペアを指定します。 searchQuery.Query = geoPolygonQuery; SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery); ColumnsToGet columnsToGet = new ColumnsToGet(); columnsToGet.Columns = new List<string>() { Geo_type_col }; // Geo_type_col 列が返されるように指定します。 searchRequest.ColumnsToGet = columnsToGet; SearchResponse response = client.Search(searchRequest); Console.WriteLine(response.TotalCount); }
FAQ
参考資料
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます:タームクエリ、タームズクエリ、すべて一致クエリ、一致クエリ、一致フレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、ブールクエリ、地理位置情報クエリ、ネストされたクエリ、存在クエリ。ビジネス要件に基づいて、さまざまなクエリメソッドを使用して複数のディメンションからデータをクエリできます。
並べ替え機能とページング機能を使用して、クエリ条件を満たす行を並べ替えたりページ分割したりできます。詳細については、並べ替えとページングを参照してください。
折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。このようにして、指定されたタイプのデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ(重複排除)を参照してください。
データテーブル内のデータを分析する場合、Search 操作の集計機能を使用するか、SQL ステートメントを実行できます。たとえば、最小値、最大値、合計、行の総数などを取得できます。詳細については、集計とSQL クエリを参照してください。
行を並べ替えることなく、クエリ条件を満たすすべての行を取得する場合、ParallelScan 操作と ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンを参照してください。