赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 表格存储
  4. 开发参考
  5. SDK参考
  6. Java SDK
  7. 多元索引
  8. 数据查询
  9. 基础查询
  10. 地理位置查询

地理位置查询

  • 基础查询
  • 发布于 2025-04-22
  • 0 次阅读
文档编辑
文档编辑

地理位置查询包括地理距离查询(GeoDistanceQuery)、地理长方形范围查询(GeoBoundingBoxQuery)和地理多边形范围查询(GeoPolygonQuery)三种方式。

前提条件

  • 已初始化OTSClient。具体操作,请参见初始化Tablestore Client。

  • 已创建数据表并写入数据。具体操作,请参见创建数据表和写入数据。

  • 已在数据表上创建多元索引。具体操作,请参见创建多元索引。

地理距离查询(GeoDistanceQuery)

GeoDistanceQuery根据一个中心点和距离条件查询表中的数据,当一个地理位置点到指定的中心点的距离不超过指定的值时,满足查询条件。

  • 参数

    参数

    说明

    fieldName

    列名,类型为Geopoint。

    centerPoint

    中心地理坐标点,是一个经纬度值。

    格式为纬度,经度,纬度在前,经度在后,且纬度范围为[-90,+90],经度范围为[-180,+180]。例如35.8,-45.91。

    distanceInMeter

    距离中心点的距离。类型为Double。单位为米。

    getTotalCount

    是否返回匹配的总行数,默认为false,表示不返回。

    返回匹配的总行数会影响查询性能。

    query

    多元索引的查询语句。设置查询类型为GeoDistanceQuery。

    tableName

    数据表名称。

    indexName

    多元索引名称。

    columnsToGet

    是否返回所有列,包含returnAll和columns设置。

    returnAll默认为false,表示不返回所有列,此时可以通过columns指定返回的列;如果未通过columns指定返回的列,则只返回主键列。

    当设置returnAll为true时,表示返回所有列。

  • 示例

    以下示例用于查询表中Col_GeoPoint列的值距离中心点不超过一定距离的数据。

    public static void geoDistanceQuery(SyncClient client) {
        SearchQuery searchQuery = new SearchQuery();
        GeoDistanceQuery geoDistanceQuery = new GeoDistanceQuery();  //设置查询类型为GeoDistanceQuery。
        geoDistanceQuery.setFieldName("Col_GeoPoint");
        geoDistanceQuery.setCenterPoint("5,5"); //设置中心点。
        geoDistanceQuery.setDistanceInMeter(10000); //设置条件为到中心点的距离不超过10000米。
        searchQuery.setQuery(geoDistanceQuery);
        //searchQuery.setGetTotalCount(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());
    }

地理长方形范围查询(GeoBoundingBoxQuery)

GeoBoundingBoxQuery根据一个长方形范围的地理位置边界条件查询表中的数据,当一个地理位置点落在给出的长方形范围内时满足查询条件。

  • 参数

    参数

    说明

    fieldName

    列名,类型为Geopoint。

    topLeft

    长方形框的左上角的坐标。

    bottomRight

    长方形框的右下角的坐标,通过左上角和右下角就可以确定一个唯一的长方形。

    格式为纬度,经度,纬度在前,经度在后,且纬度范围为[-90,+90],经度范围[-180,+180]。例如35.8,-45.91。

    query

    多元索引的查询语句。设置查询类型为GeoBoundingBoxQuery。

    getTotalCount

    是否返回匹配的总行数,默认为false,表示不返回。

    返回匹配的总行数会影响查询性能。

    tableName

    数据表名称。

    indexName

    多元索引名称。

    columnsToGet

    是否返回所有列,包含returnAll和columns设置。

    returnAll默认为false,表示不返回所有列,此时可以通过columns指定返回的列;如果未通过columns指定返回的列,则只返回主键列。

    当设置returnAll为true时,表示返回所有列。

  • 示例

    以下示例用于查询表中Col_GeoPoint列的值在左上角为"10,0", 右下角为"0,10"的长方形范围内的数据。

    public static void geoBoundingBoxQuery(SyncClient client) {
        SearchQuery searchQuery = new SearchQuery();
        GeoBoundingBoxQuery geoBoundingBoxQuery = new GeoBoundingBoxQuery(); //设置查询类型为GeoBoundingBoxQuery。
        geoBoundingBoxQuery.setFieldName("Col_GeoPoint"); //设置列名。
        geoBoundingBoxQuery.setTopLeft("10,0"); //设置长方形左上角。
        geoBoundingBoxQuery.setBottomRight("0,10"); //设置长方形右下角。
        searchQuery.setQuery(geoBoundingBoxQuery);
        //searchQuery.setGetTotalCount(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());
    }

