Tablestore SDK for Java を使用したジオクエリは、中心点からの距離、バウンディングボックス、またはポリゴンによってデータをフィルターします。
前提条件
Tablestore SDK for Java をインストールし、クライアントを初期化します。
機能説明
ジオクエリは、GEO_POINT インデックスフィールド内の地理位置に基づいてデータをフィルターします。以下のクエリの種類がサポートされています。
-
円形範囲検索 (
GeoDistanceQuery): 指定された中心点から、指定された距離以下の範囲にある場所をクエリします。 -
四角形範囲検索 (
GeoBoundingBoxQuery): バウンディングボックス内の場所をクエリします。バウンディングボックスは、左上と右下の座標によって定義されます。 -
多角形範囲検索 (
GeoPolygonQuery): ポリゴン内の場所をクエリします。ポリゴンは、複数の座標点によって定義されます。
search を呼び出すとき、クエリする地理的エリアに基づいて、クエリタイプを GeoDistanceQuery、GeoBoundingBoxQuery、または 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 |
リクエストレベルのクエリタイムアウト (ミリ秒) です。デフォルト値は |
|
routingValues (オプション) |
|
カスタムルートフィールドに対応するプライマリキーの値。カスタムルーティングが設定されていない場合は、このパラメーターを設定しないでください。 |
クエリ設定
request.searchQuery は、以下のパラメーターを含む SearchQuery オブジェクトです。
|
名前 |
型 |
説明 |
|
query (必須) |
Query |
クエリ条件です。クエリの種類に基づいて、このパラメーターを |
|
offset (オプション) |
Integer |
クエリの開始位置。 |
|
limit (オプション) |
Integer |
返す行の最大数です。 |
|
collapse (オプション) |
Collapse |
フィールドの折りたたみ設定。指定されたフィールドで結果を重複排除します。設定の詳細については、「クエリ結果の折りたたみ」をご参照ください。 |
|
sort (オプション) |
Sort |
結果のソート順。設定の詳細については、「結果のソートとページ分割」をご参照ください。 |
|
trackTotalCount (オプション) |
int |
カウント対象の一致する行の最大数です。デフォルト値は |
|
filter (オプション) |
SearchFilter |
|
|
aggregationList (オプション) |
|
集約設定。設定の詳細については、「集約」をご参照ください。 |
|
groupByList (オプション) |
|
グループ化設定。設定の詳細については、「集約」をご参照ください。 |
|
token (オプション) |
byte[] |
ページネーショントークンです。このパラメーターに、前の応答の |
3 種類のすべてのジオクエリタイプについて、座標は latitude,longitude のフォーマットで、緯度、経度の順に指定します。緯度の有効範囲は [-90,+90]、経度の有効範囲は [-180,+180] です。例: 35.8,-45.91。
円形範囲検索の条件
円形範囲検索では、request.searchQuery.query は、次のパラメーターを含む GeoDistanceQuery オブジェクトです。
|
名前 |
型 |
説明 |
|
fieldName (必須) |
String |
クエリ対象の |
|
centerPoint (必須) |
String |
中心点の座標。 |
|
distanceInMeter (必須) |
double |
中心点からの最大距離 (メートル単位)。 |
バウンディングボックスの条件
四角形範囲検索では、request.searchQuery.query は、次のパラメーターを含む GeoBoundingBoxQuery オブジェクトです。
|
名前 |
型 |
説明 |
|
fieldName (必須) |
String |
クエリする |
|
topLeft (必須) |
String |
バウンディングボックスの左上隅の座標。 |
|
bottomRight (必須) |
String |
バウンディングボックスの右下隅の座標。 |
ポリゴンの条件
多角形範囲検索の場合、request.searchQuery.query は、次のパラメーターを含む GeoPolygonQuery オブジェクトです。
|
名前 |
型 |
説明 |
|
fieldName (必須) |
String |
クエリする |
|
points (必須) |
|
ポリゴンを定義する座標点。 |
返される列
request.columnsToGet は、以下のパラメーターを含む SearchRequest.ColumnsToGet オブジェクトです。
|
名前 |
型 |
説明 |
|
columns (オプション) |
|
返す属性列。このパラメーターは、 |
|
returnAll (オプション) |
boolean |
データテーブルからすべての属性列を返すかどうかを指定します。デフォルト値は |
|
returnAllFromIndex (オプション) |
boolean |
すべてのインデックス化された属性列を返すかどうかを指定します。 デフォルト値は |
戻り値
search は SearchResponse オブジェクトを返します。次の表では、コア フィールドについて説明します。
|
名前 |
型 |
説明 |
|
totalCount |
long |
一致する行数です。 |
|
rows |
|
このクエリによって返される行です。 |
|
searchHits |
|
クエリのヒット。 |
|
nextToken |
byte[] |
次のページを取得するためのトークンです。この値は |
|
isAllSuccess |
boolean |
すべてのインデックスパーティションが正常にクエリされたかどうかを示します。 |
シナリオ例
バウンディングボックス内のデータのクエリ
次の例では、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,2、2,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);