《深入理解Elasticsearch(原书第2版)》一1.1.2 Lucene的总体架构

简介:

本节书摘来华章计算机《深入理解Elasticsearch(原书第2版)》一书中的第1章 ,第1.1.2节,[美]拉斐尔·酷奇(Rafal Ku) 马雷克·罗戈任斯基(Marek Rogoziski)著 张世武 余洪淼 商旦 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.1.2 Lucene的总体架构

尽管我们可以直接探讨Apache Lucene架构的细节,但是有些概念还是需要提前了解的,以便于更好地理解Lucene的架构,它们包括:
文档(document):索引与搜索的主要数据载体,它包含一个或多个字段,存放将要写入索引的或将从索引搜索出来的数据。

  • 字段(field):文档的一个片段,它包括字段的名称和字段的内容两个部分。
  • 词项(term):搜索时的一个单位,代表了文本中的一个词。
  • 词条(token):词项在字段文本中的一次出现,包括词项的文本、开始和结束的偏移以及词条类型。

Apache Lucene将写入索引的所有信息组织为倒排索引(inverted index)的结构形式。倒排索引是一种将词项映射到文档的数据结构,它与传统的关系数据库的工作方式不同。你可以认为倒排索引是面向词项的而不是面向文档的。我们来看看简单的倒排索引是什么样的。例如,假设我们有一些只包含title字段的文档,如下所示:

  • Elasticsearch Server(文档1)
  • Mastering Elasticsearch(文档2)
  • Apache Solr 4 Cookbook(文档3)

这些文档索引好以后,可简略地显示如下图:

image


正如你所见,每个词项指向该词项所出现过的文档数。这种索引组织方式允许快速有效的搜索操作,例如基于词项的查询。除了词项本身以外,每个词项有一个与之关联的计数(即文档频率),该计数可以告诉Lucene这个词项在多少个文档中出现过。
每个索引由多个段(segment)组成,每个段写入一次但是查询多次。索引期间,一个段创建以后不再修改。例如,文档被删除以后,删除信息单独保存在一个文件中,而段本身并没有被修改。
多个段将会在段合并(segments merge)阶段被合并在一起。或者强制执行段合并,或者由Lucene的内在机制决定在某个时刻执行段合并,合并后段的数量更少,但是更大。段合并非常耗费I/O,合并期间有些不再使用的信息将被清理掉,例如,被删除的文档。对于容纳相同数据的索引,段的数量更少的时候搜索速度更快。尽管如此,还是需要强调一下:因为段合并非常耗费I/O,请不要强制进行段合并,你只需要仔细配置段合并策略,剩余的事情Lucene会自行完成。
 如果你想知道段由哪些文件组成以及每个文件都存储了什么信息,请参考Apache Lucene的官方文档:http://lucene.apache.org/core/4_10_3/core/org/apache/lucene/codecs/lucene410/pa-ckage-summary.html
