地理查询编辑
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到类路径中为了使用这种类型:
com.spatial4j
spatial4j
0.4.1
com.vividsolutions
jts
1.13
xerces
xercesImpl
检查更新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选择过滤提供了可能性的筛选细胞旁边给定的细胞。
精度水平