地理位置クエリは、地理的距離クエリ、地理的境界ボックスクエリ、地理的多角形クエリの3つのタイプに分類されます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化をご参照ください。
データテーブルが作成され、データがテーブルに書き込まれていること。詳細については、データテーブルの作成とデータの書き込みをご参照ください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成をご参照ください。
地理的距離クエリ
地理的距離クエリを実行するには、中心点と半径を使用して円形の地理的エリアを指定します。 Tablestore は、特定の列の値が円形の地理的エリア内にある行を返します。
パラメーター
パラメーター
説明
table_name
データテーブルの名前。
index_name
検索インデックスの名前。
query
検索インデックスのクエリステートメント。地理的距離クエリを使用するには、クエリタイプを QueryTypeConst::GEO_DISTANCE_QUERY に設定します。
field_name
クエリ対象の列の名前。このパラメーターの値は GEOPOINT データ型です。
center_point
中心点の座標ペア。座標ペアは緯度と経度の値で構成されます。
座標ペアは
latitude,longitude
形式です。緯度の有効な値: [-90,+90]。経度の有効な値: [-180,+180]。例:35.8,-45.91
。distance
円形地理領域の半径。このパラメーターの値は DOUBLE データ型です。単位:メートル。
例
次のサンプルコードは、データテーブルにおいて、geo 列のデータが中心点
30.001,120.001
から 1,000 メートル以内にあるすべての行をクエリする方法を示しています。$request = array( 'table_name' => 'php_sdk_test', 'index_name' => 'php_sdk_test_search_index', 'search_query' => array( 'offset' => 0, 'limit' => 2, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::GEO_DISTANCE_QUERY, 'query' => array( 'field_name' => 'geo', 'center_point' => '30.001,120.001', 'distance' => 1000 ) ), 'sort' => array( array( 'geo_distance_sort' => array( 'field_name' => 'geo', 'order' => SortOrderConst::SORT_ORDER_ASC, 'distance_type' => GeoDistanceTypeConst::GEO_DISTANCE_PLANE, 'points' => array('30,120') ) ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED, 'return_names' => array('geo') ) ); $response = $otsClient->search($request);
地理的境界ボックスクエリ
地理的境界ボックスクエリを実行するには、左上隅と右下隅を使用して矩形の地理的エリアを指定します。 Tablestore は、特定の列の値が矩形の地理的エリア内にある行を返します。
パラメーター
パラメーター
説明
table_name
データテーブルの名前。
index_name
検索インデックスの名前。
query
検索インデックスのクエリステートメント。地理的境界クエリを使用するには、クエリタイプを QueryTypeConst::GEO_BOUNDING_BOX_QUERY に設定します。
field_name
クエリ対象の列の名前。このパラメーターの値は GEOPOINT データ型です。
top_left
矩形地理領域の左上隅の座標ペア。
bottom_right
矩形地理領域の右下隅の座標ペア。矩形地理領域は、左上隅と右下隅で指定できます。
座標ペアは
latitude,longitude
形式です。緯度の有効な値: [-90,+90]。経度の有効な値: [-180,+180]。例:35.8,-45.91
。例
次のサンプルコードは、データテーブルにおいて、geo 列のデータが左上点(座標:
31,119
)と右下点(座標:29,121
)で定義された矩形領域内にあるすべての行をクエリする方法を示しています。$request = array( 'table_name' => 'php_sdk_test', 'index_name' => 'php_sdk_test_search_index', 'search_query' => array( 'offset' => 0, 'limit' => 2, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::GEO_BOUNDING_BOX_QUERY, 'query' => array( 'field_name' => 'geo', 'top_left' => '31,119', 'bottom_right' => '29,121' ) ), 'sort' => array( array( 'geo_distance_sort' => array( 'field_name' => 'geo', 'order' => SortOrderConst::SORT_ORDER_ASC, 'distance_type' => GeoDistanceTypeConst::GEO_DISTANCE_PLANE, 'points' => array('30,120') ) ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED, 'return_names' => array('geo') ) ); $response = $otsClient->search($request);
地理的多角形クエリ
地理的多角形クエリを実行するには、複数点の座標ペアを使用して多角形の地理的エリアを指定します。 Tablestore は、特定の列の値が多角形の地理的エリア内にある行を返します。
パラメーター
パラメーター
説明
table_name
データテーブルの名前。
index_name
検索インデックスの名前。
query
検索インデックスのクエリステートメント。地理的多角形クエリを使用するには、クエリタイプを QueryTypeConst::GEO_POLYGON_QUERY に設定します。
field_name
クエリ対象の列の名前。このパラメーターの値は GEOPOINT データ型です。
points
多角形地理領域を定義する点の座標ペア。複数の座標ペアを使用して多角形を指定できます。
座標ペアは
latitude,longitude
形式です。緯度の有効な値: [-90,+90]。経度の有効な値: [-180,+180]。例:35.8,-45.91
。例
次のサンプルコードは、データテーブルにおいて、geo 列のデータが、座標がそれぞれ
31,120
、29,121
、29,119
である点で定義された多角形領域内にあるすべての行をクエリする方法を示しています。$request = array( 'table_name' => 'php_sdk_test', 'index_name' => 'php_sdk_test_search_index', 'search_query' => array( 'offset' => 0, 'limit' => 2, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::GEO_POLYGON_QUERY, 'query' => array( 'field_name' => 'geo', 'points' => array( "31,120", "29,121", "29,119" ) ) ), 'sort' => array( array( 'geo_distance_sort' => array( 'field_name' => 'geo', 'order' => SortOrderConst::SORT_ORDER_ASC, 'distance_type' => GeoDistanceTypeConst::GEO_DISTANCE_PLANE, 'points' => array('30,120') ) ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED, 'return_names' => array('geo') ) ); $response = $otsClient->search($request);
FAQ
参考資料
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます:用語クエリ、複数用語クエリ、すべて一致クエリ、一致クエリ、フレーズ一致クエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、ブールクエリ、地理位置クエリ、ネストされたクエリ、存在クエリ。ビジネス要件に基づいて、さまざまなクエリメソッドを使用して複数のディメンションからデータをクエリできます。
クエリ条件を満たす行をソートまたはページ分割する場合は、ソートおよびページ分割機能を使用できます。詳細については、ソートとページ分割をご参照ください。
特定の列に基づいて結果セットを折りたたむ場合は、折りたたみ(重複排除)機能を使用できます。このようにして、指定されたタイプのデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ(重複排除)をご参照ください。
データテーブルのデータ(極値、合計、行の総数など)を分析する場合は、集計操作を実行するか、SQL ステートメントを実行できます。詳細については、集計とSQL クエリをご参照ください。
行をソートする必要なく、クエリ条件を満たすすべての行をすばやく取得する場合は、ParallelScan および ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンをご参照ください。