对于索引存储,划分为shard,从而提高读写性能并实现负载平衡。
索引不变性索引一旦创建,就不能更改。
动态索引如何更新倒排索引,同时保留不可变的好处(顺序写入、内存缓存)。 添加额外的索引以反映最近的变化,而不是重写整个转置索引。
电子搜索索索引配置
索引结构. png
Lucene引入了家长级搜索。 每个segment都是一个转置索引,但Elasticsearch下是一个segment集合,当Elasticsearch检索到该索引时,它会向该索引下的所有shard发送查询请求,并过滤这些结果
编制索引
内存缓冲区包含用于提交文档的Lucene索引. png
提交后,新段将添加到提交点中,缓存将为空。 png
新文档首先写入内存空间的索引缓存中。 过了一会儿,buffer提交了。 新的segment (新的反向索引)将写入磁盘,新的提交点(commit point )将写入磁盘。 磁盘fsync,等待内核文件系统中的所有数据写入磁盘,以确保物理写入。 打开一个新的segment,您可以在其中为包含的文档创建索引。 的缓存被清除,等待接受新文档。 几乎实时的上面没有刷新的情况下,加入刷新的情况(默认1秒)如下所示。
缓存内容已写入段,但. png未在内存中编制索引的文档将写入新的segment。 但是,首先将segment写入内核的文件系统缓存。 这个过程很轻量,刷新到磁盘需要很长时间。 但是,如果segment文件位于内核缓存中,则可以将其打开进行读取。
防止丢失
Translog.png在写入缓存的同时写入translog。合并segment合并segment以提高查询性能
合并segment.png
elaticsearch自动在后台完成segment的合并,新的segment闪存到硬盘,写入新的提交点,删除旧的段。 然后,新段将打开进行检索,旧段将被删除。 也可以通过优化API完成segment的集成。