面试题答案
一键面试- 删除标记的使用
- 在ElasticSearch中,当删除一个文档时,并不会立即从磁盘上物理删除该文档。而是给该文档添加一个删除标记。这是因为ElasticSearch采用的是基于Lucene的倒排索引结构,直接物理删除文档会影响索引的整体结构,成本较高。
- 例如,假设文档
doc1
要被删除,ElasticSearch会在内部标记该doc1
为已删除状态,在后续的搜索过程中,带有删除标记的文档不会被返回。
- 后续可能涉及的操作
- 段合并:Lucene索引由多个段(Segment)组成。随着文档的不断删除和新增,段中会包含很多已删除的文档。在段合并过程中,ElasticSearch会将多个小的段合并成一个大的段。在这个合并过程中,带有删除标记的文档不会被复制到新的段中,从而实现了对这些删除文档的物理删除。例如,当段
segment1
和segment2
合并时,已删除的文档不会出现在合并后的新段中。 - 索引刷新:ElasticSearch会定期进行索引刷新操作。在刷新过程中,内存中的数据会被写入磁盘,生成新的段。在这个过程中,也会处理删除标记,确保带有删除标记的文档不会被持久化到新生成的段中。同时,刷新操作也会更新相关的元数据信息,使得搜索操作能够准确地排除已删除的文档。
- 段合并:Lucene索引由多个段(Segment)组成。随着文档的不断删除和新增,段中会包含很多已删除的文档。在段合并过程中,ElasticSearch会将多个小的段合并成一个大的段。在这个合并过程中,带有删除标记的文档不会被复制到新的段中,从而实现了对这些删除文档的物理删除。例如,当段