Elasticsearch8mapping java和rest写法

0、前置条件

0.1、putMapping

因为传入的对象不是固定的,所以传入Map<String, Property>

//string 字段名
//property 字段类型
Map<String, Property> map=new HashMap<>(20);
        client.indices().putMapping(PutMappingRequest.of(mapping->mapping
        .properties(map)
        .index(myTableName)
        ));

在我们的项目中类型比较动态,所以维护了一个枚举,其他类型与ES类型的映射关系,如:

    Date(ColumnType.Date,
        Property.of(p->p.date(d->d))
        ) 

0.2、index

保存数据将处理好的数据转成json

Map<String, Object> data=...;
ObjectMapper objectMapper=new ObjectMapper();
String jsonStr=objectMapper.writeValueAsString(data);
IndexResponse index=
client.index(i->i
            .index(myTableName)
			.withJson(newStringReader(jsonStr))
                                    );

以Date类型举例,data中的key是字段名,value是处理后(格式化后)的时间。 下面示例中的data.put("field","")value均是处理后的数据

1、类型

1.1、Date 官网地址

putMapping

Java Client

默认
Property.of(p -> p.date(d -> d))

配置格式化类型,
如想了解在枚举中如何动态配置properties中的配置,请移步TODO

Property.of(p -> p.date(d -> d.format("yyyy-MM-dd HH:mm:ss.SSS||strict_date_optional_time||epoch_millis||yyyy-MM")

Rest Api

PUT /date_create_index/_mapping
{"properties":{"date_field":{"type":"date","format":"yyyy-MM-dd HH:mm:ss.SSS||strict_date_optional_time||epoch_millis||yyyy-MM"}}}

结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CGREofDr-1675666940049)(img.png)]

index

Java Client
data.put("date_field","格式化后的date[2022-06-29 11:13:48.606]")

Rest Api

POST /date_create_index/_doc
{"date_field":"2022-06-29 11:13:48.606"}

结果
在这里插入图片描述

1.2、point 官方文档

putMapping

Java Client
Property.of(p -> p.point(po -> po.ignoreZValue(false)))
如果为true(默认),将接受三个维度点(存储在源中),但只有纬度和经度值将被索引
如果为false,传入高度将报错Exception parsing coordinates: found Z value [123.0] but [ignore_z_value] parameter is [false]

Rest Api

PUT /point_create_index/_mapping
{"properties":{"point_field":{"type":"point","ignore_z_value":false}}}

结果
在这里插入图片描述

index

Java Client
data.put("point_field",[41.12, -71.34])

Rest Api

POST /point_create_index/_doc
{"point_field":[41.12,-71.34]}

结果
在这里插入图片描述

1.3、geo_point 官方文档

putMapping

Java Client
如果为true(默认),将接受三个维度点(存储在源中),但只有纬度和经度值将被索引
Property.of(p -> p.geoPoint(g -> g))

Rest Api

PUT /geo_point_create_index/_mapping
{"properties":{"geo_point_field":{"type":"geo_point"}}}

结果
在这里插入图片描述

index

Java Client
data.put("geo_point_field",[41.12,-71.34,8848.0])

Rest Api

POST /geo_point_create_index/_doc
{"geo_point_field":[41.12,-71.34,8848.0]}

结果
在这里插入图片描述

1.4、shape 官方文档

1.4.1、point

putMapping

Java Client
如果为true(默认),将接受三个维度点(存储在源中),但只有纬度和经度值将被索引
Property.of(p -> p.shape(g -> g.ignoreZValue(false).ignoreMalformed(true)))

Rest Api

PUT /shape_point_create_index/_mapping
{"properties":{"shape_point_field":{"type":"shape","ignore_malformed":true,"ignore_z_value":false}}}

结果
在这里插入图片描述

index

Java Client

Map<String,Object> map=new HashMap<>(2);
map.put("type","point");
map.put("coordinates",Arrays.asList(point.getLon(), point.getLat()));

Rest Api

POST /shape_point_create_index/_doc
{"shape_point_field":{"lon":41.12,"lat":-71.34}}  

结果
在这里插入图片描述

1.4.2、lineString

由两个或多个位置的数组定义的linestring。通过只指定两个点,linestring将表示一条直线。指定两个以上的点将创建任意路径。下面是一个LineString的示例在GeoJSON。

putMapping

