ElasticSearch优化指南

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: ElasticSearch优化指南

刷新写入磁盘时间间隔 refresh_interval

调优建议:

根据业务需求,如果对实时性要求不高(可以接受数据查询延迟时间的),可以将该值设置大一些,如30s,默认为1s;

-1 为不刷新,如果设置-1 ,也并非一直不会写入到磁盘,index_buffer也就是内存缓存默认是堆的10% 满了也会刷到segment

数据索引底层原理

这里先介绍一下数据索引底层原理

  1. 先写入buffer,在buffer里的时候数据是搜索不到的;同时将数据写入translog日志文件。
  2. 如果buffer到达阈值,或者到一定时间(即:refresh_interval),ES会将buffer中的数据refresh到一个新的segment file中,但是此时数据不是直接进入segment file的磁盘文件的,而是先进入os cache的。这个过程就是refresh。
  3. 每隔1秒钟,es就会将buffer中的数据写入到一个新的segment file,因此每秒钟产生一个新的磁盘文件(segment file),这个segment file中就存储最近1秒内buffer中写入的数据。如果buffer里面此时没有数据,就不会执行refresh操作;如果buffer里面有数据,默认1秒钟执行一次refresh操作,刷入一个新的segment file中。
  4. 操作系统里面存在操作系统缓存(os cache),数据写入磁盘文件之前会先进入os cache,先进入操作系统级别的一个内存缓存中。只要buffer中的数据被refresh到os cache中,数据就可以被检索到了。
  5. 可以通过es的restful api或者java api,手动执行一次refresh操作,就是手动将buffer中的数据刷入os cache中,让数据立马就可以被搜索到。只要数据被输入os cache中,buffer就会被清空了,因为不需要保留buffer了,数据在translog里面已经持久化到磁盘去一份了。

指定索引设置刷新时间

动态设置

PUT /{
   index}/_settings
{
    
  "refresh_interval": "2s" 
}

强制刷新

如果要针对某次添加数据或数据变更进行强行刷新操作时,可以通过下列方式:

POST {index}/_doc?refresh
{
  "title" : "深入理解 elasticsearch"
}

如上操作可以使数据马上写入,即可立即搜索可见。

重置 refresh_interval

重置为默认的refresh_interval 值 1s

PUT {
   index}/_settings
{
   
  "index" : {
   
    "refresh_interval" : null
  }
}

当我们大批量的往Elasticsearch索引录入数据时,通常会把refresh_interval 设置为 -1,这样会加快数据导入的速度,在数据导入完成后,再将该参数设置为正数。比如:1s。

当 refresh_interval 为 -1 时,意味着不刷新索引。

refresh_interval 的默认值是 1s。

数据初始索引时禁用刷新和副本机制若有一大批数据需要索引的时候(前提条件),由于刷新和副本机制对数据索引性能影响较大,可以将index.refresh_interval设置为-1,将index.number_of_replicas设置为0以禁用该两机制。直到本次数据全部索引完成后再将这两个参数调整至合理的值,然而应该明白性能与数据安全总是不能同时得到满足,完全看业务数据的重要性。

TODO Translog : 预写日志

https://blog.csdn.net/qq_21383435/article/details/109212665

TODO Merge :

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
算法 索引
阿里云 Elasticsearch 使用 RRF 混排优化语义查询结果对比
Elasticsearch 从8.8版本开始,新增 RRF,支持对多种不同方式召回的多个结果集进行综合再排序,返回最终的排序结果。之前 Elasticsearch 已经分别支持基于 BM25 的相关性排序和向量相似度的召回排序,通过 RRF 可以对这两者的结果进行综合排序,可以提升排序的准确性。
2228 0
|
6天前
|
缓存 监控 安全
Elasticsearch扩展和优化
【11月更文挑战第4天】
22 6
|
1月前
|
存储 自然语言处理 Java
Elasticsearch写入优化
【10月更文挑战第3天】Elasticsearch:从写入原理谈写入优化
75 2
|
5月前
|
数据库 索引
Elasticsearch索引别名:管理与优化数据访问
Elasticsearch索引别名:管理与优化数据访问
|
6月前
|
运维 索引
Elasticsearch 写入优化探索:是什么影响了refresh 耗时?
Elasticsearch 写入优化探索:是什么影响了refresh 耗时?
70 7
|
6月前
|
存储 数据处理 索引
Elasticsearch 8.X 小技巧:使用存储脚本优化数据索引与转换过程
Elasticsearch 8.X 小技巧:使用存储脚本优化数据索引与转换过程
105 6
|
6月前
|
存储 缓存 搜索推荐
深入理解Elasticsearch倒排索引原理与优化策略
总之,Elasticsearch的倒排索引是其高效全文搜索的核心。为了提高性能和可伸缩性,Elasticsearch采用了多种优化策略,包括压缩、分片、合并、位集合和近实时搜索等。这些策略使Elasticsearch成为处理大规模文本数据的强大工具。
610 0
|
6月前
|
运维 测试技术 数据处理
Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!
Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!
68 0
|
6月前
|
监控 固态存储 安全
源码剖析:Elasticsearch 段合并调度及优化手段
源码剖析:Elasticsearch 段合并调度及优化手段
70 0
|
6月前
|
算法 搜索推荐 关系型数据库
Elasticsearch算分优化方案之rescore_query
Elasticsearch算分优化方案之rescore_query
135 0

相关产品

  • 检索分析服务 Elasticsearch版