Elasticsearch解决不能修改索引、字段问题解决方案

问题1:

由于es索引不能删除,不能修改,在不影响原数据的情况下,并且生产服务不停机的情况下,怎么修改索引,并保留原索引内的数据?
基于kibanna的dev Tools执行参数,淘汰postman,kibanna会有提示
1、原来索引起别名job
2、重建索引,数据迁移,默认是同步执行大数据量太慢,可以设置为异步执行(url新增参数 wait_for_completion = false),[reindex方法 source来源index1 -> dest目标index2,这块不是别名,是索引名]
3、删除原来索引别名为job,重建新索引命名为job

特注:

es在项目中正常是先存入mysql中备份,然后再写入到es中,然后再前端查询es,保证高可用,数据的不丢失,refresh对于热点数据可以设置刷新时间,如果刷新的过于频繁会影响IO性能,对于非热点数据都是几分钟或者几个小时刷新一次(多线程的情况下,a线程写入数据进入es,b线程没查到,是因为a线程还没有刷新到内存中,对于热点数据可以使用refresh即时的刷新到内存中,b线程就可以查到a线程写入的数据)

refresh解决索引的一致性!

问题2:

es集群分片原理

https://www.freesion.com/article/3467651389/

分片关键字的理解:

分片是在es7.0版本后,索引创建时,es模板一个索引创建一个主分片和一个副本分片,

分片创建成功后就不能被修改,除非reindex重新创建索引,指定想要设置的主分片数和副本分片数,如果索引template_index设置3个主分片(a,b,c),分别在3个不同的节点上,a + b + c数据整合起来才是一个完整的数据,主分片是除法操作,副本分片是乘法操作,并且主分片和副本分片一定不能在同一个节点服务器上,保证高可用,某个节点挂掉,不影响副本分片数据的返回。并且es访问主分片和副本分片是随机访问的,最少一个节点有一套完整的分片数据。节点配置可以在es.yml文件里配置,通过docker命令的方式重启生效。

问题3:

es里刚存入的数据能不能被实时查询到?

不能被实时查到,必须经过index buffer缓冲区,缓存到filesystem cache文件系统缓存区后,才能被查到。

你可能感兴趣的:(elasticsearch)