gpt4 book ai didi

Elasticsearch - 什么是索引过程?

转载 作者:行者123 更新时间:2023-11-29 02:55:40 25 4
gpt4 key购买 nike

我正在从事一个使用 Elasticsearch 的项目。我的核心搜索 UI 正在运行。我现在正在寻求改进一些事情。在这个过程中,我发现我并不真正理解“索引”过程中发生了什么。我明白什么是索引。我明白什么是文件。我知道索引会发生在 a) 添加文档时 b) 更新文档时或 c) 调用刷新端点时。

不过,我还是不太了解索引背后的细节。例如,如果文档被删除,索引会发生吗?索引期间究竟发生了什么?我一直在寻找一些解释这一点的文档。但是,我没有任何运气。

有人可以解释索引过程中发生的事情并可能指出一些文档吗?

谢谢!

最佳答案

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

使文本可搜索

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

最能支持每个字段多值要求的数据结构是倒排索引倒排索引包含出现在任何文档中的所有唯一值或术语的排序列表,以及对于每个术语,包含它的所有文档的列表。

更新索引:

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

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

索引过程

  • 新文档收集在内存中的索引缓冲区中。
  • 每隔一段时间,缓冲区就会被提交:

    • 一个新的段——一个补充倒排索引——被写入磁盘。
    • 一个新的提交点被写入磁盘,其中包括新段的名称。
    • 磁盘是同步的——所有在文件系统缓存中等待的写入都被刷新到磁盘,以确保它们已经被物理写入。
    • 打开新段,使其包含的文档对搜索可见。
  • 内存缓冲区已清除,并准备好接受新文档。

删除时会发生什么

段是不可变的,因此无法从旧段中删除文档。

当一个文档被“删除”时,它实际上只是在 .del 文件中被标记为已删除。 已标记为已删除的文档仍然可以匹配查询,但在返回最终查询结果之前它会从结果列表中删除。

什么时候真正移除

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

引用:

Elasticsearch Docs

Inverted Index

Lucene Talks

关于Elasticsearch - 什么是索引过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36161539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com