1. 为什么是近实时?
在elasticsearch里面,这个轻量级的写入和打开一个cache中的segment的操作叫做refresh,默认情况下,es集群中的每个shard会每隔1秒自动refresh一次,这就是我们为什么说es是近实时的搜索引擎而不是实时的,也就是说给索引插入一条数据后,我们需要等待1秒才能被搜到这条数据,这是es对写入和查询一个平衡的设置方式,这样设置既提升了es的索引写入效率同时也使得es能够近实时检索数据。
2. refresh
POST /_refresh //刷新所有的索引
POST /blogs/_refresh //刷新指定的索引
- 不建议在每插入一条数据后就执行一次refresh命令,es默认的1秒的延迟对于大多数场景基本都可以接受;
- 不是所有的业务场景都需要每秒都refresh一次,如果短时间内要索引大量的数据,为了优化索引的写入速度,我们可以设置更大的refresh间隔,从而提升写入性能。
PUT /my_logs
{
"settings": {
"refresh_interval": "30s"
}
}
- 上面的参数是可以随时动态的设置到一个存在的索引里面,如果我们正在插入超大索引时,我们完全可以先关闭掉这个refresh机制,等写入完毕之后再重新打开,这样以来就能大大提升写入速度。
PUT /my_logs/_settings
{ "refresh_interval": -1 } //禁用刷新机制
PUT /my_logs/_settings
{ "refresh_interval": "1s" } //设置每秒刷新一次
- 注意refresh_interval的参数是可以带时间周期的,如果你只写了个1,那就代表每隔1毫秒刷新一次索引,所以设置这个参数时务必要谨慎。
原文链接:https://blog.csdn.net/u010454030/article/details/79586072