Elasticsearch支持两种类型的地理数据: geo_point
纬度/经度对字段的支持,和 geo_shape
领域,支持点、线、圆、多边形、多等。
这组查询:
看到Geo形状查询
注意: geo_shape
类型使用 Spatial4J
和 JTS
,这两个都是可选的依赖性。因此您必须添加 Spatial4J
和JTS
到类路径中为了使用这种类型:
- <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>
- import org.elasticsearch.common.geo.ShapeRelation;
- import org.elasticsearch.common.geo.builders.ShapeBuilder;
- QueryBuilder qb = geoShapeQuery(
- "pin.location",
- ShapeBuilder.newMultiPoint()
- .point(0, 0)
- .point(0, 10)
- .point(10, 10)
- .point(10, 0)
- .point(0, 0),
- ShapeRelation.WITHIN);

|
场
|

|
形状
|

|
关系可以 ShapeRelation.WITHIN , ShapeRelation.INTERSECTS 或 ShapeRelation.DISJOINT
|
- QueryBuilder qb = geoShapeQuery(
- "pin.location",
- "DEU",
- "countries",
- ShapeRelation.WITHIN)
- .indexedShapeIndex("shapes")
- .indexedShapePath("location");

|
场
|

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

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

|
关系
|

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

|
包含预先索引的字段指定为路径的形状。默认为 形状.
|
看到地理边界框查询
- QueryBuilder qb = geoBoundingBoxQuery("pin.location")
- .topLeft(40.73, -74.1)
- .bottomRight(40.717, -73.99);
- QueryBuilder qb = geoDistanceQuery("pin.location")
- .point(40, -70)
- .distance(200, DistanceUnit.KILOMETERS)
- .optimizeBbox("memory")
- .geoDistance(GeoDistance.ARC);

|
场
|

|
中心点
|

|
距离中心点
|

|
优化边界框: memory , indexed 或 none
|

|
距离计算模式: GeoDistance.SLOPPY_ARC (默认), GeoDistance.ARC 或(更精确,但明显慢)GeoDistance.PLANE (更快,但不准确的长距离和接近两极)
|
- QueryBuilder qb = geoDistanceRangeQuery("pin.location")
- .point(40, -70)
- .from("200km")
- .to("400km")
- .includeLower(true)
- .includeUpper(false)
- .optimizeBbox("memory")
- .geoDistance(GeoDistance.ARC);

|
场
|

|
中心点
|

|
距离中心点开始
|

|
结束中心点的距离
|

|
包括意味着更低的价值 from 是 gt 当 false 或 gte 当 true
|

|
包括上意味着价值 to 是 lt 当 false 或 lte 当 true
|

|
优化边界框: memory , indexed 或 none
|

|
距离计算模式: GeoDistance.SLOPPY_ARC (默认), GeoDistance.ARC 或(更精确,但明显慢)GeoDistance.PLANE (更快,但不准确的长距离和接近两极)
|
- QueryBuilder qb = geoPolygonQuery("pin.location")
- .addPoint(40, -70)
- .addPoint(30, -80)
- .addPoint(20, -90);
- QueryBuilder qb = geoHashCellQuery("pin.location",
- new GeoPoint(13.4080, 52.5186))
- .neighbors(true)
- .precision(3);

|
场
|

|
点。也可以是一个散列 u30
|

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

|
精度水平
|
Elasticsearch java API (23)查询 DSL Geo查询
原文:https://www.cnblogs.com/a-du/p/9233351.html