Elasticsearch(021):es常见的字段映射类型之地理点类型(geo-point)
程序员文章站
2022-04-23 15:46:32
...
概念
大家平时肯定经常美团、饿了吗类似的外卖软件。她其中最常见的功能就是附件的商家的功能。她这功能就能借助es来实现。
es中的地理位置数据类型:该类型的字段接受经纬度对,进行使用。
常见的使用场景
- 在边界框内,中心点一定距离内或多边形内找到地理点
- 以
地理位置
或距中心点
的距离汇总文档 - 将距离整合到文档的相关性分数中
- 按
距离
对文档进行排序
示例使用
1、映射定义示例如下。
PUT example
PUT example/docs/_mapping
{
"properties":{
"cityId":{"type": "long"},
"cityName":{"type": "text"},
"location":{"type": "geo_point"},
"remark":{"type": "text"}
}
}
2、新增文档示例如下。
PUT example/docs/1
{
"cityId":1,
"cityName":"xi'an",
"location": {
"lat":"34.45",
"lon":"107.40"
},
"remark":"中国旅游城市"
}
PUT example/docs/2
{
"cityId":2,
"cityName":"Singapore",
"location": "1.05,104.60",
"remark":"世界港口"
}
PUT example/docs/3
{
"cityId":3,
"cityName":"Sydney",
"location": [151.12, -33.51],
"remark":"澳洲大城"
}
2、搜索示例如下。
我们可以看得出来,geo_point
类型的字段有至少有三种形式的添加方式。
- 用
lat
和lon
键表示为对象的地理位置 - 以字符串形式表示的地理位置,格式为:"
lat,lon
" - 表示为数组的地理位置,格式为:
[lon,lat]
测试数据已经添加进去,搜索时怎么使用呢。如下
我们假设这样一个需求,搜索在指定经纬度区域的城市有哪些?
GET example/docs/_search
{
"query":{
"geo_bounding_box": {
"location":{
"top_left":{
"lat": 50,
"lon": 110
},
"bottom_right":{
"lat": -40,
"lon": 179
}
}
}
}
}
有关geo-point
的搜索后面会有专门的小节来讲解。我们在这里重点在于理解geo-point
类型的定义和基础用法。
上一篇: Elasticsearch(023):es常见的字段映射类型之IP类型
下一篇: mAP的计算方法
推荐阅读
-
Elasticsearch(017):es常见的字段映射类型之嵌套类型(nested)
-
Elasticsearch(023):es常见的字段映射类型之IP类型
-
Elasticsearch(021):es常见的字段映射类型之地理点类型(geo-point)
-
Elasticsearch(025):es常见的字段映射类型之单词计数类型(token count)
-
Elasticsearch(019):es常见的字段映射类型之数组类型(arrays)
-
Elasticsearch(020):es常见的字段映射类型之二进制类型(binary)
-
Elasticsearch(016):es常见的字段映射类型之对象类型(object)
-
Elasticsearch(024):es常见的字段映射类型之 连接类型(join type)
-
Elasticsearch(022):es常见的字段映射类型之地理形状类型(geo_shape、多边的复杂的地址形状)
-
Elasticsearch(014):es常见的字段映射类型之date(日期类型)