package engine

import (
    "github.com/huichen/wukong/types"
)

type rankerAddDocRequest struct {
    docId  uint64
    fields interface{}
}

type rankerRankRequest struct {
    docs                []types.IndexedDocument
    options             types.RankOptions
    rankerReturnChannel chan rankerReturnRequest
    countDocsOnly       bool
}

type rankerReturnRequest struct {
    docs    types.ScoredDocuments
    numDocs int
}

type rankerRemoveDocRequest struct {
    docId uint64
}

func (engine *Engine) rankerAddDocWorker(shard int) {
    for {
        request := <-engine.rankerAddDocChannels[shard]
        engine.rankers[shard].AddDoc(request.docId, request.fields)
    }
}

func (engine *Engine) rankerRankWorker(shard int) {
    for {
        request := <-engine.rankerRankChannels[shard]
        if request.options.MaxOutputs != 0 {
            request.options.MaxOutputs += request.options.OutputOffset
        }
        request.options.OutputOffset = 0
        outputDocs, numDocs := engine.rankers[shard].Rank(request.docs, request.options, request.countDocsOnly)
        request.rankerReturnChannel <- rankerReturnRequest{docs: outputDocs, numDocs: numDocs}
    }
}

func (engine *Engine) rankerRemoveDocWorker(shard int) {
    for {
        request := <-engine.rankerRemoveDocChannels[shard]
        engine.rankers[shard].RemoveDoc(request.docId)
    }
}

ranker_worker.go的更多相关文章

  1. wukong引擎源码分析之索引——part 3 文档评分 无非就是将docid对应的fields信息存储起来,为搜索结果rank评分用

    之前的文章分析过,接受索引请求处理的代码在segmenter_worker.go里: func (engine *Engine) segmenterWorker() { for { request : ...

随机推荐

  1. 恶补web之三:http学习

    http是超文本传输协议的简称,该协议设计目的是保证客户机与服务器之间的通信.http的工作方式为客户机与服务器之间的请求-应答协议. 一般来说web浏览器是客户端,计算机上的网络应用程序可能作为服务 ...

  2. 自定义UICollectionViewLayout 布局实现瀑布流

    自定义 UICollectionViewLayout 布局,实现瀑布流:UICollectionView和UICollectionViewCell 另行创建,这只是布局文件, 外界控制器只要遵守协议并 ...

  3. PLSQL 创建自定义函数注意事项

    2017-6-8周四,今天遇到的需求是,从数据库中查找出某张表的某些数据,并将这些数据做简单的加减运算再得到结果集,没有思路,后来问辉哥,给我的建议是给这些运算封装成一个SQL函数,select选择字 ...

  4. FFPLAY的原理(六)

    显示视频 这就是我们的视频线程.现在我们看过了几乎所有的线程除了一个--记得我们调用schedule_refresh()函数吗?让我们看一下实际中是如何做的: static void schedule ...

  5. Spring security在MS-SQL下的初始化脚本

    -- create table users( -- username nvarchar(50) not null primary key, -- password nvarchar(50) not n ...

  6. CentOS7安装codeblocks(转载)

    1.安装gcc,需要c和c++两部分,默认安装下,CentOS不安装编译器的,在终端输入以下命令即可 yum install gccyum install gcc-c++ 2.安装gtk2-devel ...

  7. 建站记录:设置apache .htaccess文件给网站添加404错误处理页面

    有些空间服务商会在后台设置中,提供这个选项,可以直观地设置404错误指向的页面,这一点很方便,比如我之前用的阿里云虚拟主机就可以在控制台直接设置. 新租用的香港主机后台没有找到选取文件的地方,只是可以 ...

  8. linux上nginx新建站点

    遇到一个要将后台部分模块剥离出来,重新放到一个新的后台上的问题: 这样一来,就要在服务器上新建站点,but,服务器是linux系统的,不是很熟,经过多方努力,搞定了 在这记录一下,用到的linux命令 ...

  9. 印钞机 V1.0(量化选基总结)

    今年的元旦,在家把之前手工的选基方法完全程序化了.这是我的"印钞机" V1.0. 为什么叫印钞机,详细情况可见下文及最后的总结. 量化选基成果 我的主要基金投资方法其实就是量化选基 ...

  10. unity零基础开始学习做游戏(六)背景给我“滚”~

    -------小基原创,转载请给我一个面子 一望无际的...空旷场景,看着实在是难受,不如添加些背景吧.如果要真的想好好设计关卡背景的话,最好是做一个地图编辑器,不过做开发工具毕竟有点点复杂且枯燥,以 ...