Skip to content

aosen/search

Repository files navigation

search

Golang实现的搜索引擎

##使用过程中遇到任何问题,请联系QQ: 316052486

详细用法见: github.com/aosen/searchserver

##思维脑图

思维脑图

#几个重要结构体 ##搜索引擎初始化结构体

type EngineInitOptions struct {
	// 半角逗号分隔的字典文件,具体用法见
    //分词器接口
	Segmenter SearchSegmenter

	// 停用词文件
	StopTokenFile string

	// 分词器线程数
	NumSegmenterThreads int

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

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

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

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

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

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

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

	// 是否使用持久数据库,以及数据库文件保存的目录和裂分数目
	UsePersistentStorage    bool
    //索引持久化
    //pipline接口
    SearchPipline SearchPipline
	//索引器生成方法
	CreateIndexer func() SearchIndexer
}

##建立索引结构体

type DocumentIndexData struct {
	// 文档全文(必须是UTF-8格式),用于生成待索引的关键词
	Content string

	// 文档的关键词
	// 当Content不为空的时候,优先从Content中分词得到关键词。
	// Tokens存在的意义在于绕过内置的分词器,在引擎外部
	// 进行分词和预处理。
	Tokens []TokenData

	// 文档标签(必须是UTF-8格式),比如文档的类别属性等,这些标签并不出现在文档文本中
	Labels []string

	// 文档的评分字段,可以接纳任何类型的结构体
	Fields interface{}
}

##建立索引

func (engine *Engine) IndexDocument(docId uint64, data DocumentIndexData)

##搜索请求结构体

type SearchRequest struct {
	// 搜索的短语(必须是UTF-8格式),会被分词
	// 当值为空字符串时关键词会从下面的Tokens读入
	Text string

	// 关键词(必须是UTF-8格式),当Text不为空时优先使用Text
	// 通常你不需要自己指定关键词,除非你运行自己的分词程序
	Tokens []string

	// 文档标签(必须是UTF-8格式),标签不存在文档文本中,但也属于搜索键的一种
	Labels []string

	// 当不为空时,仅从这些文档中搜索
	DocIds []uint64

	// 排序选项
	RankOptions *RankOptions

	// 超时,单位毫秒(千分之一秒)。此值小于等于零时不设超时。
	// 搜索超时的情况下仍有可能返回部分排序结果。
	Timeout int
}

##搜索查询符合条件的文档

func (engine *Engine) Search(request SearchRequest) (output SearchResponse)

##搜索引擎返回结构体

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

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

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

#开发进度

  • 2015-01-14 增加pipline对mysql的支持
  • 2015-01-08 目前打分器只支持BM25, 排序必须依靠BM25进行排序,接下来需要让引擎支持更多的打分规则。
  • 2015-01-06 打分器接口话 done
  • 2015-01-06 排序器接口话 done
  • 2015-01-06 索引器接口话 done
  • 2015-12-17 分词器接口化 done
  • 2015-12-17 优化目录结构 done
  • 2015-12-17 优化搜索效率 done
  • 2015-12-04 增加索引存储方式: mongodb done

About

Golang实现的搜索引擎

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages