zoukankan      html  css  js  c++  java
  • 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到类路径中为了使用这种类型:

    [java] view plain copy
     
    1. <dependency>  
    2.     <groupId>com.spatial4j</groupId>  
    3.     <artifactId>spatial4j</artifactId>  
    4.     <version>0.4.1</version>     <!--1-->                     
    5. </dependency>  
    6.   
    7. <dependency>  
    8.     <groupId>com.vividsolutions</groupId>  
    9.     <artifactId>jts</artifactId>  
    10.     <version>1.13</version>         <!--2-->                  
    11.     <exclusions>  
    12.         <exclusion>  
    13.             <groupId>xerces</groupId>  
    14.             <artifactId>xercesImpl</artifactId>  
    15.         </exclusion>  
    16.     </exclusions>  
    17. </dependency>  

    检查更新Maven中央

    检查更新Maven中央

    [java] view plain copy
     
    1. // Import ShapeRelation and ShapeBuilder  
    2. import org.elasticsearch.common.geo.ShapeRelation;  
    3. import org.elasticsearch.common.geo.builders.ShapeBuilder;  
    [java] view plain copy
     
    1. QueryBuilder qb = geoShapeQuery(  
    2.     "pin.location",               //1        
    3.     ShapeBuilder.newMultiPoint()      //2    
    4.         .point(0, 0)  
    5.         .point(0, 10)  
    6.         .point(10, 10)  
    7.         .point(10, 0)  
    8.         .point(0, 0),  
    9.     ShapeRelation.WITHIN);   //3             

    形状

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

    [java] view plain copy
     
    1. // Using pre-indexed shapes  
    2. QueryBuilder qb = geoShapeQuery(  
    3.         "pin.location",        //1       
    4.         "DEU",                    //2    
    5.         "countries",                //3  
    6.         ShapeRelation.WITHIN)       //4  
    7.     .indexedShapeIndex("shapes")    //5  
    8.     .indexedShapePath("location");  //6  

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

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

    关系

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

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

    地理边界框查询编辑

    看到地理边界框查询

    [java] view plain copy
     
    1. QueryBuilder qb = geoBoundingBoxQuery("pin.location") //1  
    2.     .topLeft(40.73, -74.1)                //2              
    3.     .bottomRight(40.717, -73.99);        //3               

    边界框左上角点

    边界框右下角点

    地理距离查询编辑

    看到地理距离查询

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

    中心点

    距离中心点

    优化边界框: memory, indexed none

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

    地理距离范围查询编辑

    看到地理距离范围查询

    [java] view plain copy
     
    1. QueryBuilder qb = geoDistanceRangeQuery("pin.location")      //1     
    2.     .point(40, -70)                                             //2  
    3.     .from("200km")                                              //3  
    4.     .to("400km")                                                //4  
    5.     .includeLower(true)                                         //5  
    6.     .includeUpper(false)                                        //6  
    7.     .optimizeBbox("memory")                                     //7  
    8.     .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多边形查询

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

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

    Geohash细胞查询编辑

    看到Geohash细胞查询

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

    点。也可以是一个散列 u30

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

    精度水平

  • 相关阅读:
    搭建Vmware Workstation 12 + Kylin 4.02(Ubuntu 16.04) + petalinux + Vivado
    dash 和 bash 切换
    centos的镜像下载
    docker部署redis,kafka
    Centos7下使用mail发送邮件配置
    实现内网主机既能访问yum源,又能curl通baidu,外网nginx的配置
    centos7下使用mysql离线安装包安装mysql5.7
    内网主机使用nginx代理访问阿里yum源
    配置阿里云yum源
    centos下查看cpu核数
  • 原文地址:https://www.cnblogs.com/a-du/p/9233351.html
Copyright © 2011-2022 走看看