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. mac os x下的程序快速切换快捷键

    按下command + tab键正向切换程序 按下command + shift + tab键反向切换程序 按下command + tab键选择程序后,仍然按下command键不放,然后按下optio ...

  2. rails关于user密码hash的重构

    rails应用程序中一个model名为User,其中存放了用户名和对应的密码.User模式类中建立了1个虚拟属性password用来存放用户实际输入的密码;而最终数据库的密码需要计算password的 ...

  3. webpack 4.x 遇到的错误

    由于之前重装电脑,很多之前的小Demo 现在都跑不起来.特别是webpack一直在报错. webpack 安装node 全局安装webpack,webpack-cli(一定要全局安装) 项目初始化 w ...

  4. access窗口标签居中

    Private Sub Form_Resize() On Error Resume Next Me.Width = Me.InsideWidth Me.Section(acDetail).Height ...

  5. CentOS6.5 64位下安装部署Ansible

    这里使用的软件包为一下版本 Python-2.7.12.tgz pip-9.0.1.tar.gz ansible-2.2.0.0.tar.gz 其他依赖包使用pip方式安装 方便说明做以下设定: 控制 ...

  6. springboot + mybatis 前后端分离项目的搭建 适合在学习中的大学生

    人生如戏,戏子多半掉泪! 我是一名大四学生,刚进入一家软件件公司实习,虽说在大学中做过好多个实训项目,都是自己完成,没有组员的配合.但是在这一个月的实习中,我从以前别人教走到了现在的自学,成长很多. ...

  7. 使用FFmpeg捕获一帧摄像头图像

    最近在研究FFmpeg,比较惊讶的是网上一大堆资料都是在说如何从已有的视频中截取一帧图像,却很少说到如何直接从摄像头中捕获一帧图像,其实我一直有个疑问,就是在Linux下,大家是用什么库来采集摄像头的 ...

  8. View requires API level 14 (current min is 8): <GridLayout>

    在学习android的过程中,出现这个错误的是否,可以build clean解决

  9. Webpack的配置与使用

    一.什么是Webpack?     WebPack可以看做是模块打包机.用于分析项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),将 ...

  10. Hadoop的多节点集群启动,唯独没有namenode进程?(血淋淋教训,一定拍快照)(四十五)

    前言 大家在搭建hadoop集群时,第一次格式化后,一路要做好快照.别随便动不动缺少什么进程,就来个格式化. 问题描述:启动hadoop时报namenode未初始化:java.io.IOExcepti ...