lucene update流程原始碼分析

2022-07-05 22:39:15 字數 1467 閱讀 2327

update操作buffer到documentswriterdeletequeue裡,flush時處理deletes.

documentswriterdeletequeue使用global deleteslice和dwpt deleteslice儲存deletes。

dwpt deleteslice

用來更新dwpt繫結的unflushed segment中docid小於docidupto的docs.

buffer

indexwriter.updatedocuments更新docs時,update term轉化成delete termnode.

dwpt updatedocuments時,consumer.processdocument之前, 記錄docsinrambefore作為delete docidupto.

consumer.processdocument把new docs(es需把完整的docs傳入)寫入buffered segment.

finishdocuments時, 將deletenode加入dwpt deleteslice和global deleteslice.

dwpt flush該segment時,傳入該segment bufferedupdates,構造private segment的frozenbufferedupdates。

global deleteslice

用來更新flushed segments.

buffer

indexwriter.deletedocuments by terms, deletedocuments by queries, updatedocvalues時,

termarraynode,queryarraynode, docvaluesupdatesnode直接add到global deleteslice.

indexwriter.updatedocuments的delete termnode既加入dwpt deleteslice,也加入global deleteslice.

global deleteslice中deletenode的docidupto為max int.

buffer過大,或prepareflush時,將globalbufferedupdates構造global frozenbufferedupdates。

delete by terms, 直接刪除包含exact terms的docs.

遍歷segments,直接讀取term的postings. 遍歷postings刪除doc。

delete by queries, 走query流程,phrasequery等會analyze, normalize.

frozenbufferedupdates.

參考:

lucene8.7.0

jdbc基本流程(注入資料來源)

1,在實現類中注入資料來源 該資料來源為在spring 配置檔案中配置好的資料來源 e,g 注入資料來源 resource private datasource datasource 2,jdbc基本流程 1,得到資料來源 2,得到connection 3,得到preparedstatement 4...

簡說django CBV執行流程,與部分原始碼分析

cbv class base views 就是在檢視裡使用類處理請求。python是乙個物件導向的程式語言,如果只用函式來開發,有很多物件導向的優點就錯失了 繼承 封裝 多型 所以django在後來加入了class based view。可以讓我們用類寫view。這樣做的優點主要下面兩種 提高了 的...

HashMap 的 get 方法的流程分析(原始碼)

流程首先根據 hash 方法獲取到 key 的 hash 值 然後通過 hash length 1 的方式獲取到 key 所對應的node陣列下標 length對應陣列長度 首先判斷此結點是否為空,是否就是要找的值,是則返回空,否則進入第二個結點。接著判斷第二個結點是否為空,是則返回空,不是則判斷此...