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

时间:2023-11-10 20:36:32

地理查询编辑

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到类路径中为了使用这种类型:

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

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

检查更新Maven*

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

检查更新Maven*

  1. // Import ShapeRelation and ShapeBuilder
  2. import org.elasticsearch.common.geo.ShapeRelation;
  3. import org.elasticsearch.common.geo.builders.ShapeBuilder;
  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

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

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

形状

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

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

  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

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

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

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

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

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

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

关系

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

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

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

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

地理边界框查询编辑

看到地理边界框查询

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

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

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

边界框左上角点

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

边界框右下角点

地理距离查询编辑

看到地理距离查询

  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

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

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

中心点

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

距离中心点

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

优化边界框: memory, indexed none

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

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

地理距离范围查询编辑

看到地理距离范围查询

  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

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

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

中心点

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

距离中心点开始

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

结束中心点的距离

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

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

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

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

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

优化边界框: memory, indexed none

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

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

Geo多边形查询编辑

看到Geo多边形查询

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

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

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

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

Geohash细胞查询编辑

看到Geohash细胞查询

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

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

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

点。也可以是一个散列 u30

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

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

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

精度水平