目录
1.ElasticSearch为什么是近实时搜索的?
2.ElasticSearch写数据的流程是什么样子的?
3.什么时候情况下写入的数据才可以查询到?
4.如何才能保证Es中的数据实时查询?
5.ElasticSearch读数据是流程是什么样子的?
6.参考
1.ElasticSearch为什么是近实时搜索的?
Elasticsearch检索不是实时的,是因为 插入不是实时的,数据不会实时写入磁盘。memory buffer 写入file system cache有1s是延迟.所以不是实时的,具体看问题2写数据的流程
2.ElasticSearch写数据的流程是什么样子的?
写数据的过程,数据----->memory buffer -->file system cache--->disk
第一个阶段 memory buffer -->file system cache 默认是每1s做一次refresh,只有refresh才能查询到。
第二个阶段 file system cache--->disk 默认是每30m做一次flush.
所以默认写数据到可以查询到有1s的延迟。
为了防止数据断电丢失数据,使用同步写数据到translog,默认每一个index,delete,update或者bulk请求提交一次。
3.什么时候情况下写入的数据才可以查询到?
只有做了refresh以后,写入的数据才可以查询到。
4.如何才能保证Es中的数据实时查询?
1.强制执行refresh,可能对ES的性能产生影响。
2.如果是做批量索引构建,可以先让refresh临时关闭,副本数设置为0,等到索引都提交完后才能之后,再打开refresh.
5.ElasticSearch读数据是流程是什么样子的?
elasticsearch的查询分为两个阶段,一个是query阶段,一个是fetch阶段
query阶段是从所有的shard上读取相关的documentId和排序字段值,在coordinating node(协调节点上)进行汇总,对所有的结果进行排序,然后指定分页的数据。
fetch阶段是根据documentId然后构建一个mulit-get请求,发送到响应的shard上从_source上获取需要加载的数据,最终返回给客户端。
6.参考
1.https://blog.csdn.net/u010454030/article/details/79794788----elasticsearch的查询
2.https://segmentfault.com/a/1190000037450984-----作者写的很好,多读几遍
3.https://segmentfault.com/a/1190000040019662



