Elasticsearch 是一个分布式搜索和分析引擎,它允许用户通过 RESTful API 索引、搜索和分析大量的文本数据。当你向 Elasticsearch 索引(插入)一个文档时,它会经历以下几个步骤:
- 文档创建:首先,你需要创建一个 JSON 格式的文档,其中包含你想要索引的数据。文档是 Elasticsearch 中数据的最小单位,它包含了一组键值对(字段和字段值)。
- 确定索引和类型:为了将文档添加到 Elasticsearch,你需要确定文档所属的索引和类型。索引是一个逻辑容器,用于存储具有相似特征的文档。类型表示文档的结构或模式,用于定义文档中各个字段的数据类型、分析器等属性。从 Elasticsearch 7.0 开始,每个索引只允许有一个类型。
- 自动生成 ID 或指定 ID:当你将文档添加到 Elasticsearch 时,可以选择自动生成一个唯一的文档 ID,或者手动指定一个。如果你选择自动生成 ID,Elasticsearch 会在插入文档时为其分配一个唯一的、不可变的 ID。
- 分析和处理:Elasticsearch 会根据预先定义的映射对文档进行分析和处理。分析过程包括将文本字段分解成词条(Tokenization)、去除停用词(Stopword removal)、词干提取(Stemming)等步骤。这些步骤有助于将文档中的文本数据转换为适合搜索和分析的形式。
- 文档分配:Elasticsearch 会根据索引的分片策略将文档分配到一个或多个分片上。每个分片都是一个独立的 Lucene 索引,负责存储和检索一部分文档。通过将文档分布在多个分片上,Elasticsearch 可以实现数据的水平扩展和负载均衡。
- 创建倒排索引:在文档分配到分片后,Elasticsearch 会为其创建倒排索引。倒排索引是一种数据结构,它将文档中的词条与包含这些词条的文档关联起来。通过倒排索引,Elasticsearch 能够快速地找到包含特定词条的文档。
- 复制:为了提高数据可用性和查询性能,Elasticsearch 会将分片复制到集群中的其他节点上。复制分片可以在主分片不可用时继续提供数据读取功能,也可以在多个副本之间分配查询负载。
- 确认和响应:一旦文档被成功索引到主分片和相应的副本分片上,Elasticsearch 会返回一个确认响应。该响应包含有关索引操作的信息,如 HTTP 状态码、文档 ID、索引名称、类型以及其他元数据。通常情况下,索引操作的 HTTP 状态码为 201(已创建)或 200(已更新,如果是更新现有文档的操作)。
需要注意的是,尽管在索引文档后,Elasticsearch 会立即返回确认响应,但新索引的文档可能需要一定的时间才能在搜索结果中显示。这是因为 Elasticsearch 会定期刷新倒排索引,将内存中缓存的更改持久化到磁盘。默认情况下,刷新间隔为 1 秒。你可以根据实际需要调整这个参数,以平衡索引和查询性能。
总结一下,Elasticsearch 索引文档的过程包括:创建文档、确定索引和类型、生成或指定文档 ID、分析和处理文档、将文档分配到分片上、创建倒排索引、复制分片以及返回确认响应。这个过程使得文档能够被有效地存储、检索和分析,同时确保了 Elasticsearch 集群的高性能、可扩展性和可用性。
上次更新时间 21 3 月, 2023 at 08:06 下午