概述
2019独角兽企业重金招聘Python工程师标准>>>
事件的过程
所有操作都在
elasticsearch
插件head
里
1. 清空所有索引
这个删除操作和linux rm -rf /
一样简单
DELETE
*
就是酱紫,点击提交,就全部删除了。你可以刷新下页面,看看。
2. 导入数据
我们的数据是怎么到ES的
在项目里,我们查询ES数据时是通过spring data jpa
,但插入并不是,是一个定时任务拉取第三方平台,数据量比较大,集成了kafka
,再由logstash
发送到ES
。kafka
是直接发送的json格式的字符串,logstash
里配置了动态模板。可以说是跟默认的差不多。
问题出现了
可以说每个发送到ES里的对象(应该叫文档)都有非常多的字段,里面大部分都是不需要分词的,但动态模板不会判断,所以到ES里数据都被分词了!然后我们使用聚合查询部分代码是这样的:
TermsBuilder provinceTermsBuilder = AggregationBuilders.terms("provinceAgg").field("provinceCode.raw");
TermsBuilder cityTermsBuilder = AggregationBuilders.terms("cityAgg").field("cityCode.raw");
嗯,我们查不到任何数据。
看看.raw
,官方解释 大概总结下,就是同一个字段,多一个映射的方式。但这个映射我们没有设置过!我们没有provinceCode.raw
和cityCode.raw
字段,所以通过这两个字段来查询根本没有任何数据
这两个字段代表的省市的代码,例如31代表上海。这个是不需要分词的。
3. 研究索引
问题原因找到了。研究怎么去做这个映射,官方文档 看完,想起,外包交接时给过一个映射的json格式的文件,查看一下,应该就是这些字段的映射,但可能是版本或文档更新的问题,直接执行后,并未起作用,按照文档中官方文档做了下修改,OK 大概流程是
- 再次删除所有索引
- 新建索引并设置映射
在解决索引问题时,还出现了查询数据时找不到索引的问题。发现
spring data jpa
里配置的ES索引名和实际索引不同。Google一下,果然ES里还有别名这一个概念,引用官网的话:即使你认为现在的索引设计已经很完美了,在生产环境中,还是有可能需要做一些修改的。做好准备:在你的应用中使用别名而不是索引名。然后你就可以在任何时候重建索引。别名的开销很小,应该广泛使用
4. 还有初始值这样的操作!
依然没有数据!
在交接时加入了一个新功能,因此新加了一个字段。不过这个字段有默认值!所以查询这个字段时没有数据。
默认值设置:
METHOD: POST
URL: /{索引}/{字段}/_update_by_query
{"script":{"inline":"ctx._source.{字段}=0"}}
注意要用
post
方法,一不小心用了put
直接就是新建一个{字段}类型了。然后查询这个字段时又是各种问题。无奈删之!
总结
使用ES
开发,需要注意备份配置:
- 索引的映射
- 索引别名
调试开发时注意http方法。一不小心用了DELETE
那就是删除喽
原文首发于 风北的博客
转载于:https://my.oschina.net/northerSong/blog/1785525
最后
以上就是可爱毛巾为你收集整理的elasticsearch删除索引后再新建时踩的坑事件的过程总结的全部内容,希望文章能够帮你解决elasticsearch删除索引后再新建时踩的坑事件的过程总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复