elasticsearch搜索引擎开发实战 pdf,elasticsearch search api
从本文开始,elasticsearch的介绍将进入数据功能部分(index),包括索引的创建和管理、数据索引和搜索等相关功能。对于这一部分的介绍,我们首先分析各个功能模块,然后详细分析数据索引和搜索的整个过程。
这部分从代码包结构上可以分为index、indexes和lucene(common)。index包中的代码主要是每个函数对应lucene的底层操作,它们的操作对象是index的shard,是elasticsearch对lucene每个函数的扩展和封装。indexes是index函数的封装,对底层索引的大部分集群操作都是通过这部分提供的接口进行的。常用包下的Lucene部分代码主要是对索引的一些读操作(索引级别)的封装。例如读取索引元数据、搜索中使用的一些过滤器的实现等。
在索引部分,封装了lucene,为es提供了索引操作的各种功能的接口。如编解码器,这部分是写lucene索引的部分。在4.x之后,这部分被分离成一个单独的层,它被封装在这里。Postformat是lucene中倒排表的编写格式,封装后通过postingformatservice对外提供。具体的后置格式由postprovide提供。其继承关系如下:
通过外部调用postingservice的Get方法获取对应的postingprovider。代码如下:
public PostingsFormatProvider get(String name)抛出elasticsearchilegargumentexception { PostingsFormatProvider provider=providers . get(name);if(provider==null){ throw new elasticsearchilegargumentexception( failed to find postions _ format[ name ]);}退货提供方;}这里的提供是在服务初始化时注入的。当然,1.5版本只使用默认的DefaultPostingFormatProvider。postformat的获取是通过postingprovider的get方法,对应的postingformat初始化总是在构造方法中实现:
public DefaultPostingsFormatProvider(@辅助字符串名,@辅助设置postingsFormatSettings){ super(name);this . min block size=postingsformatsettings . getas int( min _ block _ size ,BlockTreeTermsWriter)。默认_最小_块_大小);this . maxblocksize=postingsformatsettings . getas int( max _ block _ size ,BlockTreeTermsWriter)。DEFAULT _ MAX _ BLOCK _ SIZE);this . postingsformat=new Lucene 41 postingsformat(min blocksize,maxBlockSize);}你可以看到这是lucene的postingformat初始化的地方。这部分的实现大部分类似于编解码器的实现,下面的分析会详细介绍其中的一些。写索引的方法都在Engine里。这里封装了所有写索引的方法,后面会详细分析。
lucene在常用部分的功能基本都是读取lucene。例如,读取段信息的方法如下:
公共静态SegmentInfos readSegmentInfos(Directory目录)抛出io exception { final SegmentInfos sis=new SegmentInfos();sis.read(目录);返回sis}直接调用lucene的segmentInfos类读取段信息。这部分后面会单独分析,这里只是简单介绍一下。
索引部分是shard的基本接口。这里的操作都是针对单机的单个shard(lucene index),不涉及集群。索引部分通过封装索引的相关函数,为索引的集群操作提供相关接口。和这里的store部分一样,只提供了一个实现类IndiceStore,它的实现如下所示。
它实现了几个句柄类来处理来自集群的相关请求。和之前结束的处理程序一样,这些内部类会接收并处理属于这个节点的请求,并将属于这个节点的请求转发给对应的节点。
以上是elasticsearch数据(索引)部分的代码结构。这里只是简单概述,后面会详细分析相应的部分。更多关于elasticsearch的指数数据功能,请关注风行IT的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。