elasticsearch索引index數(shù)據(jù)功能源碼示例
從本篇開始,對elasticsearch的介紹將進入數(shù)據(jù)功能部分(index),這一部分包括索引的創(chuàng)建,管理,數(shù)據(jù)索引及搜索等相關(guān)功能。對于這一部分的介紹,首先對各個功能模塊的分析,然后詳細分析數(shù)據(jù)索引和搜索的整個流程。
這一部分從代碼包結(jié)構(gòu)上可以分為:index, indices及l(fā)ucene(common)幾個部分。index包中的代碼主要是各個功能對應(yīng)于lucene的底層操作,它們的操作對象是index的shard,是elasticsearch對lucene各個功能的擴展和封裝。indices部分是對index部分功能的封裝,集群對于底層索引的操作多數(shù)通過這一部分提供的接口來進行。common包下的lucene部分代碼主要是對于索引一些讀操作(索引級別)的封裝。如讀取索引元數(shù)據(jù),搜索中用到的一些過濾器的實現(xiàn)等。
在index部分通過對lucene的封裝,為es提供了索引操作各個功能的接口。如codec,這一部分是lucene索引寫入的部分。在4.x后這一部分被分開成為單獨的一層,在這里對其進行了封裝。postformat是lucene中倒排表的寫入格式,封裝后通過postingformatservice對外提供。而具體的postform則是由postprovide提供。它的繼承關(guān)系如下所示:

外部通過調(diào)用postingservice的get方法獲取到對應(yīng)的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的方法,而對應(yīng)的postingformat初始化在構(gòu)造方法總實現(xiàn):
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。這一部分的實現(xiàn)多數(shù)都跟codec的實現(xiàn)類似,后面的分析中會對其中的一些做詳細的介紹。對于寫索引的方法都在Engine中。這里封裝了所有對于索引寫操作的方法,后面會詳細分析。
關(guān)于common部分的lucene的功能基本都是對lucene的讀操作,如對于segment信息讀取的方法如下所示:
public static SegmentInfos readSegmentInfos(Directory directory) throws IOException {
final SegmentInfos sis = new SegmentInfos();
sis.read(directory);
return sis;
}直接調(diào)用了lucene的segmentInfos類讀取segment信息。這一部分在后面會單獨分析,這里只是簡單介紹一下。
index部分是shard基本的接口,這里的操作都是針對于單個機器單個shard(lucene index)的操作,不涉及集群。而indice部分則通過封裝index的相關(guān)功能為集群對于index的操作提供了相關(guān)接口。如這里的store部分,只是提供了一個實現(xiàn)類IndiceStore,它的實現(xiàn)如下所示。

它實現(xiàn)了多個handle類用于處理來自集群的相關(guān)請求。跟之前結(jié)束的handler一樣,這些內(nèi)部類會接收處理屬于本節(jié)點的請求,轉(zhuǎn)發(fā)屬于本節(jié)點請求到對應(yīng)節(jié)點。
以上就是elasticsearch數(shù)據(jù)(index)部分的代碼結(jié)構(gòu)。這里只是簡單的概述,后面會對對應(yīng)的部分進行詳細分析,更多關(guān)于elasticsearch索引index數(shù)據(jù)功能的資料請關(guān)注腳本之家其它相關(guān)文章!
- elasticsearch索引創(chuàng)建create?index集群matedata更新
- elasticsearch索引的創(chuàng)建過程index?create邏輯分析
- elasticsearch索引index之merge底層機制的合并講解
- elasticsearch索引index之Mapping實現(xiàn)關(guān)系結(jié)構(gòu)示例
- elasticsearch索引index之engine讀寫控制結(jié)構(gòu)實現(xiàn)
- elasticsearch索引index之Translog數(shù)據(jù)功能分析
- elasticsearch源碼分析index?action實現(xiàn)方式
- elasticsearch索引index之put?mapping的設(shè)置分析
相關(guān)文章
java正則表達式匹配網(wǎng)頁所有網(wǎng)址和鏈接文字的示例
這篇文章主要介紹了java正則表達式匹配網(wǎng)頁所有網(wǎng)址和鏈接文字java正則表達式匹配,需要的朋友可以參考下2014-03-03
Java 內(nèi)存模型中的happen-before關(guān)系詳解
這篇文章主要為大家介紹了Java 內(nèi)存模型中的happen-before關(guān)系示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10
教你用MAT工具分析Java堆內(nèi)存泄漏問題的解決方法
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著如何使用MAT工具分析Java堆內(nèi)存泄漏問題的解決方法展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下2021-06-06
java中處理json各種各樣的轉(zhuǎn)換方法(推薦)
下面小編就為大家分享一篇java中處理json各種各樣的轉(zhuǎn)換方法小結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-11-11
SpringBoot實現(xiàn)Logback輸出日志到Kafka方式
本文介紹了如何在SpringBoot應(yīng)用中通過自定義Appender實現(xiàn)Logback輸出日志到Kafka,包括配置maven依賴、Kafka工具類和logback.xml配置2025-02-02
Java單表實現(xiàn)評論回復(fù)功能(多種實現(xiàn)方式)
這篇文章主要介紹了Java單表實現(xiàn)評論回復(fù)功能,大家都知道評論功能有多種實現(xiàn)方式,本文逐一給大家詳細講解,需要的朋友可以參考下2023-03-03

