企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
refresh操作执行的逻辑 默认情况下,es每隔一秒钟执行一次refresh,可以通过参数index.refresh_interval来修改这个刷新间隔,执行refresh操作具体做了哪些事情呢? 所有在内存缓冲区中的文档被写入到一个新的segment中,但是没有调用fsync,因此内存中的数据可能丢失 segment被打开使得里面的文档能够被搜索到 清空内存缓冲区 批量操作优化步骤 1、关闭refresh 2、关闭副本 3、批量上传数据 4、恢复refresh 5、强制refresh 关闭refresh refresh的操作涉及到数据转移,开销比较大。因此在批量构建索引时可以把refresh间隔设置成-1来临时关闭refresh,等到索引都提交完成之后再打开refresh,可以通过如下接口修改这个参数: ``` curl -XPUT 'localhost:9200/test/_settings' -d '{ "index" : { "refresh_interval" : "-1" } }' ``` 关闭副本 另外当在做批量索引时,可以考虑把副本数设置成0,因为document从主分片(primary shard)复制到从分片(replica shard)时,从分片也要执行相同的分析、索引和合并过程,这样的开销比较大,你可以在构建索引之后再开启副本,这样只需要把数据从主分片拷贝到从分片: ``` curl -XPUT 'localhost:9200/my_index/_settings' -d ' { "index" : { "number_of_replicas" : 0 } }' ``` 批量上传数据   上传自己的数据即可 恢复refresh 执行完批量索引之后,把刷新间隔改回来: ``` curl -XPUT 'localhost:9200/my_index/_settings' -d '{ "index" : { "refresh_interval" : "1s" } }' ``` 强制refresh 你还可以强制执行一次refresh以及索引分段的合并: ``` curl -XPOST 'localhost:9200/my_index/_refresh' curl -XPOST 'localhost:9200/my_index/_forcemerge?max_num_segments=5' ```