SpringBoot项目整合ES坑
一、 整合坑
在SpringBoot集成ES的时候如果需要使用到ElasticsearchRepository
,当ElasticsearchRepository
在启动类目录下如图所示,即在open目录下时会自动扫描到,无需额外操作。若目录更改放在另一个模块下则需要配置@EnableElasticsearchRepositories
路径为ElasticsearchRepository
所在目录。
就是这个坑!坑了小编几个小时 每次都被扫描成为Mybatis文件
二、 数据映射坑
怀着满心欢喜解决了扫描的问题,没想到又踩入一个大坑 当时心情是这样
在mysql 数据同步到ES的时候因为Date 时间类型不匹配又报错
直接上改正的代码
直接自定义时间格式! ES定义的都是啥玩意 救命!
@Field(type = FieldType.Date, format = DateFormat.custom,name = "insert_time",
pattern = "yyyy-MM-dd HH:mm:ss||date_time_no_millis||strict_date_optional_time||epoch_millis")
private LocalDateTime insertTime;
接上错误代码
@Field(type = FieldType.Date, format = DateFormat.date_hour_minute_second,name = "insert_time")
private LocalDateTime insertTime;
三、 Logstash数据同步mysql-ES坑
好不容易数据同步完,开始了自己心心念念的查询,没想到。。
还是自己太年轻的
诶 一查null
一顿操作猛如虎 马上定位问题
如图所示,在实体类与ES索引映射的时候字段名字和数据库查询出来的名字不相同那么,Logstash会自动帮你新建一个字段名称,如果你在@Field
不加name
属性那么ES出映射出来的索引就是你实体类定义的属性名字。当你用ElasticsearchRepository
中findByUserId
或者诸如此类多的单词的字段就会发现 诶 null就是查不到!!!
四、分页坑
要是你发现诶上述准备都做完了你就可以查到数据了么
不不不 你还是太年轻了 当你从List
转换成使用Pageable
准备分页的时候嘿嘿
null!!! 真不错
这个时候直接如图
他默认是从0开始 但是我们习惯是从1开始所以 又null了
最后终于查到了我朝思暮想的数据