地理多边形范围查询(GeoPolygonQuery)

GeoPolygonQuery根据一个多边形范围条件查询表中的数据,当一个地理位置点落在指定的多边形范围内时满足查询条件。

  • 参数

    参数

    说明

    fieldName

    列名,类型为Geopoint。

    points

    组成多边形的距离坐标点。

    格式为纬度,经度,纬度在前,经度在后,且纬度范围为[-90,+90],经度范围为[-180,+180]。例如35.8,-45.91。

    query

    多元索引的查询语句。设置查询类型为GeoPolygonQuery。

    getTotalCount

    是否返回匹配的总行数,默认为false,表示不返回。

    返回匹配的总行数会影响查询性能。

    tableName

    数据表名称。

    indexName

    多元索引名称。

    columnsToGet

    是否返回所有列,包含returnAll和columns设置。

    returnAll默认为false,表示不返回所有列,此时可以通过columns指定返回的列;如果未通过columns指定返回的列,则只返回主键列。

    当设置returnAll为true时,表示返回所有列。

  • 示例

    以下示例用于查询表中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); //设置返回匹配的总行数。
    
        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());
    }

常见问题

  • 使用多元索引Search接口查不到数据

  • 为什么使用多元索引翻页查询时Token失效了?

相关文档

  • 多元索引查询类型包括精确查询、多词精确查询、全匹配查询、匹配查询、短语匹配查询、前缀查询、范围查询、通配符查询、地理位置查询、向量检索、多条件组合查询、嵌套类型查询和列存在性查询,您可以选择合适的查询类型进行多维度数据查询。

    如果要对结果集进行排序或者翻页,您可以使用排序和翻页功能来实现。具体操作,请参见排序和翻页。

    如果要按照某一列对结果集做折叠,使对应类型的数据在结果展示中只出现一次,您可以使用折叠(去重)功能来实现。具体操作,请参见折叠(去重)。

  • 如果要进行数据分析,例如求最值、求和、统计行数等,您可以使用Search接口的统计聚合功能或者SQL查询来实现。具体操作,请参见统计聚合和SQL查询。

  • 如果要快速导出数据,而不关心整个结果集的顺序时,您可以使用ParallelScan接口和ComputeSplits接口实现多并发导出数据。具体操作,请参见并发导出数据。

相关文章

全匹配查询 2025-04-22 14:28

全匹配查询(MatchAllQuery)可以匹配所有行,常用于查询表中数据总行数,或者随机返回几条数据。 前提

精确查询 2025-04-22 14:28

精确查询(TermQuery)采用完整精确匹配的方式查询表中的数据,类似于字符串匹配。对于Text类型字段,只要Text类型的字段值分词后有词条可以精确匹配查询关键词即可,查询关键词不会被分词。

多词精确查询 2025-04-22 14:28

多词精确查询(TermsQuery)类似于精确查询(TermQuery),但是TermsQuery可以指定多个查询关键词,查询匹配这些词的数据。多个查询关键词中只要有一个词能精确匹配,该行数据就会被返回,等价于SQL中的In。

前缀查询 2025-04-22 14:28

前缀查询(PrefixQuery)是通过指定前缀条件查询索引中的数据。本文介绍如何通过Java SDK使用前缀查询。 前提条件

后缀查询 2025-04-22 14:28

后缀查询(SuffixQuery)是通过指定后缀条件查询索引中的数据,例如通过手机尾号后4位查询快递。 前提条件

通配符查询 2025-04-22 14:28

使用通配符查询(WildcardQuery)可以实现模糊查询,类似于数据库中的Like语法,例如查询文本中包含某个词或短句的数据。 背景信息

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号