spring-data使用elasticsearch的那些坑

  • Post author:
  • Post category:其他


【背景】

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

虽然这个查询过程写的不是很完整,但是它介绍了那几种查询的区别,值得看一看

看后续会不会再总结点了



版权声明:本文为u012536120原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。