在地理点的给定距离内匹配geo_point和geo_shape值。
示例
假设有如下索引:
PUT /my_locations
{
"mappings": {
"properties": {
"pin": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
}
}
PUT /my_locations/_doc/1
{
"pin": {
"location": {
"lat": 40.12,
"lon": -71.34
}
}
}
PUT /my_geoshapes
{
"mappings": {
"properties": {
"pin": {
"properties": {
"location": {
"type": "geo_shape"
}
}
}
}
}
}
PUT /my_geoshapes/_doc/1
{
"pin": {
"location": {
"type" : "polygon",
"coordinates" : [[[13.0 ,51.5], [15.0, 51.5], [15.0, 54.0], [13.0, 54.0], [13.0 ,51.5]]]
}
}
}
使用geo_distance过滤器匹配距离另一个地理点指定距离内的geo_point值
GET /my_locations/_search
{
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"geo_distance": {
"distance": "200km",
"pin.location": {
"lat": 40,
"lon": -70
}
}
}
}
}
}
使用相同的过滤器匹配给定距离内的geo_shape值:
GET my_geoshapes/_search
{
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"geo_distance": {
"distance": "200km",
"pin.location": {
"lat": 40,
"lon": -70
}
}
}
}
}
}
要匹配geo_point和geo_shape值,搜索这两个索引:
GET my_locations,my_geoshapes/_search
{
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"geo_distance": {
"distance": "200km",
"pin.location": {
"lat": 40,
"lon": -70
}
}
}
}
}
}
支持的格式
就像geo_point类型可以接受geo点的不同表示方式一样,过滤器也可以接受它:参照geo_bounding_box查询
查询选项
选项 | 说明 |
distance | 以指定位置为中心的圆的半径。落入这个圆圈的点被认为是匹配的。距离可以用各种单位来表示,参照 Distance Units. |
distance_type | 如何计算距离。可以是弧线(默认),也可以是平面(更快,但在长距离和接近极点时不准确)。 |
_name | 可选名称字段来标识查询 |
validation_method | 设置为IGNORE_MALFORMED以接受纬度或经度无效的地理点,设置为COERCE以额外尝试和推断正确的坐标(默认为STRICT)。 |
多位置文档
geo_distance过滤器可以处理每个文档的多个位置/点。一旦一个位置/点匹配过滤器,该文档将被包含在过滤器中。
忽略未映射的
当ignore_unmapped选项设置为true时,将忽略未映射字段,并且不会匹配此查询的任何文档。这在查询可能具有不同映射的多个索引时很有用。当设置为false(默认值)时,如果该字段没有映射,查询将抛出异常。