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选择过滤提供了可能性的筛选细胞旁边给定的细胞。

    精度水平

  • 相关阅读:
    poj 1789 每个字符串不同的字母数代表两个结点间的权值 (MST)
    poj 1251 poj 1258 hdu 1863 poj 1287 poj 2421 hdu 1233 最小生成树模板题
    poj 1631 最多能有多少条不交叉的线 最大非降子序列 (LIS)
    hdu 5256 最少修改多少个数 能使原数列严格递增 (LIS)
    hdu 1025 上面n个点与下面n个点对应连线 求最多能连有多少条不相交的线 (LIS)
    Gym 100512F Funny Game (博弈+数论)
    UVa 12714 Two Points Revisited (水题,计算几何)
    UVa 12717 Fiasco (BFS模拟)
    UVa 12718 Dromicpalin Substrings (暴力)
    UVa 12716 && UVaLive 6657 GCD XOR (数论)
  • 原文地址:https://www.cnblogs.com/a-du/p/9233351.html
Copyright © 2011-2022 走看看