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,如需转载请自行联系原作者