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. 和菜鸟一起学linux之upnp协议的学习记录

    UPnP全名是Universal Plug and Play,主要是微软在推行的一个标准.简单的来说,UPnP 最大的愿景就是希望任何设备只要一接上网络,所有在网络上的设备马上就能知道有新设备加入,这 ...

  2. Django之admin的使用和源码剖析

    admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTALLE ...

  3. Android studio统计项目总行数

    有时候在项目开发中会用到统计项目的总行数功能,今天就教大家如何利用studio进行总行数的统计: 1.打开要统计总行数的项目,按住Ctrl+Shift+A(或者点击导航栏的Help->Find ...

  4. spring的优缺点

    它是一个开源的项目,而且目前非常活跃:它基于IoC(Inversion of Control,反向控制)和AOP的构架多层j2ee系统的框架,但它不强迫 你必须在每一层 中必须使用Spring,因为它 ...

  5. AS3中的mouseEnabled与mouseChild

    InteractiveObject类的一个属性,InteractiveObject类是用户可以使用鼠标和键盘与之交互的所有显示对象的抽象基类.我们不能直接实例化InteractiveObject类.m ...

  6. oracle 11g杀掉锁的sql

    oracle 11g杀掉锁的sql [引用 2013-3-6 17:19:12]     字号:大 中 小 --查询出出现锁的session_idselect session_id from v$lo ...

  7. Day13 CSS的与应用

    老师博客:http://www.cnblogs.com/yuanchenqi/articles/6856399.html 1,CSS选择器的应用: CSS规则有两个主要部分构成:选择器,以及一条或多条 ...

  8. Ocelot中文文档-Raft(实验功能不能用于生产环境)

    Ocelot最近整合了Rafty,这是我在去年一直研究的Raft的一个实现. 这个项目实验性非常强,所以在我认为它没问题之前,请不要在生产环境中使用Ocelot的这个功能. Raft是一种分布式一致性 ...

  9. 如何确保API的安全性

    目标: 定义API安全性要求 使用security scheme来应用资源和方法级策略 定义API的自定义security scheme 将OAuth2.0外部供应商策略应用到资源方法 为API定义一 ...

  10. JQuery(三)-- AJAX的深入理解以及JQuery的使用

    HTTP HTTP http: 超文本传输协议.特点:  简单.快速.灵活.无状态.无连接 URL: 统一资源定位符. 组成:协议名://主机IP:端口号/项目资源地址?传递参数的键值对#锚点 ①ip ...