【背景】
springboot2,里面已经有JPA的DAO层了,现在又想加个ES,好实现分词检索和相关性推荐
【坑】
1,之前想写2个DAO,一个ESDAO,一个普通DAO,然后公用一个pojo,不行,老是冲突。所以我写了2个pojo。
解决:esrepository写法跟jparepository一毛一样。然后dao层放一个xxDAO,一个xxESDAO,pojo层放一个xx,一个xxES。
2,在调试过程中,我的pojo经常会改(xxES),所以es会报类型匹配错误。原因是你之前已经有那个indexname了,后来改了(增加了属性,或者减少),跟之前的就匹配不上了。
解决:你可以换个indexname(pojo里面换),也可以在kibnan里面把那个indexname delete,再重启项目(重启项目的时候,spring会连接到ES,生成index)
删除index可以看这个:
https://www.lagou.com/lgeduarticle/8326.html
3,ES的时间类型,真的是梦魇。跟我之前DAO里面的时间( yyyy-MM-dd HH:mm:ss )一直匹配不上。后来终于找到一个能用的。
解决:pojo里的时间,注解成这种:
@Field(type=FieldType.Date)
@JsonFormat (shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd'T'HH:mm:ssZ",timezone = "GMT+8")
然后时间转换就不用管了,它会把(各种pattern下的)Date类型自动转换为这种pattern,后面那个GMT+8,会在时间上加8小时,去掉看看你就知道为什么要加了。
至于时间的显示,我是用JS显示成——yyyy-MM-dd HH:mm:ss,这种方式虽然不太科学。但感觉最好。
4,ES部署到服务器后,的控制
(1)ES是java程序,linux上用JPS可查id号进行删除
(2)用top可以看ES的内存使用情况,不过好像是固定内存?
(3)数据不一致可以删除:
POST /indexname/type/_delete_by_query?pretty
{
"query": {
"match_all": {
}
}
}
自己改下indexname,type。可以删掉type里的数据,但保留type的结构。(如果数据库数据和ES不统一,可以删掉ES再重新获取)
用curl命令可以直接在linux的端里执行
【后续】
现在ES的增删改查搞定了,查询其实也有点坑的,方法很多,让人眼花缭乱。
查询可以看这个:
https://www.cnblogs.com/wenbronk/p/6432990.html
虽然这个查询过程写的不是很完整,但是它介绍了那几种查询的区别,值得看一看
看后续会不会再总结点了