Elasticsearch java API (23)查询 DSL Geo查询

地理查询编辑

Elasticsearch支持两种类型的地理数据: geo_point纬度/经度对字段的支持,和 geo_shape领域,支持点、线、圆、多边形、多等。

这组查询:

geo_shape 查询
发现文档与几何图型相交,包含,或与指定的geo-shape不相交。
geo_bounding_box 查询
发现文档与geo-points落入指定的矩形。
geo_distance 查询
发现文档geo-points内指定的中心点的距离。
geo_distance_range 查询
就像  geo_point 查询,但是范围是从一个指定的中心点的距离。
geo_polygon 查询
发现文档geo-points内指定的多边形。
geohash_cell 查询
找到的geo-points geohash相交的geohash指定点。

GeoShape查询编辑

看到Geo形状查询

注意: geo_shape类型使用 Spatial4J JTS,这两个都是可选的依赖性。因此您必须添加 Spatial4JJTS到类路径中为了使用这种类型:

<dependency>
    <groupId>com.spatial4j</groupId>
    <artifactId>spatial4j</artifactId>
    <version>0.4.1</version>     <!--1-->                   
</dependency>

<dependency>
    <groupId>com.vividsolutions</groupId>
    <artifactId>jts</artifactId>
    <version>1.13</version>         <!--2-->                
    <exclusions>
        <exclusion>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
        </exclusion>
    </exclusions>
</dependency>

检查更新Maven中央

检查更新Maven中央

// Import ShapeRelation and ShapeBuilder
import org.elasticsearch.common.geo.ShapeRelation;
import org.elasticsearch.common.geo.builders.ShapeBuilder;
QueryBuilder qb = geoShapeQuery(
    "pin.location",               //1      
    ShapeBuilder.newMultiPoint()      //2  
        .point(0, 0)
        .point(0, 10)
        .point(10, 10)
        .point(10, 0)
        .point(0, 0),
    ShapeRelation.WITHIN);   //3           

形状

关系可以 ShapeRelation.WITHIN, ShapeRelation.INTERSECTS ShapeRelation.DISJOINT

// Using pre-indexed shapes
QueryBuilder qb = geoShapeQuery(
        "pin.location",        //1     
        "DEU",                    //2  
        "countries",                //3
        ShapeRelation.WITHIN)       //4
    .indexedShapeIndex("shapes")    //5
    .indexedShapePath("location");  //6

文档的ID包含预先索引的形状。

索引类型预先索引形状在哪里。

关系

预先索引的索引的名称,形状。默认为 形状.

包含预先索引的字段指定为路径的形状。默认为 形状.

地理边界框查询编辑

看到地理边界框查询

QueryBuilder qb = geoBoundingBoxQuery("pin.location") //1
    .topLeft(40.73, -74.1)                //2            
    .bottomRight(40.717, -73.99);        //3             

边界框左上角点

边界框右下角点

地理距离查询编辑

看到地理距离查询

QueryBuilder qb = geoDistanceQuery("pin.location")  //1
    .point(40, -70)                                 //2
    .distance(200, DistanceUnit.KILOMETERS)         //3
    .optimizeBbox("memory")                         //4
    .geoDistance(GeoDistance.ARC);                  //5

中心点

距离中心点

优化边界框: memory, indexed none

距离计算模式: GeoDistance.SLOPPY_ARC(默认), GeoDistance.ARC或(更精确,但明显慢)GeoDistance.PLANE(更快,但不准确的长距离和接近两极)

地理距离范围查询编辑

看到地理距离范围查询

QueryBuilder qb = geoDistanceRangeQuery("pin.location")      //1   
    .point(40, -70)                                             //2
    .from("200km")                                              //3
    .to("400km")                                                //4
    .includeLower(true)                                         //5
    .includeUpper(false)                                        //6
    .optimizeBbox("memory")                                     //7
    .geoDistance(GeoDistance.ARC);                              //8

中心点

距离中心点开始

结束中心点的距离

包括意味着更低的价值 from gt false gte true

包括上意味着价值 to lt false lte true

优化边界框: memory, indexed none

距离计算模式: GeoDistance.SLOPPY_ARC(默认), GeoDistance.ARC或(更精确,但明显慢)GeoDistance.PLANE(更快,但不准确的长距离和接近两极)

Geo多边形查询编辑

看到Geo多边形查询

QueryBuilder qb = geoPolygonQuery("pin.location")    //1   
    .addPoint(40, -70)                                  //2
    .addPoint(30, -80)                                  //3
    .addPoint(20, -90);                                 //4

添加一个文档应落在多边形的点

Geohash细胞查询编辑

看到Geohash细胞查询

QueryBuilder qb = geoHashCellQuery("pin.location",  //1
            new GeoPoint(13.4080, 52.5186))         //2
        .neighbors(true)                            //3
        .precision(3);                              //4

点。也可以是一个散列 u30

 neighbors选择过滤提供了可能性的筛选细胞旁边给定的细胞。

精度水平









  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值