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. 用windbg显示特定进程虚拟地址的方法

    1 必须使用Livekd.exe启动windbg 2 !process PID 3 找到PROCESS对象的地址:PROCADDR 4 找到进程的DirBase 5 r cr3 = DirBase 6 ...

  2. window配置mongodb集群(副本集)

    参数解释: dbpath:数据存放目录 logpath:日志存放路径 pidfilepath:进程文件,有利于关闭服务 logappend:以追加的方式记录日志(boolean值) replSet:副 ...

  3. jQuery如何停止元素的animate动画,还有怎样判断是否处于动画状态

    jquery的animation会自动进入队列,就出现了一个问题,这些动画会一一执行完成,而我们实际的本意是当鼠标移开的时候动画即终止. 停止元素的动画方法:stop()语法结构:stop([clea ...

  4. C 标准库基础 IO 操作总结

    其实输入与输出对于不管什么系统的设计都是异常重要的,比如设计 C 接口函数,首先要设计好输入参数.输出参数和返回值,接下来才能开始设计具体的实现过程.C 语言标准库提供的接口功能很有限,不像 Pyth ...

  5. plsql developer 使用 oracle instantclient的安装和配置

    本文由ibyedo1贡献 1.下载 oracle instantclient basic package,在 oracle 官网下载就可以,地址如下: http://www.oracle.com/te ...

  6. access窗体主体居中

    Private Sub Form_Load()DoCmd.Echo False Dim x, y As IntegerDoCmd.Maximizex = Me.WindowWidthy = Me.Wi ...

  7. orderBy新写法

    通常,我们处理排序规则的处理方法是在sql 语句中order by create_time desc, 但是这时我们需要从控制器中一步步找到该方法,操作多. 我们试着将业务逻辑拆分到控制器 中, 把排 ...

  8. linux下安装vld

    将vld-0.10.1下载并传到/home/wangxiaolan/tar 1.进行解压 tar zxvf vld-0.10.tgz 2.进入 cd vld-0.10.1 3.usr/local/ph ...

  9. php添加日志文件

    记录一下. 有时候写测试代码的时候,不习惯直接在屏幕上输出反馈,那么可以配置日志文件,把需要输出的内容追加到日志文件里面,就很方便. Php自带日志系统,可以参考网上的博客配置. 我要说的是,如果你的 ...

  10. C# SqlBulkCopy数据批量入库

    准备条件:20万+数据 界面设计使用的WPF. 没有对比就没有伤害,以下是我两种方式导入数据案例. 运行 结果对比: 首先使用一般sql语句导入,因为时间原因,我就没有等待程序执行完,但是我记录了大约 ...