1 地理坐标点数据类型
1.1 创建地理坐标点映射
PUT /lagou-company-locations
{
“mappings”:{
“properties”:{
“name”:{“type”:“text”},
“location”:{“type”:“geo_point”}
}
}
}
1.2 添加值(三种类型添加,字符串形式以半角逗号分割,如 “lat,lon”,对象形式显式命名为 lat 和 lon数组形式表示为 [lon,lat])
POST /lagou-company-locations/_doc
{
“name”:“百度”,
“location”:[73.983,40.719]
}
POST /lagou-company-locations/_doc
{
“name”:“腾讯”,
“location”:{
“lat”:40.722,
“lon”:73.989
}
}
POST /lagou-company-locations/_doc
{
“name”:“腾讯”,
“location”:“40.715,74.011”
}
1.3 四种地里坐标过滤器
geo_bounding_box: 找出落在指定矩形框中的点
geo_distance: 找出与指定位置在给定距离内的点
geo_distance_range:找出与指定点距离在给定最小距离和最大距离之间的点
geo_polygon: 找出落在多边形中的点。 这个过滤器使用代价很大 。当你觉得自己需要使用它
POST /lagou-company-locations/_search
{
“query”: {
“bool”: {
“must”: {“match_all”: {}},
“filter”: {
“geo_bounding_box”:{
“location”:{
“top_left”: {
“lat”: 40.73,
“lon”: 71.12
},
“bottom_right”: {
“lat” : 40.01,
“lon” : 74.0
}
}
}
}
}
}
}
GET /lagou-company-locations/_search
{
“query”: {
“bool”: {
“must”: {“match_all”: {}
},
"filter": {
"geo_distance":{
"distance": "400km",
"location":{
"lat": 40,
"lon": 70
}
}
}
}
}
}
2 动态映射
Elasticsearch在遇到文档中以前未遇到的字段,可以使用dynamic mapping(动态映射机制) 来确定字段的数据类型并自动把新的字段添加到类型映射。
Elastic的动态映射机制可以进行开关控制,通过设置mappings的dynamic属性,dynamic有如下设置项:
true:遇到陌生字段就执行dynamic mapping处理机制
false:遇到陌生字段就忽略
strict:遇到陌生字段就报错
PUT /usr
{
“mappings”:{
“dynamic”: “strict”,
“properties”:{
“name”: {“type”: “text”},
“address”: {“type”: “object”, “dynamic”: true}
}
}
}
POST /usr/_doc
{
“name”:“张三”,
“age”:25,//此处会报错
“address”:{ //此处会动态添加
“province”: “beijing”,
“city”: “beijing”
}
}
4 自定义动态映射
4.1 日期检测
4.1.1第一次添加文档,date被会当作日期格式
POST /lagou_persion/_doc
{
“date”:“2022-04-12”
}
再次添加的时候非日期格式会报错
POST /lagou_persion/_doc
{
“date”:“lagou”
}
4.1.2 可以设置映射关闭日期检查
PUT /lagou_persion
{
“mappings”: {
“date_detection”: false
}
}
4.1.3设置日期格式
PUT /lagou_persion
{
“mappings”: {
“dynamic_date_formats”: “MM/dd/yyyy”
}
}