乐闻世界logo
搜索文章和话题

Elasticsearch 如何支持近实时( NRT )索引?

1 个月前提问
1 个月前修改
浏览次数12

1个答案

1

在 Elasticsearch 中,近实时(NRT)索引是指数据被索引后几秒钟内就变得可搜索。Elasticsearch 能够实现这一功能主要依赖于以下几个关键技术:

  1. Lucene 库的使用: Elasticsearch 是建立在 Lucene 之上的,Lucene 是一个高性能的文本搜索引擎库。Lucene 的一个重要特性是其倒排索引(Inverted Index)结构,这使得文本搜索变得非常快速。在 Elasticsearch 中,当文档被索引时,它首先被存储在内存中的一个称为 "buffer" 的区域。当这个 buffer 满了后,Elasticsearch 将其内容转换成一个叫做 "segment" 的结构,并将其写入磁盘。

  2. Segment 的刷新机制: Segment 是不可变的,这意味着一旦它被写入磁盘,它的内容就不会被修改。为了使新索引的文档可搜索,Elasticsearch 定期执行称为 "refresh" 的操作,通常每秒一次。在 refresh 操作中,新的 segment 被打开以供搜索,而已打开的 segment 仍然可用于搜索。这使得新索引的文档几乎立即变得可搜索,从而达到近实时的效果。

  3. Translog(事务日志): 为了确保数据的持久性和一致性,在内存中的文档在被写入 segment 之前,Elasticsearch 会先写入一个叫做 Translog 的事务日志。在发生系统崩溃的情况下,Translog 能够用来恢复那些已经被索引但还没有被刷新到 segment 的文档。默认情况下,当 segment 被刷新到磁盘时,translog 也会被清空。

通过结合这几种机制,Elasticsearch 能够确保数据既快速被索引,又几乎在实时地被搜索到,从而提供高效、可靠的搜索服务。这种近实时的索引和搜索能力是 Elasticsearch 在日志分析、全文搜索等场景中非常受欢迎的原因之一。

2024年8月13日 21:50 回复

你的答案