首页 文章

Elasticsearch - 什么是索引流程?

提问于
浏览
1

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

不过,我并不真正理解索引背后的细节 . 例如,如果删除文档,是否会发生索引?索引期间真正发生了什么?我一直在寻找一些解释这个问题的文档 . 但是,我没有运气 .

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

谢谢!

1 回答

  • 1

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

    使文本可搜索

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

    最能支持每个字段多个值要求的数据结构是 inverted index . 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 index is immutable"

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

    Indexing Process

    • 新文档收集在内存索引缓冲区中 .

    • 每隔一段时间,缓冲区就会被提交:

    • 新段 - 补充倒排索引 - 写入磁盘 .

    • 将新的提交点写入磁盘,其中包含新段的名称 .

    • 磁盘是fsync'ed-在文件系统缓存中等待的所有写入都被刷新到磁盘,以确保它们已被物理写入 .

    • 打开新段,使其包含的文档可供搜索 .

    • 内存缓冲区已清除,可以接受新文档 .

    What happens in case of Delete

    细分是不可变的,因此无法从旧细分中删除文档 .

    当文档被“删除”时,它实际上只是在.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.

    When is it actually removed

    在“段合并”中,已从文件系统中清除已删除的文档 .

    参考文献:

    Elasticsearch Docs

    Inverted Index

    Lucene Talks

相关问题