tk域名网站多少,商水建设局网站,友情链接在线观看,游戏网站免费入口大家好#xff0c;我是锋哥。今天分享关于【详细描述一下Elasticsearch索引文档的过程#xff1f;】面试题。希望对大家有帮助#xff1b; 详细描述一下Elasticsearch索引文档的过程#xff1f;
Elasticsearch的索引文档过程是其核心功能之一#xff0c;涉及将数据存储到…大家好我是锋哥。今天分享关于【详细描述一下Elasticsearch索引文档的过程】面试题。希望对大家有帮助 详细描述一下Elasticsearch索引文档的过程
Elasticsearch的索引文档过程是其核心功能之一涉及将数据存储到索引中并使其可搜索。下面我将详细描述Elasticsearch中索引文档的流程
1. 文档Document
文档是Elasticsearch中存储数据的基本单位类似于数据库中的一行记录。每个文档都是一个JSON对象包含了数据的字段和值。
2. 索引Index
索引是存储文档的地方可以视为一个数据库包含多个文档。每个文档在索引中有一个唯一的标识符ID。Elasticsearch中的索引是分片的可以包含多个分片每个分片又是一个Lucene索引。
3. 索引文档的流程
索引文档的过程分为几个步骤
3.1. 接收请求
当你向Elasticsearch发送一个index请求时Elasticsearch接收到请求后会根据请求的目标索引index来决定该文档存储在哪个位置。这个请求通常是一个HTTP请求通常如下所示 PUT /my_index/_doc/1
{title: Elasticsearch Basics,content: Elasticsearch is a distributed search engine.
}上述请求向my_index索引中插入一条文档文档的ID是1内容是title和content字段。
3.2. 确定目标索引和文档ID
目标索引请求中指定了文档要存入的索引如my_index。文档ID如果请求中指定了ID如上例中的1Elasticsearch会使用该ID如果没有指定Elasticsearch会自动生成一个唯一的ID。
3.3. 路由和分片
Elasticsearch使用路由来决定将文档存储到哪个分片Shard。路由通常是基于文档的ID来进行计算的默认情况下Elasticsearch会通过MD5哈希算法对文档ID进行处理并将结果映射到分片。这个过程确保文档在集群中的分布是均衡的。
3.4. 文档分析Analyzing
文档中的文本字段会经过分析过程。Elasticsearch使用**分析器Analyzer**来将文本字段分解成多个“词条”terms。这些词条会用于索引和查询。 分析器由字符过滤器Character Filter、**分词器Tokenizer和词项过滤器Token Filter**组成。例如文本Elasticsearch Basics会被分解为两个词条elasticsearch和basics。分析器的选择通常是在创建索引时配置的默认分析器通常是standard分析器。
3.5. 创建Lucene文档
分析后的词条会被存储为Lucene文档的倒排索引Inverted Index的一部分。Lucene倒排索引将每个词条映射到包含该词条的文档ID列表中。这些词条在Elasticsearch中是可以搜索的关键元素。
3.6. 存储原始文档_source字段
在索引文档时Elasticsearch通常会将原始的JSON文档即_source字段存储起来。这样当进行搜索时用户可以检索到原始数据。_source字段是文档的原始内容不经过分析和转换保留完整的原始结构。
3.7. 分配文档到分片
文档经过路由后被分配到集群中的某个具体的分片Shard。分片的数量在创建索引时设置并且每个分片可以被多个节点Node存储。每个文档的倒排索引会被存储在Lucene的分片索引中。
3.8. 更新和刷新
Elasticsearch的倒排索引是通过写入**事务日志translog**来进行更新的事务日志确保了写操作的可靠性。在写入后数据不会立即对外可见。**刷新refresh**操作将事务日志的数据更新到倒排索引中使得索引变得可搜索。 刷新是定期进行的但也可以通过_refreshAPI手动触发。每个分片会有一个独立的刷新周期通常会在每个分片每隔一段时间进行一次刷新。
3.9. 成功索引
当文档成功被索引后Elasticsearch返回一个响应告知用户索引成功。响应通常包含文档ID、索引名称、分片位置和版本号等信息。 {_index: my_index,_id: 1,_version: 1,_shards: {total: 1,successful: 1,failed: 0},result: created,_seq_no: 0,_primary_term: 1
}3.10. 数据的最终存储
文档经过索引和刷新后它的倒排索引和原始文档_source数据被持久化存储。Elasticsearch会定期清理无用的文档和版本通过合并merge过程来减少索引的碎片。
4. 索引的状态
索引文档后的数据会进入搜索引擎的活跃状态。用户可以通过查询search请求来检索这些文档。如果在文档索引后有更新操作如update、deleteElasticsearch会根据文档ID来执行这些操作而这些操作最终会更新倒排索引。
总结
Elasticsearch索引文档的过程包括以下主要步骤
接收索引请求。确定目标索引和文档ID。计算路由将文档分配到对应的分片。对文档中的文本字段进行分析生成倒排索引。存储原始文档_source字段。执行更新和刷新操作使文档可以被搜索。最终文档存储在索引的分片中等待查询。
这些步骤结合了数据分片、路由、分析、索引和存储确保Elasticsearch能够高效地存储和查询海量数据。