すべてのプロダクト
Search
ドキュメントセンター

Tablestore:Geo query

最終更新日:Jul 27, 2026

Tablestore SDK for Java を使用したジオクエリは、中心点からの距離、バウンディングボックス、またはポリゴンによってデータをフィルターします。

前提条件

Tablestore SDK for Java をインストールし、クライアントを初期化します。

機能説明

ジオクエリは、GEO_POINT インデックスフィールド内の地理位置に基づいてデータをフィルターします。以下のクエリの種類がサポートされています。

  • 円形範囲検索 (GeoDistanceQuery): 指定された中心点から、指定された距離以下の範囲にある場所をクエリします。

  • 四角形範囲検索 (GeoBoundingBoxQuery): バウンディングボックス内の場所をクエリします。バウンディングボックスは、左上と右下の座標によって定義されます。

  • 多角形範囲検索 (GeoPolygonQuery): ポリゴン内の場所をクエリします。ポリゴンは、複数の座標点によって定義されます。

search を呼び出すとき、クエリする地理的エリアに基づいて、クエリタイプを GeoDistanceQueryGeoBoundingBoxQuery、または GeoPolygonQuery に設定します。

SearchResponse search(SearchRequest request)

次の例では、location フィールドが 0,0 センターポイントから 120,000 メートル以内にある行をクエリします。クエリは最大 10 行と一致した合計数を返します。

String tableName = "example_table";
String indexName = "example_index";

GeoDistanceQuery geoDistanceQuery = new GeoDistanceQuery();
geoDistanceQuery.setFieldName("location");
geoDistanceQuery.setCenterPoint("0,0");
geoDistanceQuery.setDistanceInMeter(120000);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(geoDistanceQuery);
searchQuery.setLimit(10);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);

SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
request.setColumnsToGet(columnsToGet);

SearchResponse response = client.search(request);
System.out.println(response.getTotalCount());
System.out.println(response.getRows());

パラメーター

検索リクエスト

request は、次のパラメーターを含む SearchRequest オブジェクトです。

名前

説明

tableName (必須)

String

データテーブルの名前。

indexName (必須)

String

検索インデックスの名前。

searchQuery (必須)

SearchQuery

クエリ条件と一般的なクエリ設定。

columnsToGet (オプション)

SearchRequest.ColumnsToGet

返す列。このパラメーターが設定されていない場合、プライマリキー列のみが返されます。

timeoutInMillisecond (オプション)

int

リクエストレベルのクエリタイムアウト (ミリ秒) です。デフォルト値は -1 で、この場合、個別のクエリタイムアウトは設定されません。

routingValues (オプション)

List<PrimaryKey>

カスタムルートフィールドに対応するプライマリキーの値。カスタムルーティングが設定されていない場合は、このパラメーターを設定しないでください。

クエリ設定

request.searchQuery は、以下のパラメーターを含む SearchQuery オブジェクトです。

名前

説明

query (必須)

Query

クエリ条件です。クエリの種類に基づいて、このパラメーターを GeoDistanceQueryGeoBoundingBoxQuery、または GeoPolygonQuery オブジェクトに設定します。

offset (オプション)

Integer

クエリの開始位置。

limit (オプション)

Integer

返す行の最大数です。0 に設定すると、行は返されません。

collapse (オプション)

Collapse

フィールドの折りたたみ設定。指定されたフィールドで結果を重複排除します。設定の詳細については、「クエリ結果の折りたたみ」をご参照ください。

sort (オプション)

Sort

結果のソート順。設定の詳細については、「結果のソートとページ分割」をご参照ください。

trackTotalCount (オプション)

int

カウント対象の一致する行の最大数です。デフォルト値は TRACK_TOTAL_COUNT_DISABLED で、カウントが無効になります。すべての一致する行をカウントするには、このパラメーターを TRACK_TOTAL_COUNT に設定します。値を小さくすると、クエリのパフォーマンスが向上します。

filter (オプション)

SearchFilter

クエリの結果に適用されるフィルター

aggregationList (オプション)

List<Aggregation>

集約設定。設定の詳細については、「集約」をご参照ください。

groupByList (オプション)

List<GroupBy>

グループ化設定。設定の詳細については、「集約」をご参照ください。

token (オプション)

byte[]

