了解Lucene以了解ElasticSearch

2020-06-21 00:29:08

本文的目的是促进更好地理解ElasticSearch中的事情是如何工作的。如果您正在阅读本文,您可能已经知道ElasticSearch是如何工作的,如果不是这样,您可以通过阅读下面的文章来了解更多:

Lucene是ElasticSearch的基础,但您在开车时不能直接与他交互,也不能要求直接启动引擎。但是如果你的车坏了,你不认为知道你的发动机是怎么工作的是个好主意吗?

你有大量的文件,你需要找到一个特定的文件,其中包含一个特定的词,如何快速地做到这一点呢?如何实现可伸缩性?这就是索引的用武之地:要快速搜索大量文本,您必须首先为该文本编制索引,并将其转换为一种可让您快速搜索的格式。此转换过程称为索引,其输出称为索引。

索引由一个或多个段组成,每个段由几个索引组成,很混乱,对吧?当它被创建时,它被分成更小的段,或者您可以将其视为子索引,其中每个索引并不是完全独立的。

片段是不变的,每个片段都包含一个或多个Lucene文档,在您使用ES的过程中,您会遇到不得不删除文档的情况。显然这不是问题,但幕后发生了什么?删除文档时,仅将其“标记”为已删除,并将文档的新版本添加到段中。只有当较大段的“连接”发生时,才会时不时地执行它的真正执行。与此同时,文档继续占用磁盘空间。

随着时间的推移,索引将积累许多段。数据段定期合并为单个新数据段并删除旧数据段。

基本上,因为有两件重要事情,丢弃旧文档,从而减少我们在磁盘上的索引空间;第二,删除旧的段,并创建新的更大的段,从而提高您的搜索速度。

理解LUNCE对于理解Elasticsearch是必不可少的,当然它们是不同的,但是概念和工作原理是相同的。这种概念在ElasticSearch文档中很难找到,因为它们为您抽象了所有这些工作。我希望我能解释一些关于Lucene核心的事情,以展示ElasticSearch是如何真正工作的。