当 Refresh Policy 为 none 时设置弹性搜索刷新间隔

分享于2022年07月17日 elasticsearch kotlin refresh spring-data-elasticsearch 问答
【问题标题】:当 Refresh Policy 为 none 时设置弹性搜索刷新间隔(Setting elastic search refresh interval when Refresh Policy is none)
【发布时间】:2022-01-15 16:23:13
【问题描述】:

当通过以相同速率索引 2000 个文档将刷新策略设置为无时,我将弹性搜索结果与 refresh_interval 1s 和 30s 进行比较。但它们的索引速度差别不大。

使用版本:

 
            org.springframework.data
            spring-data-elasticsearch
            4.2.0
 

配置:

        @Bean
        fun elasticsearchTemplate(): ElasticsearchOperations? {
            var restTemplate = ElasticsearchRestTemplate(client())
            restTemplate.refreshPolicy = RefreshPolicy.None
            return restTemplate
        }

以及文档和设置:

    @Document(indexName = "book")
    @Setting(refreshInterval = "1s")
    class Book(
    
            @Id
            var id: String? = null,
    
            @Field(type = FieldType.Keyword)
            var title: String,
    
            @Field(type = FieldType.Keyword)
            var author: String,
   
    
            @Field(type = FieldType.Date)
            var date: Date,
    
            )

我查看了 refresh 和 refresh_interval 的弹性搜索文档,但我想确保在将刷新策略设置为 None 的情况下,增加 refresh_interval 真的有帮助吗?

在使用弹性搜索的繁重索引场景中,是否会提高索引速度以增加索引的刷新间隔?


【解决方案1】:

这些是不同的东西。 refresh (aka refreshPolicy ) 让你告诉 ES 在索引后开始刷新并等待它完成 ( wait_for ) 或不等待 ( true ) 或者让集群完成它的工作 ( false , None ,默认)。

refresh_interval refresh 未启用时最有意义,它定义了集群如何“完成其工作”。刷新是相当繁重的操作,因此建议在索引时增加甚至禁用(设置为 -1 )。

如果您在更改 refresh_interval 时没有注意到性能改进,那么您可能没有在 ES 端最大化索引容量:批量大小调整、多个索引线程/机器等(请参阅 Tune for indexing speed