這里我們就引出了一個(gè)概念,也是我們今天的要剖析的重點(diǎn) -?倒排索引。也是 ES 的核心知識(shí)點(diǎn)。
如果你了解 ES 應(yīng)該知道,ES 可以說是對(duì) Lucene 的一個(gè)封裝,里面關(guān)于倒排索引的實(shí)現(xiàn)就是通過 lucene 這個(gè) jar 包提供的 API 實(shí)現(xiàn)的,所以下面講的關(guān)于倒排索引的內(nèi)容實(shí)際上都是 lucene 里面的內(nèi)容。
三、倒排索引
首先我們還不能忘了我們之前提的搜索需求,先看下建立倒排索引之后,我們上述的查詢需求會(huì)變成什么樣子,
這樣我們一輸入“前”,借助倒排索引就可以直接定位到符合查詢條件的古詩(shī)。
當(dāng)然這只是一個(gè)很大白話的形式來(lái)描述倒排索引的簡(jiǎn)要工作原理。在 ES 中,這個(gè)[倒排索引是具體是個(gè)什么樣的](()
1. 幾個(gè)概念
在進(jìn)入下文之前,先描述幾個(gè)前置概念。
term
關(guān)鍵詞這個(gè)東西是我自己的講法,在 ES 中,關(guān)鍵詞被稱為 term。
postings list
還是用上面的例子,{靜夜思, 望廬山瀑布}
是 “前” 這個(gè) term 所對(duì)應(yīng)列表。在 ES 中,這些被描述為所有包含特定 term 文檔的 id 的集合。由于整型數(shù)字 integer 可以被高效壓縮的特質(zhì),integer 是最適合放在 postings list 作為文檔的唯一標(biāo)識(shí)的,ES 會(huì)對(duì)這些存入的文檔進(jìn)行處理,轉(zhuǎn)化成一個(gè)唯一的整型 id。
再說下這個(gè) id 的范圍,在存儲(chǔ)數(shù)據(jù)的時(shí)候,在每一個(gè) shard 里面,ES 會(huì)將數(shù)據(jù)存入不同的 segment,這是一個(gè)比 shard 更小的分片單位,這些 segment 會(huì)定期合并。在每一個(gè) segment 里面都會(huì)保存最多 2^31 個(gè)文檔,每個(gè)文檔被分配一個(gè)唯一的 id,從0
到(2^31)-1
。
相關(guān)的名詞都是 ES 官方文檔給的描述,后面參考材料中都可以找到出處。
2. 索引內(nèi)部結(jié)構(gòu)
上面所描述的倒排索引,僅僅是一個(gè)很粗糙的模型。真的要在實(shí)際生產(chǎn)中使用,當(dāng)然還差的很遠(yuǎn)。
在實(shí)際生產(chǎn)場(chǎng)景中,比如 ES 最常用的日志分析,日志內(nèi)容進(jìn)行分詞之后,可以得到多少的 term?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-404667.html
那么如何快速的在海量 term 中查詢到對(duì)應(yīng)的 term 呢?遍歷一遍顯然文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-404667.html
到了這里,關(guān)于Elasticsearch 如何做到快速檢索 - 倒排索引的秘密的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!