Java Client
如果为true(默认),将接受三个维度点(存储在源中),但只有纬度和经度值将被索引
Property.of(p -> p.shape(g -> g.ignoreZValue(false).ignoreMalformed(true)))

Rest Api

PUT /shape_line_create_index/_mapping
{"properties":{"shape_line_field":{"type":"shape","ignore_malformed":true,"ignore_z_value":false}}}

结果
在这里插入图片描述

index

Java Client

         Map<String,Object> map=new HashMap<>(2);
         map.put("type","linestring");
         map.put("coordinates",Arrays.asList(start, end));

Rest Api

POST /shape_line_create_index/_doc
{"shape_line_field":[[41.12,-71.34],[51.12,-81.34]]}

结果
在这里插入图片描述

1.4.3、polygon

一个多边形是由一个点列表的列表定义的。每个(外部)列表的第一个和最后一个点必须是相同的(多边形必须是封闭的)。下面是一个GeoJSON多边形的例子。

putMapping

Java Client
如果为true(默认),将接受三个维度点(存储在源中),但只有纬度和经度值将被索引
Property.of(p -> p.shape(g -> g.ignoreZValue(false).ignoreMalformed(true)))

Rest Api

PUT /shape_polygon_create_index/_mapping
{"properties":{"shape_polygon_field":{"type":"shape","ignore_malformed":true,"ignore_z_value":false}}}

结果
在这里插入图片描述

index

Java Client

     Map<String,Object> map=new HashMap<>(2);
     map.put("type","polygon");
     map.put("coordinates",lists);//lists=[[11.12,-71.34],[21.12,-81.34],[31.12,-81.34]]
     data.put("shape_polygon_field",map)

Rest Api

POST /shape_polygon_create_index/_doc
{"shape_polygon_field":{
     "type":"polygon",
     "coordinates":[[11.12,-71.34],[21.12,-81.34],[31.12,-81.34]]
}}

结果
在这里插入图片描述

1.4.4、circle

一个多边形是由一个点列表的列表定义的。每个(外部)列表的第一个和最后一个点必须是相同的(多边形必须是封闭的)。下面是一个GeoJSON多边形的例子。

putMapping

Java Client
如果为true(默认),将接受三个维度点(存储在源中),但只有纬度和经度值将被索引
Property.of(p -> p.shape(g -> g.ignoreZValue(false).ignoreMalformed(true)))

Rest Api

PUT /shape_circle_create_index/_mapping
{"properties":{"shape_circle_field":{"type":"shape","ignore_malformed":true,"ignore_z_value":false}}}

结果
在这里插入图片描述

index

Java Client

     Map<String, Object> map = new HashMap<>(2);
     map.put("type", "circle");
     // 圆心坐标,格式: [经度, 纬度]
     map.put("coordinates", Arrays.asList(circle.getCenter().getLon(), circle.getCenter().getLat()));
     //圆的半径
     map.put("radius", circle.getRadius());
     data.put("shape_polygon_field",map)

Rest Api

POST /shape_circle_create_index/_doc
{"shape_circle_field":{
     "type":"circle",
     "coordinates":[31.12,-81.34],
     "radius":100.0}}

结果
在这里插入图片描述

1.4.5、envelope (矩形)

一个多边形是由一个点列表的列表定义的。每个(外部)列表的第一个和最后一个点必须是相同的(多边形必须是封闭的)。下面是一个GeoJSON多边形的例子。

putMapping

Java Client
如果为true(默认),将接受三个维度点(存储在源中),但只有纬度和经度值将被索引
Property.of(p -> p.shape(g -> g.ignoreZValue(false).ignoreMalformed(true)))

Rest Api

PUT /shape_rect_create_index/_mapping
{"properties":{"shape_rect_field":{"type":"shape","ignore_malformed":true,"ignore_z_value":false}}}

结果
在这里插入图片描述

index

Java Client

     Map<String, Object> map = new HashMap<>(2);
     map.put("type", "envelope");
     //矩形左上角坐标,矩形右下角坐标
     map.put("coordinates", Arrays.asList(leftTop, rightBottom));
     data.put("shape_polygon_field",map)

Rest Api

POST /shape_rect_create_index/_doc
{"shape_rect_field":{
     "type":"envelope",
     "coordinates":[[31.12,-81.34],[41.12,-71.34]]}}

结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值