package types

import (
    "log"
    "runtime"
)

var (
    // EngineInitOptions的默认值
    defaultNumSegmenterThreads       = runtime.NumCPU()
    defaultNumShards                 = 2
    defaultIndexerBufferLength       = runtime.NumCPU()
    defaultNumIndexerThreadsPerShard = runtime.NumCPU()
    defaultRankerBufferLength        = runtime.NumCPU()
    defaultNumRankerThreadsPerShard  = runtime.NumCPU()
    defaultDefaultRankOptions        = RankOptions{
        ScoringCriteria: RankByBM25{},
    }
    defaultIndexerInitOptions = IndexerInitOptions{
        IndexType:      FrequenciesIndex,
        BM25Parameters: &defaultBM25Parameters,
    }
    defaultBM25Parameters = BM25Parameters{
        K1: 2.0,
        B:  0.75,
    }
    defaultPersistentStorageShards = 8
)

type EngineInitOptions struct {
    // 是否使用分词器
    // 默认使用,否则在启动阶段跳过SegmenterDictionaries和StopTokenFile设置
    // 如果你不需要在引擎内分词,可以将这个选项设为true
    // 注意,如果你不用分词器,那么在调用IndexDocument时DocumentIndexData中的Content会被忽略
    NotUsingSegmenter bool

    // 半角逗号分隔的字典文件,具体用法见
    // sego.Segmenter.LoadDictionary函数的注释
    SegmenterDictionaries string

    // 停用词文件
    StopTokenFile string

    // 分词器线程数
    NumSegmenterThreads int

    // 索引器和排序器的shard数目
    // 被检索/排序的文档会被均匀分配到各个shard中
    NumShards int

    // 索引器的信道缓冲长度
    IndexerBufferLength int

    // 索引器每个shard分配的线程数
    NumIndexerThreadsPerShard int

    // 排序器的信道缓冲长度
    RankerBufferLength int

    // 排序器每个shard分配的线程数
    NumRankerThreadsPerShard int

    // 索引器初始化选项
    IndexerInitOptions *IndexerInitOptions

    // 默认的搜索选项
    DefaultRankOptions *RankOptions

    // 是否使用持久数据库,以及数据库文件保存的目录和裂分数目
    UsePersistentStorage    bool
    PersistentStorageFolder string
    PersistentStorageShards int
}

// 初始化EngineInitOptions,当用户未设定某个选项的值时用默认值取代
func (options *EngineInitOptions) Init() {
    if !options.NotUsingSegmenter {
        if options.SegmenterDictionaries == "" {
            log.Fatal("字典文件不能为空")
        }
    }

    if options.NumSegmenterThreads == 0 {
        options.NumSegmenterThreads = defaultNumSegmenterThreads
    }

    if options.NumShards == 0 {
        options.NumShards = defaultNumShards
    }

    if options.IndexerBufferLength == 0 {
        options.IndexerBufferLength = defaultIndexerBufferLength
    }

    if options.NumIndexerThreadsPerShard == 0 {
        options.NumIndexerThreadsPerShard = defaultNumIndexerThreadsPerShard
    }

    if options.RankerBufferLength == 0 {
        options.RankerBufferLength = defaultRankerBufferLength
    }

    if options.NumRankerThreadsPerShard == 0 {
        options.NumRankerThreadsPerShard = defaultNumRankerThreadsPerShard
    }

    if options.IndexerInitOptions == nil {
        options.IndexerInitOptions = &defaultIndexerInitOptions
    }

    if options.IndexerInitOptions.BM25Parameters == nil {
        options.IndexerInitOptions.BM25Parameters = &defaultBM25Parameters
    }

    if options.DefaultRankOptions == nil {
        options.DefaultRankOptions = &defaultDefaultRankOptions
    }

    if options.DefaultRankOptions.ScoringCriteria == nil {
        options.DefaultRankOptions.ScoringCriteria = defaultDefaultRankOptions.ScoringCriteria
    }

    if options.PersistentStorageShards == 0 {
        options.PersistentStorageShards = defaultPersistentStorageShards
    }
}

engine_init_options.go的更多相关文章

  1. index_init_oprions.go

    {         options.DocCacheSize = defaultDocCacheSize     } }

随机推荐

  1. sort list(给链表排序)

    Sort a linked list in O(n log n) time using constant space complexity. 题目要求使用O(nlogn)时间复杂度,可以考虑使用归并排 ...

  2. db2 查新索引 主键 sql

    1.查询主键 select * from sysibm.syskeycoluse where tbname='...' 2.查询索引 select * from sysibm.indexs where ...

  3. windows下mongodb安装详解

    1.打开官网https://www.mongodb.com/download-center?jmp=nav#community 注:这里小伙伴们可是开启下FQ软件psiphon 3下载(不开启FQ好像 ...

  4. jsonp学习

    使用 JSONP 实现跨域通信:http://www.ibm.com/developerworks/cn/web/wa-aj-jsonp1/

  5. linux服务器上部署项目,同时运行两个或多个tomcat

    在阿里云服务器上部署项目的时候,想使用阿里云提供的负载均衡服务并创建两个监听(如图), 但需要一台服务器提供两个端口,于是就请教前辈并查询资料,得知: 一台服务器提供两个端口,有两种方式: 1.一个t ...

  6. hadoop环境运行程序出现 Retrying connect to server 问题

    程序运行时出现如下问题: 从网上查资料,有说重启format的..有说/etc/hosts出问题的... 反正都试了一遍..还是有这个问题 后来看日志,发现问题是访问服务器9001端口访问不到..开始 ...

  7. angular2 安装 打包成发布项目过程

    安装之前要有typings和typescript全局已经安装好 安装命令新版为npm install -g @angular/cli 原来的angular-cli为老版的,我安装失败了 安装之后新建一 ...

  8. python笔记:#012#函数

    函数基础 目标 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 01. 函数的快速体验 1.1 快速体验 所谓函数,就是把 具有独立功能的代码块 组织为一个 ...

  9. Centos7下安装MySql

    1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动MariaDB systemctl start maria ...

  10. AUTOSAR的前期开源实现Arctic Core

    AUTOSAR (AUTomotive Open System ARchitecture) is a worldwide development partnership of vehicle manu ...