当前位置: 首页 > news >正文

近实时”(NRT)搜索、倒排索引

近实时(Near Real-Time, NRT)搜索

近实时(NRT)搜索是 Elasticsearch 的核心特性之一,指的是数据在被写入到系统后,可以几乎立即被搜索和查询到。虽然它不像传统数据库那样完全实时,但它的延迟通常只在几百毫秒到一秒之间。

工作原理:
  1. 写入数据:
    • 文档写入时被存储在内存缓冲区(translog)。
  2. 刷新(Refresh):
    • Elasticsearch 定期将内存中的数据刷新(默认每秒一次),将新数据写入一个称为“段”(segment)的文件中。
    • 刷新后,新数据对搜索可见。
  3. 延迟原因:
    • 数据写入并非直接可搜索,而是需要等刷新完成,这导致搜索是“近实时”。

在这里插入图片描述

适用场景:
  • 日志搜索: 需要快速查询最新日志数据。
  • 实时分析: 对流式数据进行快速分析,例如异常检测。
优化方法:
  • 调整 refresh_interval
    • 默认值为 1 秒。
    • 如果不需要实时性,可以延长刷新时间以提高写入性能。
    • 示例:将索引的刷新间隔设置为 5 秒:
      PUT /my_index/_settings
      {"index": {"refresh_interval": "5s"}
      }
      

倒排索引(Inverted Index)

倒排索引是 Elasticsearch 用来实现快速全文搜索的核心数据结构。

什么是倒排索引?

倒排索引是一种映射结构,它记录了词项(Term)与包含这些词项的文档 ID之间的关系。
与传统的正排索引(如关系型数据库的 B-Tree)不同,倒排索引更加适合快速查找包含特定关键词的文档。

倒排索引的结构:

以“倒排”表示其映射方向:

示例文档集:

Doc1: Elasticsearch is a search engine.
Doc2: Elasticsearch is fast and scalable.
Doc3: Full-text search uses inverted index.

倒排索引:

词项 (Term)文档 (Document IDs)
aDoc1, Doc2
ElasticsearchDoc1, Doc2
engineDoc1
fastDoc2
full-textDoc3
invertedDoc3
scalableDoc2
searchDoc1, Doc3
usesDoc3
构建倒排索引的步骤:
  1. 分词(Tokenization):
    • 文本被分解为词项。例如 Elasticsearch is a search engine 被分成:[Elasticsearch, is, a, search, engine]
  2. 去停用词(Stop Words):
    • 移除无意义的词汇(如 “is”, “a” 等)。
  3. 词项映射:
    • 记录每个词项出现在哪些文档中。
优点:
  • 快速全文检索: 可以高效找到包含某个或某些关键词的文档。
  • 灵活性: 支持复杂查询,比如布尔查询、短语匹配、模糊搜索等。
在 Elasticsearch 中的实现:
  • 每个字段都会创建一个倒排索引。
  • 支持分词器(Analyzer)对文本进行预处理,例如小写化、同义词扩展。
适用场景:
  • 文本内容检索,如日志分析、电子商务搜索、知识库搜索。

NRT 搜索与倒排索引的结合:

  • 倒排索引提供了快速查询的核心能力。
  • NRT 搜索通过频繁刷新倒排索引,使得新数据能够快速加入搜索结果,从而实现“近实时”的体验。

这种结合使得 Elasticsearch 在海量数据的场景下既能高效写入,又能快速检索。

http://www.lryc.cn/news/509090.html

相关文章:

  • Ubuntu20.04安装openMVS<成功>.colmap<成功>和openMVG<失败(已成功)>
  • 从测试服务器手动热部署到生产环境的实现
  • 【c++高阶DS】图
  • React第十八节 useEffect 用法使用技巧注意事项详解
  • C++ 指针基础:开启内存操控之门
  • Nginx的stream模块代理四层协议TCP的流量转发
  • UE5 渲染管线 学习笔记
  • Echarts连接数据库,实时绘制图表详解
  • Electron 学习笔记
  • Debian 12 安装配置 fail2ban 保护 SSH 访问
  • http反向代理
  • java12.24日记
  • vue中proxy代理配置(测试一)
  • [OpenGL]使用TransformFeedback实现粒子效果
  • GitCode 光引计划投稿 | GoIoT:开源分布式物联网开发平台
  • 用 gdbserver 调试 arm-linux 上的 AWTK 应用程序
  • 攻防世界web第一题
  • 轮播图带详情插件,插件
  • gesp(三级)(14)洛谷:B4039:[GESP202409 三级] 回文拼接
  • ISO17025最新认证消息
  • ASP.NET Core Web API 控制器
  • RAID5原理简介和相关问题
  • Axure RP 8安装(内带安装包)
  • stm32定时器输出比较----驱动步进电机
  • 关于鸿蒙架构feature
  • 【递归,搜索与回溯算法 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(一)
  • vue3 如何使用 mounted
  • PostgreSQL JOIN
  • mysql(基础语法)
  • 【论文阅读笔记】Scalable, Detailed and Mask-Free Universal Photometric Stereo