Elasticsearch填坑

果然上篇博客说的不熟悉Elasticsearch最终害了我。。今天重新运行我的博客项目,发现我昨天写的博文还在,并且我没法写blog了出现如下报错:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: Expected 1 but found 7 results] with root cause

网上找不到解决方案,但我根据我对这个报错的理解,加上昨天写的博文还在。综合分析了一下,觉得可能是IDEA缓存的原因(其实这里想偏了跟IDEA毛关系没有,IDEA缓存也不会缓存数据库相关的东西啊)于是清空IDEA缓存。。没有任何效果。。

又想了想可能是mysql的表没有删干净。但由于我要对项目各个功能进行测试,我在applications.properties文件中配置的是:

spring.jpa.hibernate.ddl-auto=create-drop

也就是说每次运行项目都会把之前的数据给清空掉然后重新建表,也就说理论上不应该。但是试试吧死马当活马医。重复删表建表几次之后,不出意料,仍然没有半点解决掉的迹象。。。

。。逐渐抓狂,然后仔细阅读报错日志,发现是elasticsearch的问题。于是想了想可能是elasticsearch缓存的问题吧,于是网上找解决方案清空缓存,仍然失效。最后发现,是由于虽然表删了,但是elasticsearch的索引数据并没有删,然后导致两者对应不上,也就说说elasticsearch中的主键对应了多条数据从而产生了那样的结果:

Expected 1 but found 7 results。那么问题就很好解决了。删掉索引就好,然后把

spring.jpa.hibernate.ddl-auto=create-drop

改成

spring.jpa.hibernate.ddl-auto=update

即可,这样数据库每次就不会删表,就可以和elasticsearch对上了。

那么如何删除索引呢?我的做法是投机取巧选择下个elasticsearch可视化工具然后去删除hhh最简单的做法

(纯属自己琢磨,如有问题欢迎大佬指出)

使用中文分词器 IK Analysis时的错误

failed to load elasticsearch nodes : org.elasticsearch.index.mapper.MapperParsingException: Mapping definition for [tags] has unsupported parameters:  [fielddata : true] [search_analyzer : ik_smart] [analyzer : ik_smart]

这个报错原因似乎时没有识别到IK Analysis。看网上解决方案把tags对应的type改为keyword并不生效,并且keyword会和已存在的type为keyword的数据项冲突。

后来发现问题在于安装完分词器后要重启elasticsearch

重启过程中遇到报错:

StartupException: org.elasticsearch.bootstrap.BootstrapException: java.nio.file.NoSuchFileException: D:\elasticsearch-5.5.0\plugins\commons-codec-1.9.jar\plugin-descriptor.properties

解决方法:不要把分词器内的jar包直接解压到plugins文件夹下,在它下面再建一个文件夹命名为IK Analysis即可,把相应的东西放在它里面就行

我简直是把能踩的坑踩了个遍。。。。

这次更坚定了我要补elasticsearch的决心。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值