elasticsearch 是否可以在没有刷新间隔的情况下运行ES索引?

hof1towb  于 2023-08-03  发布在  ElasticSearch
关注(0)|答案(2)|浏览(89)

我在docker容器上本地运行ElasticSearch应用程序,每天索引1000万个文档(一个索引)。让我们假设我发送的数据在最佳批量请求,据我所知,我们有2个过程,其中涉及到索引(刷新-这使得数据可用NRR,和同步刷新日志到磁盘),感觉操作做同样的事情,因为我一天只有1个激进的操作,问题是我是否可以在没有刷新的情况下工作,以及有什么不好的方面(在我的情况下和在具有类似任务的分布式情况下-每天1次大规模索引操作)。

5cnsuln7

5cnsuln71#

是的,你可以通过设置不带刷新间隔运行elasticsearch

"index" : {
    "refresh_interval" : -1
}

字符串
然后根据您的请求使用refresh查询参数手动运行新文档的索引。
我很肯定,如果你有1积极的索引操作,每天-这可能会工作。特别是在索引数据时没有人搜索数据时。因为它肯定会消耗大量的RAM,同时操作10 M的文档。这基本上意味着搜索速度将大大降低。

ego6inou

ego6inou2#

刷新和同步刷新是两个不同的,但互补的操作,齐头并进。
刷新所做的是更新内存中索引,以确保您刚刚索引的数据现在可以搜索。
所有的索引操作也会写入事务日志,但不会在每个单独的更改时提交给Lucene,因为Lucene提交的执行成本太高。
同步刷新所做的是将事务日志的内容提交给Lucene,并开始生成新的事务日志。
因此,总结一下,您需要刷新和刷新,以便您的数据可以搜索并安全地提交到Lucene。
Refresh是一个非常轻量级的操作,每秒运行一次(默认)。
Flush是一个更昂贵的操作,每5秒运行一次,以确保事务日志不会变得太大。
如果你每天只加载一批数据,你可以立即调用Refresh API和Flush API,以确保所有数据都是可搜索的和安全的。你可以在索引你每天的数据后运行它。

相关问题