package types

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

type SearchResponse struct {
    // 搜索用到的关键词
    Tokens []string

    // 搜索到的文档,已排序
    Docs []ScoredDocument

    // 搜索是否超时。超时的情况下也可能会返回部分结果
    Timeout bool

    // 搜索到的文档个数。注意这是全部文档中满足条件的个数,可能比返回的文档数要大
    NumDocs int
}

type ScoredDocument struct {
    DocId uint64

    // 文档的打分值
    // 搜索结果按照Scores的值排序,先按照第一个数排,如果相同则按照第二个数排序,依次类推。
    Scores []float32

    // 用于生成摘要的关键词在文本中的字节位置,该切片长度和SearchResponse.Tokens的长度一样
    // 只有当IndexType == LocationsIndex时不为空
    TokenSnippetLocations []int

    // 关键词出现的位置
    // 只有当IndexType == LocationsIndex时不为空
    TokenLocations [][]int
}

// 为了方便排序

type ScoredDocuments []ScoredDocument

func (docs ScoredDocuments) Len() int {
    return len(docs)
}
func (docs ScoredDocuments) Swap(i, j int) {
    docs[i], docs[j] = docs[j], docs[i]
}
func (docs ScoredDocuments) Less(i, j int) bool {
    // 为了从大到小排序,这实际上实现的是More的功能
    for iScore := 0; iScore < utils.MinInt(len(docs[i].Scores), len(docs[j].Scores)); iScore++ {
        if docs[i].Scores[iScore] > docs[j].Scores[iScore] {
            return true
        } else if docs[i].Scores[iScore] < docs[j].Scores[iScore] {
            return false
        }
    }
    return len(docs[i].Scores) > len(docs[j].Scores)
}

search_response.go的更多相关文章

  1. css3学习----transform

    css 2D转换

  2. python爬取微信公众号

    爬取策略 1.需要安装python selenium模块包,通过selenium中的webdriver驱动浏览器获取Cookie的方法.来达到登录的效果 pip3 install selenium c ...

  3. java从ldap中导出数据到ldif文件中

    原创:http://www.cnblogs.com/dqcer/p/7814034.html 导入ldap.jar包,笔者已对下面两个文件测试并通过.若有疑问欢迎留言 LDAPExport.java ...

  4. java导入ldif文件

    网上导入ldif文件的方式都是基于命令,或者相应工具如LDAP Browser \Editor v2.8.2. 但用java去实现这样的功能好像网上很少,于是我参照相应的开源代码并整理了一下,亲自测试 ...

  5. java读取ldif文件并创建新的节点

    所需jar包ldap.jar. jldap-4.3-source.jar http://www.java2s.com/Code/Jar/l/Downloadldapjar.htm 浏览器输入http: ...

  6. 发现了合自己胃口的公众号,但文章太多翻来翻去真麻烦,还好我学了 Python

    现在我们大多数人都会或多或少的关注几个公众号,如果发现一个比较合自己胃口的号 对公众号中的文章一定是每篇必读的. 有时候我们关注到宝藏型公众号时发现其历史文章已经好几百甚至上千篇了,而作者又只对其中自 ...

随机推荐

  1. MOOS学习笔记——多线程

    /* * A simple example showing how to use a comms client */ #include "MOOS/libMOOS/Comms/MOOSAsy ...

  2. 转:<mvc:annotation-driven/>的注解意义

    <mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案.<mvc:annotation-dri ...

  3. vue-cli目录结构

  4. 视频压缩:I帧、P帧、B帧

    /*************************************************************************************************** ...

  5. 【转】火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法

    关于 GCJ-02 和 BD-09 ,请参考 http://developer.baidu.com/map/question.htm#qa0043 . 算法代码如下,其中 bd_encrypt 将 G ...

  6. 3 Steps to Perform SSH Login Without Password Using ssh-keygen & ssh-copy-id

    http://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-s ...

  7. 对于程序员在boss直聘求职的建议

    最近为一个岗位的招聘,在直聘伤刷了三百份简历 0.上传简历最好是PDF,word简历在不同的系统和软件下排版可能会出问题. 1.新职位投得要快,后面投的,有可能看不到. 为了投的命中率,投之前最好看一 ...

  8. 解决Select标签的Option在IE浏览中display:none不生效的问题

    页面的Select标签,需要控制Select的Option不需要显示,根据条件来隐藏某些Option选项. 正常情况下使用hide()就能实现,hide()方法实际是给Option加上display属 ...

  9. 大型EMR电子病历源码三甲医院医疗信息管理系统软件网络版

    详情请点击查看 开发环境 :VS2010 + C# + ORACLE系统简介:1各种记录的书写,并可保留修改痕迹 在各种记录的书写过程中,根据系统提供的首次护理记录.一般护理记录.术前术后护理记录等模 ...

  10. nltk download失败

    之前在台式机win10的系统,python 2.7,用的pycharm执行nltk download(),很顺利.然而到了我的笔记本只是换个一个win8的系统,Python的配置都是一样的,但是这时候 ...