[Elasticsearch]ES近似实时搜索的原因|ES非实时搜索的原因|ES Near real-time search

Elasticsearch-专栏👈️

往期回顾:

ES单一查询定义👈️

ES深分页问题👈️

ES商城搜索实战👈️

ES环境搭建:单节点模式/集群模式👈️

ES开启认证👈️

近似实时搜索(Near real-time search)是指文档存储在Elasticsearch,它会在 1 秒内近乎实时地建立索引并完全可搜索。

究其原因,是在于ES的索引存储机制。

当索引一个文档(即在ES中插入一个文档,后面都使用术语:索引文档),会首先写入到内存缓冲区(In-memory buffer)中,此时的文档是不能被检索到的,即不可查,读取不到的;

当内存缓冲区满或者ES每秒定期刷新(refresh)索引(仅限于过去30s内收到一个或者多个搜索请求的索引),ES会将内存缓冲区In-memory buffer)中的数据在到文件系统缓存(filesystem cache)写入一个新的segement,然后清空内存缓冲区(In-memory buffer),此时的文档是可读的,可以被检索到的;这个操作比完全提交到磁盘要轻量许多,文件系统缓存的目的就是减少磁盘I/O操作的次数,经常执行不会降低ES性能。

也就是说,近似实时查询的原因是有一个等待写入到一个segement的时间间隔。

文件系统缓存被操作系统自动管理,异步的(fsync)将这个segement刷入(flush)到磁盘,同时标记这个segement已经被提交。

到这里,可能会疑惑segement是个什么东西?接下来一起看下ES索引结构。并将以图示形象的表示segment产生即落盘的过程。

Elasticsearch是基于的Java库Lucene开发的,Lucene引入了按段搜索(per-segement search)的概念。在Lucene 中索引一词的意思是“段的集合(a collection of segments )加上一个提交点(a commit point)”。它是可以检索的。

在这里插入图片描述

索引文档,首先写入内存缓冲区,此时并未写入到segement,不可读。

在这里插入图片描述

发生refresh(ES每秒refresh一次索引),生成新的segement添加到提交点(Commit point)写入到文件系统缓存,并清除内存缓冲区(In-memory)。注意此时还未被提交到磁盘(等待操作系统刷盘落盘),因此下图中以灰色表示,但是从此刻开始都是可检索的

在这里插入图片描述

写入文件系统缓存的segement已经被操作系统管理,等待操作系统写入磁盘。当操作系统将其写入(fsync)磁盘,就完成了提交。此时被标记为已提交,清空文件系统缓存。

在这里插入图片描述

Elasticsearch-专栏👈️

往期回顾:

ES单一查询定义👈️

ES深分页问题👈️

ES商城搜索实战👈️

ES环境搭建:单节点模式/集群模式👈️

ES开启认证👈️

相关推荐

  1. Elasticsearch ES实现GEO位置搜索

    2024-07-13 06:08:02       52 阅读
  2. 实现基于Elasticsearch搜索服务

    2024-07-13 06:08:02       27 阅读
  3. Elasticsearch中-SpaceJam一个全文搜索实例

    2024-07-13 06:08:02       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 06:08:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 06:08:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 06:08:02       58 阅读
  4. Python语言-面向对象

    2024-07-13 06:08:02       69 阅读

热门阅读

  1. C语言排序之快速排序

    2024-07-13 06:08:02       27 阅读
  2. 基于Go1.19的站点模板爬虫详细介绍

    2024-07-13 06:08:02       24 阅读
  3. c++_文件解析_读取_每行用字符分割_去除两头空格

    2024-07-13 06:08:02       21 阅读
  4. 使用 OpenCV 的 inRange 函数进行颜色分割

    2024-07-13 06:08:02       22 阅读
  5. Web控件进阶交互

    2024-07-13 06:08:02       29 阅读
  6. iOS开发-Xcode

    2024-07-13 06:08:02       21 阅读
  7. Xcode依赖管理大师:精通项目依赖的艺术与实践

    2024-07-13 06:08:02       22 阅读
  8. 数据结构笔记之特殊矩阵压缩

    2024-07-13 06:08:02       26 阅读
  9. 交换机的二三层原理

    2024-07-13 06:08:02       25 阅读
  10. pdf工具

    pdf工具

    2024-07-13 06:08:02      24 阅读
  11. Xcode项目文件与资源管理:精通技巧与实践指南

    2024-07-13 06:08:02       26 阅读