freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

17lucene學(xué)習(xí)總結(jié)之七:lucene搜索過程解析(2)-資料下載頁

2024-10-28 09:09本頁面

【導(dǎo)讀】它來找到此索引文件中所有的段,并打開這些段。由于segment_N是整個索引中總的元數(shù)據(jù),因而正確的選擇segment_N更加重要。然而有時候為了使得索引能夠保存在另外的存儲系統(tǒng)上,有時候需要用NFSmount. 一方面,列出所有的segment_N,并取出其中的最大的N,設(shè)為genA. 在genA和genB中去較大者,為gen,并用此gen構(gòu)造要打開的segments_N的文件。從segment_N中讀出段的元數(shù)據(jù)信息,生成SegmentInfos. SegmentInfo構(gòu)造函數(shù)如下:。其實不用多介紹,看過Lucene學(xué)習(xí)總結(jié)之三:Lucene的索引文件格式一章,就很容易明白。;//生成用于讀取存儲域和詞向量的對象。

  

【正文】 readBufferSize 1024 ref SegmentReader$Ref (id=573) segment _2 storeCFSReader null termsIndexDivisor 1 termVectorsReaderOrig null tis TermInfosReader (id=574) tisNoIndex null deletedDocs null deletedDocsDirty false deletedDocsRef null fieldsReaderLocal SegmentReader$FieldsReaderLocal (id=524) hasChanges false norms HashMapK,V (id=525) normsDirty false pendingDeleteCount 0 readBufferSize 1024 readOnly true refCount 1 rollbackDeletedDocsDirty false rollbackHasChanges false rollbackNormsDirty false rollbackPendingDeleteCount 0 si SegmentInfo (id=470) singleNormRef SegmentReader$Ref (id=527) singleNormStream CompoundFileReader$CSIndexInput (id=528) termVectorsLocal CloseableThreadLocalT (id=530) synced HashSetE (id=485) termInfosIndexDivisor 1 writeLock null writer null 從上面的過程來看, IndexReader 有以下幾個特性: ? 段元數(shù)據(jù)信息已經(jīng)被讀入到內(nèi)存中,因而索引文件夾中因為新添加 文檔而新增加的段對已經(jīng)打開的 reader 是不可見的。 ? .del 文件已經(jīng)讀入內(nèi)存,因而其他的 reader 或者 writer 刪除的文檔對打開的reader 也是不可見的。 ? 打開的 reader 已經(jīng)有 inputstream 指向 cfs 文件,從段合并的過程我們知道,一個段文件從生成起就不會改變,新添加的文檔都在新的段中,刪除的文檔都在 .del 中,段之間的合并是生成新的段,而不會改變舊的段,只不過在段的合并過程中,會將舊的段文件刪除,這沒有問題,因為從操作系統(tǒng)的角度來講,一旦一個文件被打開一個 inputstream 也即打 開了一個文件描述符,在內(nèi)核中,此文件會保持 reference count,只要 reader 還沒有關(guān)閉,文件描述符還在,文件是不會被刪除的,僅僅reference count 減一。 ? 以上三點保證了 IndexReader 的 snapshot 的性質(zhì),也即一個 IndexReader 打開一個索引,就好像對此索引照了一張像,無論背后索引如何改變,此 IndexReader 在被重新打開之前,看到的信息總是相同的。 ? 嚴(yán)格的來講, Lucene 的文檔號僅僅對打開的某個 reader 有效,當(dāng)索引發(fā)生了變化,再打開另外一個 reader 的時候,前面 reader 的文檔 0 就不一定是后面 reader 的文檔 0 了,因而我們進(jìn)行查詢的時候,從結(jié)果中得到文檔號的時候,一定要在 reader關(guān)閉之前應(yīng)用,從存儲域中得到真正能夠唯一標(biāo)識你的業(yè)務(wù)邏輯中的文檔的信息,如 url, md5 等等,一旦 reader 關(guān)閉了,則文檔號已經(jīng)無意義,如果用其他的 reader查詢這些文檔號,得到的可能是不期望的文檔。 、打開 IndexSearcher 代碼為: IndexSearcher searcher = new IndexSearcher(reader)。 其過程非 常簡單: private IndexSearcher(IndexReader r, boolean closeReader) { reader = r。 //當(dāng)關(guān)閉 searcher 的時候,是否關(guān)閉其 reader = closeReader。 //對文檔號進(jìn)行編號 ListIndexReader subReadersList = new ArrayListIndexReader()。 gatherSubReaders(subReadersList, reader)。 subReaders = (new IndexReader[()])。 docStarts = new int[]。 int maxDoc = 0。 for (int i = 0。 i 。 i++) { docStarts[i] = maxDoc。 maxDoc += subReaders[i].maxDoc()。 } } IndexSearcher 表面上看起來好像僅僅是 reader 的一個封裝,它的很多函數(shù)都是直接調(diào)用reader 的相應(yīng)函數(shù),如: int docFreq(Term term), Document doc(int i), int maxDoc()。然而它提供了兩個非常重要的函數(shù): ? void setSimilarity(Similarity similarity),用戶可以實現(xiàn)自己的 Similarity對象,從而影響搜索過程的打分,詳見 有關(guān) Lucene 的問題 (4):影響 Lucene 對文檔打分的四種方式 ? 一系列 search 函數(shù),是搜索過程的關(guān)鍵,主要負(fù)責(zé)打分的計算和倒排表的合并。 因而在某些應(yīng)用之中,只想得到某個詞的倒排表的時候,最好不要用 IndexSearcher,而直接用 (Term term),則省去了打分的計算。
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1