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