三、ElasticSearch 倒排索引详解?

38 阅读3分钟

前言:

  我们既然提到倒排索引,首先就需要了解什么是索引, 倒排索引 与传统索引有什么差别。

  • 索引:在数据库或搜索引擎中,索引是对数据的快速访问的数据结构。它允许快速定位和查找记录。索引可以基于一个或多个字段,用于加快特定字段上的搜索和排序操作。

  • 倒排索引:倒排索引是一种特殊类型的索引,它将文档中出现的每个单词映射到包含该单词的文档列表中。在倒排索引中,每个词语都有一个对应的倒排列表,其中包含了包含该词语的文档。倒排索引的使用极大地提高了文本搜索的效率,特别是在处理大规模数据集时。

  • 倒排索引的结构与传统索引的结构相反: 传统的索引结构是由文档构成的,每个文档包含了若干个词汇,然后根据这些词汇建立索引。 而倒排索引是由词汇构成的,每个词汇对应了若干文档。然后根据这些文档建立索引。

对于一个包含多个词汇的文档,倒排索引将每个词汇作为一个关键字term 然后记录下该词汇所在的文档编号DocumentID 及该词汇所在文档的位置这样,当用户输入的一个关键字时,就可以快速地查找到词汇所在的文档编号,根据文档编号查找文档内容。

倒排索引建立的过程

Elasticsearch建立倒排索引的过程可以简单描述如下:

1. 数据分词:首先,Elasticsearch会对文档中的字符串字段进行分词处理,将它们拆分成一个个词条。分词使用适当的分析器,可以根据需要进行不同级别的处理,比如去除停用词、转换大小写、词干提取等。

2. 构建倒排索引:对于每个词条,Elasticsearch在词典中查找该词条是否已存在。如果不存在,则将该词条添加到词典中;如果已存在,则获取该词条的倒排列表。

3. 更新倒排列表:对于当前处理的文档,Elasticsearch会将文档的标识(如文档ID)添加到倒排列表中,同时记录该词条在文档中的位置信息。位置信息可以用于支持短语查询等高级查询操作。

通过以上过程,Elasticsearch建立了词典和各个词条对应的倒排列表。词典能够快速找到特定词条,并获取对应的倒排列表,倒排列表则记录了包含该词条的文档列表和位置信息,这样就能够高效地进行全文搜索和检索操作。倒排索引的建立是在文档插入、更新或删除时进行的,保持索引与文档的一致性。此外,Elasticsearch还使用了各种优化策略,如合并段、缓存等,以提升倒排索引的性能和查询速度。