Elasticsearch 近实时

简介: 【11月更文挑战第1天】

Elasticsearch (ES) 是一个高度可扩展的开源全文搜索引擎,它能够提供近实时 (Near Real-Time, NRT) 的搜索能力。这意味着,当你向 ES 中写入数据后,这些数据会在极短的时间内(通常是毫秒到秒级别)变得可搜索,但不是绝对意义上的实时。

近实时搜索的工作原理

  1. 数据写入与刷新 (Refresh)

    • 当数据被写入 ES 时,它首先被存储在一个内存缓冲区 (In-Memory Buffer) 中。
    • 定期(默认每秒一次),或者当缓冲区达到一定大小时,内存中的数据会被刷新 (Refresh) 到一个新的索引段 (Index Segment) 并打开供搜索使用。
    • 用户也可以通过 API 手动触发刷新操作,以立即使新数据可搜索。
  2. 索引段 (Segment) 与倒排索引

    • ES 基于 Apache Lucene 构建,Lucene 使用分段 (Segment) 存储数据。每个索引段都是一个独立的、已优化的倒排索引。
    • 新数据先被加入内存中的索引段,刷新时,这个内存中的索引段被写入磁盘并加入到搜索范围中。
  3. 事务日志 (Translog) 与可靠性

    • 为了确保数据的可靠性,ES 在数据写入内存缓冲区后,还会将其写入事务日志 (Transaction Log, Translog)。
    • 如果系统崩溃或电源故障,重启后可以通过重放 Translog 中的操作恢复未刷新到磁盘的数据。
  4. 提交点 (Commit Point) 与数据可见性

    • Lucene 使用提交点 (Commit Point) 跟踪哪些索引段是可以用于搜索的。当有新的索引段被刷新并认为安全时,就会创建一个新的提交点。
    • 搜索请求总是参考最新的提交点,确保只访问已提交的、稳定的索引段。
  5. Flush 与数据持久化

    • 除了刷新操作,ES 还有一个 Flush 过程,它会将内存中的所有未刷写到磁盘的索引段强制写入磁盘,并清空 Translog。
    • Flush 主要是为了解决 Translog 过大导致恢复时间过长的问题,以及确保数据在节点故障时不会丢失。

近实时搜索的权衡

  • 延迟与资源消耗:更频繁的刷新可以减少数据变为可搜索的延迟,但会增加 CPU 和 I/O 资源的消耗。
  • 数据一致性:在刷新间隔内,新写入的数据可能还未对搜索可见,这取决于刷新策略。
  • 段数量控制:频繁的刷新会导致索引段数量增多,影响搜索性能。ES 通过段合并 (Merge) 机制来解决这个问题。

结论

Elasticsearch 的近实时搜索能力是通过一系列精心设计的数据处理流程实现的,它在保证高性能的同时,还能够提供几乎实时的数据更新可见性,这对于大多数应用程序来说已经足够满足需求。然而,对于需要绝对实时性的场景,可能需要进一步调整 ES 的配置或采取其他措施。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
存储 JSON Ubuntu
Elasticsearch:理解 Percolator 数据类型及 Percolate 查询
Elasticsearch 是一款功能强大且功能丰富的搜索工具。本文将介绍一种小众的数据类型 Percolator ,同时介绍Percolate query的使用。 您需要基本了解 Elasticsearch,尤其是mapping和search。
7547 0
Elasticsearch:理解 Percolator 数据类型及 Percolate 查询
|
7月前
|
人工智能 数据挖掘 Linux
一个人就是一支队伍:阿里云/本地部署OpenClaw多Agent协作实战、配置免费大模型API及避坑指南
在AI工具普及的今天,仅靠单个Agent处理所有任务,会面临上下文混乱、专业度不足、重复解释背景等问题。OpenClaw提供了一套完整的多Agent协作架构,让你可以**一人管理一支AI团队**:研究、写作、设计、开发、运营、数据分析等角色各司其职、独立记忆、互不干扰,实现零沟通成本、高效率并行执行。从“自己动手”升级为“管理AI团队”,是新一代AI使用者的核心能力。
930 1
|
3月前
|
JSON 人工智能 数据可视化
Claude Code 四大定制机制完全指南:CLAUDE.md、Hooks、Skills、Subagents 怎么选怎么用
本文详解Claude Code四大定制机制:CLAUDE.md(持久记忆)、Hooks(硬约束执行)、Skills(按需流程)、Subagents(隔离分工),涵盖配置模板、选型决策表及团队工程化分层实践,全部基于2026年7月2日官方文档。
1360 1
|
6月前
|
数据采集 人工智能 安全
OpenClaw 中文版 Windows 安装教程(包含新安装包)|全自动安装,免命令免代码免折腾
拒绝复杂教程,OpenClaw 汉化一键安装包,自动部署、自动汉化、自动配置,全程无需输入命令,也不用懂编程,安装完成直接使用。
OpenClaw 中文版 Windows 安装教程(包含新安装包)|全自动安装,免命令免代码免折腾
|
人工智能 监控 数据库
语义搜索三步过程揭秘:微调如何优化检索效率​
本文探讨了如何通过微调文本嵌入模型提升特定领域任务的检索效果,重点介绍对比学习原理及五步实践流程,适用于AI招聘等场景,助力精准匹配用户查询与内容。
503 2
|
机器学习/深度学习 自然语言处理 JavaScript
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
在信息论、机器学习和统计学领域中,KL散度(Kullback-Leibler散度)是量化概率分布差异的关键概念。本文深入探讨了KL散度及其相关概念,包括Jensen-Shannon散度和Renyi散度。KL散度用于衡量两个概率分布之间的差异,而Jensen-Shannon散度则提供了一种对称的度量方式。Renyi散度通过可调参数α,提供了更灵活的散度度量。这些概念不仅在理论研究中至关重要,在实际应用中也广泛用于数据压缩、变分自编码器、强化学习等领域。通过分析电子商务中的数据漂移实例,展示了这些散度指标在捕捉数据分布变化方面的独特优势,为企业提供了数据驱动的决策支持。
2717 2
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
|
Java Apache 网络架构
【小家Spring】Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method ‘POST‘ not supported (附带其余好几个坑)(上)
【小家Spring】Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method ‘POST‘ not supported (附带其余好几个坑)
|
存储 安全 文件存储
网盘 vs NAS:选择合适的数据存储方式
随着科技的不断进步,科技的快速发展为我们提供了多种便捷的存储解决方案,我们有着多种便捷的数据存储解决方案可供选择,而且市面上也有很多相关的成熟的存储产品。在这些方案中,网盘和NAS(网络附属存储)是两种广泛应用且各具优势的存储方式,其中网盘提供即开即用、云端存储和多设备同步等特性,NAS则提供本地私有化存储、高效数据传输和高度可定制化等优点,二者可谓是“难分伯仲”。在实际应用中,你更倾向于使用哪种存储方式呢?那么本文就来网盘和NAS的优劣势,帮助有需要的人选择适合自己的数据存储解决方案。
1920 4
网盘 vs NAS:选择合适的数据存储方式
|
人工智能 数据可视化 物联网
10分钟微调专属于自己的大模型
本文主要介绍使用魔搭社区轻量级训练推理工具SWIFT,进行大模型自我认知微调,帮助初阶炼丹师快速微调出专属于自己的大模型。
|
SQL 负载均衡 算法
使用ShardingJDBC实现分库分表
使用ShardingJDBC实现分库分表