天天看點

wukong引擎源碼分析之索引——part 1 倒排清單本質是有序數組存儲

searcher.IndexDocument(0, types.DocumentIndexData{Content: "此次百度收購将成中國網際網路最大并購"})

engine.go中的源碼實作:

<a></a>

而其中:

将請求發送給segmenterChannel,其定義:

而接受請求處理的代碼在segmenter_worker.go裡:

上面代碼的作用就是在統計詞頻和單詞位置(注意:tag也是作為搜尋的單詞,不過其詞頻是0,而無法參與tf-idf計算),并封裝為indexerRequest,發送給engine.indexerAddDocumentChannels[request.shard]

------------------------------------------------

補充一點,上述代碼之是以得以執行是因為在:

searcher = engine.Engine{}

// 初始化

searcher.Init(types.EngineInitOptions{SegmenterDictionaries: "../data/dictionary.txt"})

searcher的初始化代碼裡有這麼一段:

接收indexerRequest的代碼在index_worker.go裡:

-----------------------------------------------

而上述函數之是以得以執行,還是因為在searcher的初始化函數裡有這麼一句:

其中,engine.indexers[shard].AddDocument(request.document, request.dealDocInfoChan)的核心代碼在indexer.go裡:

查找docID是否存在于倒排清單的時候是二分:

TODO,待分析:indexer裡索引的細節,以及評分相關的邏輯:

engine.rankerAddDocChannels[request.shard] &lt;- rankerRequest

本文轉自張昺華-sky部落格園部落格,原文連結:http://www.cnblogs.com/bonelee/p/6528556.html,如需轉載請自行聯系原作者

繼續閱讀