我试图摆脱elasticsearch。正在阅读权威指南。
他们提到,每次我更新文档中的某些内容时,更新API都会执行一次检索-更改- 重新索引周期。我完全拿到,因为他们说,“文件是不可变的”(见本做这个)。我在这里要问的是为什么它首先是不可变的。如果这不是约束,那么只允许特定字段的更新和索引是否具有优势?
首先,告诉段是不可变的比告诉文档是不可变的要好。了解原因。您需要了解Lucene的工作原理。卢塞恩(Lucerne)是一个Java库,在上面建立了elasticsearch。在底层,一个单独的碎片是一个Lucene实例,它完成文档存储和搜索的实际工作。Elasticsearch更是基于Lucene的基于分布式REST的服务器层。
在Lucene中,为了实现高索引速度,我们使用了段架构。一堆文件保留在一个段中,其中每个段是磁盘中的单个文件。由于两次写入之间的文件非常繁重,因此将一个段设为不可变的,以便所有后续写入都转到New段。