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

Tablestore:Geo クエリ

最終更新日:Dec 28, 2024

Geo クエリは、geo 距離クエリ、geo バウンディングボックス クエリ、geo ポリゴンクエリの 3 つのタイプに分類されます。

前提条件

Geo 距離クエリ

geo 距離クエリを実行するには、中心点と半径を使用して円形の地理的エリアを指定します。 Tablestore は、特定の列の値が円形の地理的エリア内にある行を返します。

  • パラメーター

    パラメーター

    説明

    FieldName

    クエリ条件を満たすために使用される列の名前。このパラメーターの値は GEOPOINT データ型です。

    CenterPoint

    中心点の座標ペア。座標ペアは、緯度と経度の値で構成されます。

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

    DistanceInMeter

    円形地理領域の半径。このパラメーターの値は DOUBLE データ型です。単位:メートル。

    Query

    クエリのタイプ。クエリタイプを GeoDistanceQuery に設定します。

    TableName

    データテーブルの名前。

    IndexName

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

  • サンプルコード

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

    func GeoDistanceQuery(client *tablestore.TableStoreClient, tableName string, indexName string) {
        searchRequest := &tablestore.SearchRequest{}
        searchRequest.SetTableName(tableName)
        searchRequest.SetIndexName(indexName)
        query := &search.GeoDistanceQuery{} // クエリタイプを GeoDistanceQuery に設定します。
        query.FieldName = "Col_GeoPoint"
        query.CenterPoint = "5,5"  // 中心点の座標ペアを指定します。
        query.DistanceInMeter = 10000.0 // 円形地理領域の半径を 10,000 に設定します。単位:メートル。
        searchQuery := search.NewSearchQuery()
        searchQuery.SetQuery(query)
        searchRequest.SetSearchQuery(searchQuery)
        // すべての列を返します。
        searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
            ReturnAll:true,
        })
        searchResponse, err := client.Search(searchRequest)
        if err != nil {
            fmt.Printf("%#v", err)
            return
        }
        fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // クエリ条件を満たすすべての行が返されたかどうかを確認します。
        fmt.Println("TotalCount: ", searchResponse.TotalCount) // 返された行数ではなく、クエリ条件を満たす行の総数を表示します。
        fmt.Println("RowCount: ", len(searchResponse.Rows))
        for _, row := range searchResponse.Rows {
            jsonBody, err := json.Marshal(row)
            if err != nil {
                panic(err)
            }
            fmt.Println("Row: ", string(jsonBody))
        }
    }

Geo バウンディングボックス クエリ

geo バウンディングボックス クエリを実行するには、左上隅と右下隅を使用して矩形の地理的エリアを指定します。 Tablestore は、特定の列の値が矩形の地理的エリア内にある行を返します。

  • パラメーター

    パラメーター

    説明

    FieldName

    クエリ条件を満たすために使用される列の名前。このパラメーターの値は GEOPOINT データ型です。

    TopLeft

    矩形地理領域の左上隅の座標ペア。

    BottomRight

    矩形地理領域の右下隅の座標ペア。左上隅と右下隅の座標ペアは、一意の矩形地理領域を定義します。

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

    Query

    クエリのタイプ。クエリタイプを GeoBoundingBoxQuery に設定します。

    TableName

    データテーブルの名前。

    IndexName

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

  • サンプルコード

    次のサンプルコードは、Col_GeoPoint の値が、左上隅が「10,0」で右下隅が「0,10」である矩形地理領域内にある行をクエリする方法の例を示しています。

    func GeoBoundingBoxQuery(client *tablestore.TableStoreClient, tableName string, indexName string) {
        searchRequest := &tablestore.SearchRequest{}
        searchRequest.SetTableName(tableName)
        searchRequest.SetIndexName(indexName)
        query := &search.GeoBoundingBoxQuery{} // クエリタイプを GeoBoundingBoxQuery に設定します。
        query.FieldName = "Col_GeoPoint"  // クエリする列の名前を指定します。
        query.TopLeft = "10,0"  // 矩形地理領域の左上隅の座標ペアを指定します。
        query.BottomRight = "0,10" // 矩形地理領域の右下隅の座標ペアを指定します。
        searchQuery := search.NewSearchQuery()
        searchQuery.SetQuery(query)
        searchRequest.SetSearchQuery(searchQuery)
        // クエリ条件を満たす行のすべての列を返します。
        searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
            ReturnAll:true,
        })
        searchResponse, err := client.Search(searchRequest)
        if err != nil {
            fmt.Printf("%#v", err)
            return
        }
        fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // クエリ条件を満たすすべての行が返されたかどうかを確認します。
        fmt.Println("TotalCount: ", searchResponse.TotalCount) // 返された行数ではなく、クエリ条件を満たす行の総数を表示します。
        fmt.Println("RowCount: ", len(searchResponse.Rows))
        for _, row := range searchResponse.Rows {
            jsonBody, err := json.Marshal(row)
            if err != nil {
                panic(err)
            }
            fmt.Println("Row: ", string(jsonBody))
        }
    }

Geo ポリゴンクエリ

geo ポリゴンクエリを実行するには、複数の点の座標ペアを使用してポリゴン地理領域を指定します。 Tablestore は、特定の列の値がポリゴン地理的エリア内にある行を返します。

  • パラメーター

    パラメーター

    説明

    FieldName

    クエリ条件を満たすために使用される列の名前。このパラメーターの値は GEOPOINT データ型です。

    Points

    ポリゴン地理領域を定義する点の座標ペア。

    各点の座標ペアは、「緯度,経度」の形式である必要があります。緯度の有効な値:[-90,90]。経度の有効な値:[-180,180]。例:「35.8,-45.91」。

    Query

    クエリのタイプ。クエリタイプを GeoPolygonQuery に設定します。

    TableName

    データテーブルの名前。

    IndexName

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

  • サンプルコード

    次のサンプルコードは、Col_GeoPoint の値がポリゴン地理領域内にある行をクエリする方法の例を示しています。

    func GeoPolygonQuery(client *tablestore.TableStoreClient, tableName string, indexName string) {
        searchRequest := &tablestore.SearchRequest{}
        searchRequest.SetTableName(tableName)
        searchRequest.SetIndexName(indexName)
        query := &search.GeoPolygonQuery{} // クエリタイプを GeoDistanceQuery に設定します。
        query.FieldName = "Col_GeoPoint"
        query.Points = []string{"0,0","5,5","5,0"} // ポリゴン地理領域の頂点の座標ペアを指定します。
        searchQuery := search.NewSearchQuery()
        searchQuery.SetQuery(query)
        searchRequest.SetSearchQuery(searchQuery)
        // クエリ条件を満たす行のすべての列を返します。
        searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
            ReturnAll:true,
        })
        searchResponse, err := client.Search(searchRequest)
        if err != nil {
            fmt.Printf("%#v", err)
            return
        }
        fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // クエリ条件を満たすすべての行が返されたかどうかを確認します。
        fmt.Println("TotalCount: ", searchResponse.TotalCount) // 返された行数ではなく、クエリ条件を満たす行の総数を表示します。
        fmt.Println("RowCount: ", len(searchResponse.Rows))
        for _, row := range searchResponse.Rows {
            jsonBody, err := json.Marshal(row)
            if err != nil {
                panic(err)
            }
            fmt.Println("Row: ", string(jsonBody))
        }
    }

FAQ

参考資料