更深入地了解Lucene索引
当然,实际的Lucene索引比前面提到的更复杂、更高深,除了词项的文档频率和出现该词项的文档列表外,还包含其他附加信息。在这里我们会介绍一些索引中的附加信息。了解这些信息对我们很有帮助,尽管它们只在Lucene内部使用。
(1)norm
norm是一种与每个被索引文档相关的因子,它存储文档的归一化结果,被用于计算查询的相关得分。norm基于索引时的文档加权值(boost)计算得出,与文档一起被索引存储。使用norm可以让Lucene在建立索引时考虑不同文档的权重,不过需要一些额外的磁盘空间和内存来索引和存储norm信息。
(2)词项向量
词项向量(term vector)是一种针对每个文档的微型倒排索引。词项向量的每个维由词项和出现频率结对组成,还可以包括词项的位置信息。Lucene和Elasticsearch默认都禁用词项向量索引,不过要实现某些功能,如关键词高亮等需要启用这个选项。
(3)倒排项格式
随着Lucene 4.0的发布,Lucene引入了解码器架构,允许开发者控制索引文件写入磁盘的格式,倒排项就是索引中可定制的部分之一。倒排项中可以存储字段、词项、文档、词项位置和偏移以及载荷(payload,一个在Lucene索引中随意存放的字节数组,可以包含任何我们需要的信息)。针对不同的使用目的,Lucene提供了不同的倒排项格式。比如,有一种优化后的格式是专门为高散列范围字段如唯一标识提供的。
(4)doc values
我们前面提到过,Lucene索引是一种倒排索引。不过,针对某些功能,如切面(faceting)或聚合(aggregation),这种倒排索引架构就不是最佳选择。这类功能通常需要操作文档而不是词项,Lucene需要把索引翻转过来构成正排索引才能完成这些功能所需要的计算。基于这些考虑,Lucene引入了doc values和额外的数据结构来进行分组、排序和聚合。doc values存储字段的正排索引。Lucene和Elasticsearch都允许我们通过配置来指定doc values的存储实现方式。可选的存储实现包括基于内存的、基于硬盘的,以及二者的混合。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
8月前
|
SQL 运维 数据挖掘
森马服饰从 Elasticsearch 到阿里云 SelectDB 的架构演进之路
森马引入阿里云 SelectDB 替换原 Elasticsearch + 业务库混合架构,统一分析 16+ 核心业务,打通 BI 组件,大幅简化数据同步链路和分析系统架构。实现复杂查询 QPS 提升 400%,响应时间缩短至秒级,亿级库存流水聚合查询缩短至 8 秒内的显著收益,有效驱动森马全渠道运营效率持续增长与业务创新。
227 0
森马服饰从 Elasticsearch 到阿里云 SelectDB 的架构演进之路
|
存储 分布式计算 大数据
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
257 3
|
存储 JSON 数据库
Elasticsearch 分布式架构解析
【9月更文第2天】Elasticsearch 是一个分布式的搜索和分析引擎,以其高可扩展性和实时性著称。它基于 Lucene 开发,但提供了更高级别的抽象,使得开发者能够轻松地构建复杂的搜索应用。本文将深入探讨 Elasticsearch 的分布式存储和检索机制,解释其背后的原理及其优势。
841 6
|
存储 索引
Elasticsearch分布式架构
【11月更文挑战第2天】
303 1
|
搜索推荐 API 定位技术
一文看懂Elasticsearch的技术架构:高效、精准的搜索神器
Elasticsearch 是一个基于 Lucene 的开源搜索引擎,以其强大的全文本搜索功能和快速的倒排索引技术著称。它不仅支持数字、文本、地理位置等多类型数据,还提供了可调相关度分数、高级查询 DSL 等功能。Elasticsearch 的核心技术流程包括数据导入、解析、索引化、查询处理、得分计算及结果返回,确保高效处理大规模数据并提供准确的搜索结果。通过 RESTful API、Logstash 和 Filebeat 等工具,Elasticsearch 可以从多种数据源中导入和解析数据,支持复杂的查询需求。
795 0
|
存储 负载均衡 监控
揭秘 Elasticsearch 集群架构,解锁大数据处理神器
Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛应用于大数据处理、实时搜索和分析。本文深入探讨了 Elasticsearch 集群的架构和特性,包括高可用性和负载均衡,以及主节点、数据节点、协调节点和 Ingest 节点的角色和功能。
745 0
|
存储 监控 分布式数据库
百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现
本文介绍了百亿级数据存储架构的设计与实现,重点探讨了ElasticSearch和HBase的结合使用。通过ElasticSearch实现快速检索,HBase实现海量数据存储,解决了大规模数据的高效存储与查询问题。文章详细讲解了数据统一接入、元数据管理、数据一致性及平台监控等关键模块的设计思路和技术细节,帮助读者理解和掌握构建高性能数据存储系统的方法。
百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现
|
5月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。