dsfs
过滤仅包含距离地理位置特定距离内的命中的文档。 假设以下映射和索引文档:
PUT /my_locations
{
"mappings": {
"location": {
"properties": {
"pin": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
}
}
}
PUT /my_locations/location/1
{
"pin" : {
"location" : {
"lat" : 40.12,
"lon" : -71.34
}
}
}
然后可以使用 geo_distance 过滤器执行以下简单查询:
GET /my_locations/location/_search
{
"query": {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "200km",
"pin.location" : {
"lat" : 40,
"lon" : -70
}
}
}
}
}
}
以同样的方式,geo_point 类型可以接受地理点的不同表示,过滤器也可以接受它:
GET /my_locations/location/_search
{
"query": {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "12km",
"pin.location" : {
"lat" : 40,
"lon" : -70
}
}
}
}
}
}
Format in [lon, lat]
, note, the order of lon/lat here in order to conform with GeoJSON.
GET /my_locations/location/_search
{
"query": {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "12km",
"pin.location" : [-70, 40]
}
}
}
}
}
Format in lat,lon
.
GET /my_locations/location/_search
{
"query": {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "12km",
"pin.location" : "40,-70"
}
}
}
}
}
GET /my_locations/location/_search
{
"query": {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "12km",
"pin.location" : "drm3btev3e86"
}
}
}
}
}
以下是过滤器上允许的选项:
| **distance**(距离)
| 以指定位置为中心的圆的半径。 落入此圈子的点被认为是匹配的。 距离可以用各种单位指定。 看 the section called “Distance Unitsedit”. |
| distance_type(距离类型) | 如何计算距离。 可以是弧(默认)或平面(更快,但长距离不准确,靠近极点)。 |
| optimize_bbox(优化bbox) | 是否在距离检查之前首先运行边框检查使用优化。 默认在内存检查中执行的内存。 也可以使用索引值来使用索引值检查(在这种情况下确保geo_pointtype索引lat lon),否则禁用边界框优化。[~~2.2~~] |
| _name(名称) | 可选名称字段来标识查询。 |
| **ignore_malformed**(忽略格式错误)
| [~~<sub>5.0.0</sub>~~] 设置为 true 以接受无效纬度或经度的地理点(默认值为假)。 |
| **validation_method**(验证方法)
| 设置为 IGNORE_MALFORMED 以接受无效纬度或经度的地理点,设置为 COERCE 以额外尝试推断正确的坐标(默认为 STRICT)。 |
过滤器需要在相关字段上设置 geo_point 类型。
geo_distance 过滤器可以处理每个文档的多个位置/点。 一旦单个位置/点与过滤器匹配,文档将被包含在过滤器中。
当设置为 true 时,ignore_unmapped 选项将忽略未映射字段,并且将不会匹配此查询的任何文档。 当查询可能具有不同映射的多个索引时,可能很有用。 当设置为 false(默认值)时,如果字段未映射,则查询将抛出异常。