Elasticsearch - 什么是索引流程?

时间:2016-03-22 17:41:07

标签: elasticsearch

我正在开发一个使用Elasticsearch的项目。我的核心搜索UI工作正常。我现在正在寻求改善一些事情。在这个过程中,我发现我并不真正理解"索引"期间会发生什么。我理解索引是什么。我理解文档是什么。我知道索引发生在a)添加文档时b)文档更新时)或c)调用刷新端点时。

尽管如此,我还是不太了解索引背后的细节。例如,如果删除文档,是否会发生索引?索引期间真正发生了什么?我一直在寻找解释这一点的文档。但是,我没有运气。

有人可以解释索引期间会发生什么,并可能指出一些文档吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

索引是一个巨大的过程,涉及很多步骤。我将尝试简要介绍索引过程的主要步骤

使文本可搜索

文本字段中的每个单词都需要可搜索,

最能支持每个字段多个值要求的数据结构是倒排索引 The inverted index contains a sorted list of all of the unique values, or terms, that occur in any document and, for each term, a list of all the documents that contain it.

更新索引:

首先,请注意" lucene索引是不可变的"

因此,在任何(CRUD(-R))操作的情况下,lucene不是重写整个倒排索引,而是添加新的补充索引以反映更近期的变化。

索引流程

  • 新文档收集在内存索引缓冲区中。
  • 经常提交缓冲区:

    • 新的段 - 补充倒排索引 - 写入磁盘。
    • 将新的提交点写入磁盘,其中包含新段的名称。
    • 磁盘是fsync'ed - 在文件系统缓存中等待的所有写入都被刷新到磁盘,以确保它们已被物理写入。
    • 打开新细分,使其包含的文档可供搜索。
  • 内存缓冲区已清除,可以接受新文档。

删除时会发生什么

细分不可变,因此无法从较旧的细分中移除文档。

当文档被“删除”时,它实际上只是在.del文件中标记为已删除。 A document that has been marked as deleted can still match a query, but it is removed from the results list before the final query results are returned.

何时删除

在细分合并中,已从文件系统中清除已删除的文档。

参考文献:

Elasticsearch Docs

Inverted Index

Lucene Talks