elasticsearch index 功能源码概述
从本篇开始,对elasticsearch的介绍将进入数据功能部分(index),这一部分包括索引的创建,管理,数据索引及搜索等相关功能。对于这一部分的介绍,首先对各个功能模块的分析,然后详细分析数据索引和搜索的整个流程。
这一部分从代码包结构上可以分为:index, indices及lucene(common)几个部分。index包中的代码主要是各个功能对应于lucene的底层操作,它们的操作对象是index的shard,是elasticsearch对lucene各个功能的扩展和封装。indices部分是对index部分功能的封装,集群对于底层索引的操作多数通过这一部分提供的接口来进行。common包下的lucene部分代码主要是对于索引一些读操作(索引级别)的封装。如读取索引元数据,搜索中用到的一些过滤器的实现等。
在index部分通过对lucene的封装,为es提供了索引操作各个功能的接口。如codec,这一部分是lucene索引写入的部分。在4.x后这一部分被分开成为单独的一层,在这里对其进行了封装。postformat是lucene中倒排表的写入格式,封装后通过postingformatservice对外提供。而具体的postform则是由postprovide提供。它的继承关系如下所示:

外部通过调用postingservice的get方法获取到对应的postingprovider,代码如下所示:
public PostingsFormatProvider get(String name) throws ElasticsearchIllegalArgumentException {
PostingsFormatProvider provider = providers.get(name);
if (provider == null) {
throw new ElasticsearchIllegalArgumentException("failed to find postings_format [" + name + "]");
}
return provider;
}
这里的provides在service初始化时注入,当然es的1.5版本只是使用了默认的DefaultPostingFormatProvider。postformat的获取则是通过postingprovider的get的方法,而对应的postingformat初始化在构造方法总实现:
public DefaultPostingsFormatProvider(@Assisted String name, @Assisted Settings postingsFormatSettings) {
super(name);
this.minBlockSize = postingsFormatSettings.getAsInt("min_block_size", BlockTreeTermsWriter.DEFAULT_MIN_BLOCK_SIZE);
this.maxBlockSize = postingsFormatSettings.getAsInt("max_block_size", BlockTreeTermsWriter.DEFAULT_MAX_BLOCK_SIZE);
this.postingsFormat = new Lucene41PostingsFormat(minBlockSize, maxBlockSize);
}
可以看到这里就是初始化了lucene的postingformat。这一部分的实现多数都跟codec的实现类似,后面的分析中会对其中的一些做详细的介绍。对于写索引的方法都在Engine中。这里封装了所有对于索引写操作的方法,后面会详细分析。
关于common部分的lucene的功能基本山都是对lucene的读操作,如对于segment信息读取的方法如下所示:
public static SegmentInfos readSegmentInfos(Directory directory) throws IOException {
final SegmentInfos sis = new SegmentInfos();
sis.read(directory);
return sis;
}
直接调用了lucene的segmentInfos类读取segment信息。这一部分在后面会单独分析,这里只是简单介绍一下。
index部分是shard基本的接口,这里的操作都是针对于单个机器单个shard(lucene index)的操作,不涉及集群。而indice部分则通过封装index的相关功能为集群对于index的操作提供了相关接口。如这里的store部分,只是提供了一个实现类IndiceStore,它的实现如下所示。

