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

Tablestore:地理多角形クエリ

最終更新日:Dec 28, 2024

地理多角形クエリを使用すると、多角形の地理的領域をクエリ条件として指定できます。Tablestoreは、指定されたフィールドの値が、多角形の地理的領域内にある行を返します。

API操作

SearchまたはParallelScan操作でクエリタイプをGeoPolygonQueryに設定することで、地理多角形クエリを実行できます。

パラメーター

パラメーター

説明

fieldName

クエリ対象の列の名前。このパラメーターの値はGEOPOINTデータ型です。

points

多角形の地理的領域を定義する点の座標ペア。

このパラメーター値は、latitude,longitudeの形式である必要があります。緯度の有効な値:[-90,+90]。経度の有効な値:[-180,+180]。例:35.8,-45.91

query

検索インデックスのクエリステートメント。このパラメーターをGeoPolygonQueryに設定します。

getTotalCount

クエリ条件を満たす行の総数を返すかどうかを指定します。このパラメーターのデフォルト値はfalseで、クエリ条件を満たす行の総数は返されません。

このパラメーターをtrueに設定すると、クエリのパフォーマンスが低下します。

tableName

データテーブルの名前。

indexName

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

columnsToGet

クエリ条件を満たす各行のすべての列を返すかどうかを指定します。このパラメーターには、returnAllフィールドとcolumnsフィールドを指定できます。

returnAllフィールドのデフォルト値はfalseで、すべての列が返されるわけではないことを指定します。この場合、columnsフィールドを使用して、返したい列を指定できます。返したい列を指定しない場合は、主キー列のみが返されます。

returnAllフィールドをtrueに設定すると、すべての列が返されます。

方法

Tablestoreコンソール、Tablestore CLI、およびTablestore SDKを使用して、地理多角形クエリを実行できます。地理多角形クエリを実行する前に、以下の前提条件が満たされていることを確認してください。

Tablestoreコンソールの使用

  1. インデックスタブに移動します。

    1. Tablestoreコンソールにログオンします。

    2. 上部のナビゲーションバーで、リソースグループとリージョンを選択します。

    3. 概要ページで、管理するインスタンスの名前をクリックするか、インスタンスのアクション列のインスタンスの管理をクリックします。

    4. インスタンスの詳細タブのテーブルタブで、データテーブルの名前をクリックするか、データテーブルのアクション列のインデックスをクリックします。

  2. インデックスタブで、データのクエリに使用する検索インデックスを見つけ、アクション列のデータの管理をクリックします。

  3. 検索ダイアログボックスで、クエリパラメーターを設定します。

    1. デフォルトでは、システムはすべての属性列を返します。特定の属性列を返すには、すべての列をオフにして、返す属性列を指定します。複数の属性列はコンマ(,)で区切ります。

      説明

      デフォルトでは、システムはデータテーブルのすべての主キー列を返します。

    2. ビジネス要件に基づいて、AndOr、またはNot論理演算子を選択します。

      And論理演算子を選択すると、クエリ条件を満たすデータが返されます。Or演算子を選択して単一のクエリ条件を指定すると、そのクエリ条件を満たすデータが返されます。Or論理演算子を選択して複数のクエリ条件を指定すると、いずれかのクエリ条件を満たすデータが返されます。Not論理演算子を選択すると、クエリ条件を満たさないデータが返されます。

    3. GEOPOINTデータ型のインデックスフィールドを選択し、追加をクリックします。

    4. インデックスフィールドのクエリタイプをGeoPolygonQueryに設定し、多角形の地理的領域を定義する点の座標ペアを入力して選択します。

    5. デフォルトでは、並べ替え機能は無効になっています。クエリ結果を特定のフィールドに基づいて並べ替える場合は、並べ替えをオンにして、クエリ結果を並べ替える基準となるフィールドと並べ替え順序を指定します。

    6. デフォルトでは、集計機能は無効になっています。特定のフィールドの統計を収集する場合は、統計を収集をオンにして、統計を収集する基準となるフィールドを指定し、統計を収集するために必要な情報を設定します。

  4. OKをクリックします。

    クエリ条件を満たすデータが、インデックスタブに指定された順序で表示されます。

Tablestore CLIの使用

Tablestore CLIを使用してsearchコマンドを実行し、検索インデックスを使用してデータをクエリできます。詳細については、検索インデックスを参照してください。

  1. searchコマンドを実行して、search_index検索インデックスを使用してデータをクエリし、クエリ条件を満たす各行のすべてのインデックス付き列を返します。

    search -n search_index --return_all_indexed
  2. システムのプロンプトに従ってクエリ条件を入力します。

    {
        "Offset": -1,
        "Limit": 10,
        "Collapse": null,
        "Sort": null,
        "GetTotalCount": true,
        "Token": null,
        "Query": {
            "Name": "GeoPolygonQuery",
            "Query": {
                "FieldName": "col_geopoint",
                "Points": ["0,0","5,5","5,0"]
            }
        }
    }

Tablestore SDKの使用

Tablestore SDK for JavaTablestore SDK for GoTablestore SDK for PythonTablestore SDK for Node.jsTablestore SDK for .NETTablestore SDK for PHPを使用して地理多角形クエリを実行できます。次の例では、Tablestore SDK for Javaを使用して地理多角形クエリを実行する方法について説明します。

次のサンプルコードは、Col_GeoPoint列の値が指定された多角形地理領域内にある行をクエリする方法の例を示しています。

public static void geoPolygonQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    GeoPolygonQuery geoPolygonQuery = new GeoPolygonQuery();  // GeoPolygonQueryを使用します。
    geoPolygonQuery.setFieldName("Col_GeoPoint");
    geoPolygonQuery.setPoints(Arrays.asList("0,0","5,5","5,0")); // 多角形地理領域の頂点の座標を指定します。
    searchQuery.setQuery(geoPolygonQuery);
    //searchQuery.setGetTotalCount(true); // GetTotalCountパラメーターをtrueに設定して、クエリ条件を満たす行の総数を返します。

    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
    // columnsToGetパラメーターを使用して、返す列を指定するか、すべての列を返すように指定できます。このパラメーターを指定しない場合は、主キー列のみが返されます。
    //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
    //columnsToGet.setReturnAll(true); // すべての列を返すように指定します。
    //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // 返す列を指定します。
    //searchRequest.setColumnsToGet(columnsToGet);

    SearchResponse resp = client.search(searchRequest);
    //System.out.println("TotalCount: " + resp.getTotalCount()); // 返される行数ではなく、クエリ条件を満たす行の総数を表示します。
    System.out.println("Row: " + resp.getRows());
}

課金ルール

検索インデックスを使用してデータをクエリする場合、消費された読み取りスループットに対して課金されます。詳細については、検索インデックスの課金対象項目を参照してください。

FAQ

参考資料