您好,登錄后才能下訂單哦!
本篇內容介紹了“lucene倒排索引的存儲方式是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
lucene的倒排索引存儲包括詞的索引數據存儲、詞的位置存儲以及寫入過程,這3個部分是比較復雜的準備分開描述,先談談位置的存儲方式:
詞的位置具體包括每篇文檔中的詞頻、位置以及附帶的payload(這里先忽略掉norm信息的存儲),這3塊lucene分別采用了3個輸出流進行寫入,具體寫入過程如下:
1、對于每個詞而言會記錄該次所屬的文檔ID以及在該文檔中的詞頻,由于文檔ID已經排過序所以寫入時會進行差值壓縮存儲,而文檔詞頻會直接存儲,并且每128條記錄進行分塊壓縮存儲;
2、令Doc=abc|123;bcd;def,每寫完所屬文檔ID以及詞頻,就會寫入該詞在文檔中的每個位置(指文檔經過分詞后的第n個詞(分號為詞的分隔符def為第3個詞))、起始和結束的偏移量(指文檔未分詞時的開始和結束位置(bcd的開始和結束位置分別為8和11),通過偏移量可以算出詞、payload以及payload分隔符的總長度,所以這個長度不要認為是詞的長度和payload的長度(123為payload,對于abc的開始和結束位置分別為0和7))、每個詞附帶的payload信息。由于位置信息、偏移量已經排過序所以會按照差值壓縮存儲。位置信息會按照128條記錄分塊壓縮存儲到單獨的文件中。payload的長度信息以及偏移量也按照128條記錄分塊壓縮存儲到單獨的文件中而payload的內容并沒有壓縮而是直接寫入同一個文件中。
對于詞頻按照128條記錄分塊壓縮是因為包含同一個詞的文檔可能非常多,極端情況下是所有文檔都有。除了壓縮還需要提供能夠隨機訪問每篇文檔位置信息的功能,因此對位置信息又建立了一層索引結構,而且是每個詞對應一套索引。
索引需要記錄的信息包括:上個塊中最后一篇文檔的ID,上個位置塊的文件指針,上個payload塊的文件指針,剩余未壓縮的位置信息個數以及剩余未壓縮的payload數組長度。(這塊索引內容還是放到下篇詳細說明)
當寫完一個term時,對于剩余未達到128條記錄的內容,文檔ID和詞頻按照vint方式壓縮,位置、payload長度和偏移量同樣按照vint方式壓縮而payload內容直接寫入。
“lucene倒排索引的存儲方式是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。