ページネーショントークンです。このパラメーターに、前の応答の nextToken 値を設定して、行の読み取りを続行します。token を設定すると、トークンにはすでにソート条件が含まれているため、SDK は sort をクリアします。

3 種類のすべてのジオクエリタイプについて、座標は latitude,longitude のフォーマットで、緯度、経度の順に指定します。緯度の有効範囲は [-90,+90]、経度の有効範囲は [-180,+180] です。例: 35.8,-45.91

円形範囲検索の条件

円形範囲検索では、request.searchQuery.query は、次のパラメーターを含む GeoDistanceQuery オブジェクトです。

名前

説明

fieldName (必須)

String

クエリ対象の GEO_POINT インデックスフィールドの名前。

centerPoint (必須)

String

中心点の座標。

distanceInMeter (必須)

double

中心点からの最大距離 (メートル単位)。

バウンディングボックスの条件

四角形範囲検索では、request.searchQuery.query は、次のパラメーターを含む GeoBoundingBoxQuery オブジェクトです。

名前

説明

fieldName (必須)

String

クエリする GEO_POINT インデックスフィールドの名前。

topLeft (必須)

String

バウンディングボックスの左上隅の座標。

bottomRight (必須)

String

バウンディングボックスの右下隅の座標。

ポリゴンの条件

多角形範囲検索の場合、request.searchQuery.query は、次のパラメーターを含む GeoPolygonQuery オブジェクトです。

名前

説明

fieldName (必須)

String

クエリする GEO_POINT 型のインデックスフィールドの名前。

points (必須)

List<String>

ポリゴンを定義する座標点。

返される列

request.columnsToGet は、以下のパラメーターを含む SearchRequest.ColumnsToGet オブジェクトです。

名前

説明

columns (オプション)

List<String>

返す属性列。このパラメーターは、 returnAllreturnAllFromIndex が両方とも false の場合にのみ設定します。このパラメーターを省略した場合、プライマリキー列のみが返されます。

returnAll (オプション)

boolean

データテーブルからすべての属性列を返すかどうかを指定します。デフォルト値は false です。

returnAllFromIndex (オプション)

boolean

すべてのインデックス化された属性列を返すかどうかを指定します。 デフォルト値は false です。 returnAllreturnAllFromIndex の両方を true に設定しないでください。

戻り値

searchSearchResponse オブジェクトを返します。次の表では、コア フィールドについて説明します。

名前

説明

totalCount

long

一致する行数です。getTotalCount() を呼び出して値を取得します。戻り値は trackTotalCount の設定によって異なります。

rows

List<Row>

このクエリによって返される行です。getRows() を呼び出して値を取得します。行数は limit を超えません。

searchHits

List<SearchHit>

クエリのヒット。 getSearchHits() を呼び出して値を取得します。

nextToken

byte[]

次のページを取得するためのトークンです。この値は getNextToken() を呼び出して取得します。値が null でない場合は、次のリクエストで token として設定し、行の読み取りを続行します。

isAllSuccess

boolean

すべてのインデックスパーティションが正常にクエリされたかどうかを示します。isAllSuccess() を呼び出して値を取得します。値が false の場合、応答には部分的な結果が含まれ、totalCount は実際に一致した行数よりも少なくなる場合があります。

シナリオ例

バウンディングボックス内のデータのクエリ

次の例では、location フィールドが、左上の座標が 2,-1、右下の座標が -1,2 のバウンディングボックス内に含まれる行を検索します。

GeoBoundingBoxQuery geoBoundingBoxQuery = new GeoBoundingBoxQuery();
geoBoundingBoxQuery.setFieldName("location");
geoBoundingBoxQuery.setTopLeft("2,-1");
geoBoundingBoxQuery.setBottomRight("-1,2");

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(geoBoundingBoxQuery);

ポリゴン内のデータのクエリ

以下の例では、location フィールドが -1,-1-1,22,2、および 2,-1 の座標ポイントによって定義されるポリゴン内に含まれる行を検索します。

GeoPolygonQuery geoPolygonQuery = new GeoPolygonQuery();
geoPolygonQuery.setFieldName("location");
geoPolygonQuery.setPoints(
        Arrays.asList("-1,-1", "-1,2", "2,2", "2,-1"));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(geoPolygonQuery);