天天看点

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

继续阅读