Bleve:来自Couchbase、基于Go语言的全文索引与检索库
dy223 10年前
原文 http://www.infoq.com/cn/news/2015/03/bleve-couchbase-go
Bleve 是一个由 Couchbase 团队基于Go语言开发的索引/索引库,它支持常用的检索和索引功能,如索引、检索、过滤、排序、聚合、高亮等。Bleve包括常见的文本分析组件,且能够使用现有的K/V存储系统进行存储。Bleve具有以下主要特性:
- 支持所有Go数据结构的索引,如JSON 、结构体、Slices、字符串等
- 具有强大、智能的配置功能
- 具有丰富的Field类型,如文本、数字、日期等
- 具有丰富查询类型,如Term、短语、模糊/精确匹配、前缀、逻辑与(Conjunction)、逻辑或(Disjunction)、布尔(Boolean)、数字范围、日期范围等查询
- 具有简单的 查询语法 ,且能够实现复杂的查询
- 具有丰富的接口,且能够实现功能扩展
- 具有易用且高级API能够索引数据模型中的任何对象
- 基于标准的 TF-IDF 加权评分算法
- 支持查询匹配结果的高亮显示
- 支持多种聚合功能(Facet),如能够根据Term、数字范围、日期范围聚合等
- 文本解析组件现已支持众多分析组件,支持将近二十种语言,如丹麦语、荷兰语、英国、法语、德语、泰语、土耳其语等
索引和检索示例如下:
索引示例
message := struct{ Id string From string Body string }{ Id: "example", From: "marty.schoch@gmail.com", Body: "bleve indexing is easy", } mapping := bleve.NewIndexMapping() index, err := bleve.New("example.bleve", mapping) if err != nil { panic(err) } index.Index(message.Id, message)
检索示例
> index, _ := bleve.Open("example.bleve") > query := bleve.NewQueryStringQuery("bleve") > searchRequest := bleve.NewSearchRequest(query) > searchResult, _ := index.Search(searchRequest)
Bleve基于 Apache License Version 2.0 协议开源,其代码托管在 GitHub 。为了减少项目依赖、简化编译与部署,于是,Couchbase团队抛弃了Java环境下的Lucene方案(如Lucene、 Elasticsearch、Solr等),并构建了Bleve。它为开发者提供了一个Go语言环境下的全文检索新方案。读者可以通过官方提供的 Bleve Wiki内容 在线检索实例 以体验Bleve的检索功能效果。更多关于Bleve的内容,请读者查看GitHub提供的 Wiki页面 或其官网。