它实现了多个handle类用于处理来自集群的相关请求。跟之前结束的handler一样,这些内部类会接收处理属于本节点的请求,转发属于本节点请求到对应节点。
总结:以上就是elasticsearch数据(index)部分的代码结构。这里只是简单的概述,后面会对对应的部分进行详细分析。
elasticsearch index 功能源码概述的更多相关文章
- 出售Illustrator脚本插件面板(包含面板源码,以及面板上所有的功能源码)
出售Illustrator脚本插件面板(包含面板源码,以及面板上所有的功能源码) 购买后可提供相应的小修改,以及教你使用往这个多列面里再加上按钮功能! 这套源码可作为工作使用,也可用为新手学习AI脚面 ...
- ElasticSearch Index操作源码分析
ElasticSearch Index操作源码分析 本文记录ElasticSearch创建索引执行源码流程.从执行流程角度看一下创建索引会涉及到哪些服务(比如AllocationService.Mas ...
- ios自动滚动图片功能源码
源码AdScrollerView,一个已经封装好的UIScrollView的子类,可以自动滚动图片以及对应的描述语,类似淘宝app首页的广告滚动效果.滚动图片数量不限,并且显示pageControl. ...
- 微信跳转外部浏览器打开指定H5链接的功能源码
通常大家在微信内转发分享H5链接的时候都很容易碰到H5链接在微信内无法打开或在微信内无法打开app下载页的情况.通常这种情况微信会给个提示 “已停止访问该网址” ,那么导致这个情况的因素有哪些呢,主要 ...
- 微信最新跳转浏览器功能源码,实现微信内跳转手机浏览器访问网页url
微信最新自动跳转外部浏览器下载app/打开指定页面源码 源码说明: 适用安卓和苹果系统,支持任何网页链接.并且无论链接是否已经被微信拦截,均可实现微信内自动跳转浏览器打开. 生成的跳转链接具有极佳的防 ...
- vue购物车功能源码
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...
- 构建NetCore应用框架之实战篇(七):BitAdminCore框架登录功能源码解读
本篇承接上篇内容,如果你不小心点击进来,建议从第一篇开始完整阅读,文章内容继承性连贯性. 构建NetCore应用框架之实战篇系列 一.简介 1.登录功能完成后,框架的雏形已经形成,有必要进行复习. 2 ...
- Java中分页功能源码实例
一.源码(后附使用说明) package com.zhiyou100.crm.util; /** * 分页功能 * @author YangXianSheng * */ public class Pa ...
- HashMap核心功能源码浅析
1.引子 "HashMap"由“hash”和“map"两个单词组成,这里的”map"表示“映射”而不是“地图”的意思,两个单词连起来就是“哈希映射表”.Map是 ...
随机推荐
- ip反查域名的详细信息(多种方法)
不多说,直接上干货! 至于这里怎FQ,很简单,请见我下面的博客! kali 2.0安装 lantern(成功FQ) shadowsocks(简称SSFQ软件)步骤详解 FQ软件lantern-inst ...
- MySql语句中select可以嵌套么,字段的重命名可以用中文么
今天文档中看到的查询语句,SELECT后面又跟了一个SELECT嵌套,而且把字段重命名为中文,请问可以这样做么 MySql语句中select可以嵌套么,字段的重命名可以用中文么 >> my ...
- .net 操作INI文件
using System.Runtime.InteropServices; using System.Text; namespace FaureciaManager { public class Fi ...
- php--防止DDos攻击代码
<?php //查询禁止IP $ip =$_SERVER['REMOTE_ADDR']; $fileht=".htaccess2"; if(!file_exists($fil ...
- dijkstra STL 堆优化
Code: #include<iostream> #include<algorithm> #include<vector> #include<queue> ...
- Nginx的日志备份操作
正常情况下,我们给一个日志文件做备份.通常会 mv access.log access.log.0313 ,之后创建一个新的 touch access.log 会认为是备份完成了:旧的日志 ...
- java源码学习
Collection List ArrayList LinkedList Vector Stack Set HashSet TreeSet Map HashMap TreeMap LinkedHash ...
- hihoCoder #1127 : 二分图二·二分图最小点覆盖和最大独立集
#1127 : 二分图二·二分图最小点覆盖和最大独立集 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 在上次安排完相亲 ...
- Redis中的持久化操作
本篇博客主要来解说一下怎样Redis中的持久化操作,当然了不是一篇理论性的博客,主要还是分享一下在redis中怎样来配置持久化操作. 1.介绍 redis为了内部数据的安全考虑,会把本身的数 ...
- [Python] Indexing An Array With Another Array with numpy
NumPy Reference: Indexing Integer array indexing: Select array elements with another array def index ...