您的位置:首页 > 编程语言 > Java开发

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

2016-07-04 14:06 896 查看


地理查询编辑

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
,这两个都是可选的依赖性。因此您必须添加
 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>



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


精度水平
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息