elasticsearch Elasticsearch中-1刷新间隔的确切含义是什么?,elasticsearch,elasticsearch" /> elasticsearch Elasticsearch中-1刷新间隔的确切含义是什么?,elasticsearch,elasticsearch" />

elasticsearch Elasticsearch中-1刷新间隔的确切含义是什么?

elasticsearch Elasticsearch中-1刷新间隔的确切含义是什么?,elasticsearch,elasticsearch,我读过很多关于Elasticsearch中索引刷新的文章。我理解大于0的不同间隔的含义,这是连续段之间经过的时间,使它们可用于搜索。但是,我不确定刷新间隔:-1的确切作用。据我所知,这是一种禁用自动索引刷新的方法,但不是完全禁用。Elasticsearch仍然会不时刷新片段,即使刷新间隔设置为-1。如果自动刷新被禁用,我想知道哪个机制控制这个刷新活动 很抱歉,我知道我没有太多的代码要发布,所以我会提供一些我所追求的背景知识。我的应用程序不需要近实时搜索;它只需要最终的一致性。然而,这种可能性应该

我读过很多关于Elasticsearch中索引刷新的文章。我理解大于0的不同间隔的含义,这是连续段之间经过的时间,使它们可用于搜索。但是,我不确定
刷新间隔:-1的确切作用。据我所知,这是一种禁用自动索引刷新的方法,但不是完全禁用。Elasticsearch仍然会不时刷新片段,即使
刷新间隔设置为-1。如果自动刷新被禁用,我想知道哪个机制控制这个刷新活动

很抱歉,我知道我没有太多的代码要发布,所以我会提供一些我所追求的背景知识。我的应用程序不需要近实时搜索;它只需要最终的一致性。然而,这种可能性应该是合理的,即在几秒钟到不到一分钟内,而不是半小时内。我想知道我是否可以让Elasticsearch决定什么时候最好方便地刷新,而不是定期刷新。原因是禁用自动刷新确实给我的应用程序带来了性能方面的一些好处,例如JVM堆大小的使用在垃圾收集间隔之间上升的幅度较小(参见下图)


默认情况下,index.refresh\u间隔设置为1s。实际上,在ES中,这是一种昂贵的操作,尤其是在索引时。您可以注意到,当您增加刷新间隔时

通过将index.refresh\u interval设置为-1,意味着您正在禁用它,并且在索引到ES时可以获得显著的收益。您只需要禁用刷新间隔(完成数据索引后再次启用)

索引后,您可以根据自己的要求设置适当的值,以确保一致性。 一篇有用的文章:-


希望有帮助

你的理解有点混乱。刷新索引和写入磁盘是两个不同的过程,不一定相关,因此即使
refresh\u interval
为-1,您对仍在写入的段的观察也是如此

对文档编制索引时,会将其添加到内存缓冲区并附加到translog文件中。当刷新发生时,缓冲区中的文档被写入一个新段,而不使用fsync,该段被打开以使搜索可见,缓冲区被清除。translog尚未清除,实际上没有任何内容保存到磁盘(因为没有
fsync

现在假设刷新没有发生:没有索引刷新,您无法搜索文档,这些段没有在缓存中创建


设置将指示何时进行刷新(写入磁盘)。默认情况下,当translog的大小达到512mb时,或30分钟后。这实际上是在磁盘上持久化数据,其他所有内容都在文件系统缓存中(如果节点死亡或机器重新启动,缓存将丢失,而translog是唯一的救星)。

我的问题是,即使禁用了它,这些段仍在Lucene级别下刷新。如果不是刷新间隔,哪个控制此刷新?@LimH。我想你正在寻找Lucene,这很有意义,特别是因为我只观察到当有很多索引时仍在编写的片段。
curl -XPUT "http://localhost:9200/$INDEX_NAME/_settings" -d '{ "index" : { "refresh_interval" : "-1"  }}'

#index data......

curl -XPUT "http://localhost:9200/$INDEX_NAME/_settings" -d '{ "index" : { "refresh_interval" : "1s"  }}'