热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

「GoCN酷Go推荐」​全文检索库bluge

推荐理由提到全文检索库,第一个想到的就是Java实现的lucene,今天介绍一款Golang实现的全文检索库bluge。bluge脱胎于Bleve&#x

推荐理由

提到全文检索库,第一个想到的就是Java实现的lucene,今天介绍一款Golang实现的全文检索库bluge。bluge脱胎于Bleve,是当前Github比较火的搜索引擎项目zinc的底层索引检索库。

功能介绍

bluge索引存储支持内存,本地文件,以及扩展云存储等方式,文档字段类型支持Text, Numeric, Date, Geo Point等。

查询检索支持如下特性:

  1. 支持多种查询方式:term/phrase/match等基本的全文检索,数字/时间范围查询;

  2. 聚合函数:Min/Max/Count/Sum/Avg/Weighted Avg;

  3. 匹配高亮。

使用指南

安装

go get github.com/blugelabs/bluge

代码示例

下面是一个简单的例子:

package mainimport ("context""fmt""log""time""github.com/blugelabs/bluge"
)func main() {// write indexwriteIndex("./data/bluge/")// batch insertbatch("./data/bluge/")// searchsearch("./data/bluge/")
}// 创建索引
func writeIndex(indexPath string) {config := bluge.DefaultConfig(indexPath)writer, err := bluge.OpenWriter(config)if err != nil {log.Fatalf("error opening writer: %v", err)}defer writer.Close()// 新建文档doc := bluge.NewDocument("example").AddField(bluge.NewTextField("name", "bluge")).AddField(bluge.NewDateTimeField("created_at", time.Now()))err = writer.Update(doc.ID(), doc)if err != nil {log.Fatalf("error updating document: %v", err)}
}// 批量创建
func batch(indexPath string) {writer, err :&#61; bluge.OpenWriter(bluge.DefaultConfig(indexPath))batch :&#61; bluge.NewBatch()for i :&#61; 0; i < 10; i&#43;&#43; {doc :&#61; bluge.NewDocument(fmt.Sprintf("example_%d", i)).AddField(bluge.NewTextField(fmt.Sprintf("field_%d", i), fmt.Sprintf("value_%d", i%2))).AddField(bluge.NewDateTimeField("created_at", time.Now()))batch.Insert(doc)}err &#61; writer.Batch(batch)if err !&#61; nil {log.Fatalf("error executing batch: %v", err)}batch.Reset()
}// 查询
func search(indexPath string) {config :&#61; bluge.DefaultConfig(indexPath)reader, err :&#61; bluge.OpenReader(config)if err !&#61; nil {log.Fatalf("error getting index reader: %v", err)}defer reader.Close()query :&#61; bluge.NewMatchQuery("value_1").SetField("field_1")request :&#61; bluge.NewTopNSearch(10, query).WithStandardAggregations()documentMatchIterator, err :&#61; reader.Search(context.Background(), request)if err !&#61; nil {log.Fatalf("error executing search: %v", err)}match, err :&#61; documentMatchIterator.Next()for err &#61;&#61; nil && match !&#61; nil {err &#61; match.VisitStoredFields(func(field string, value []byte) bool {fmt.Printf("match: %s:%s\n", field, string(value))return true})if err !&#61; nil {log.Fatalf("error loading stored fields: %v", err)}fmt.Println(match)match, err &#61; documentMatchIterator.Next()}if err !&#61; nil {log.Fatalf("error iterator document matches: %v", err)}
}

总结

bulge是Golang实现的全文检索库&#xff0c;功能上类似lucene&#xff0c;性能上相比lucene还有些差距&#xff0c;如果对全文检索感兴趣可以把玩把玩。

参考资料

  1. https://github.com/blugelabs/bluge

  2. https://blugelabs.com/bluge/

《酷Go推荐》招募&#xff1a;

各位Gopher同学&#xff0c;最近我们社区打算推出一个类似GoCN每日新闻的新栏目《酷Go推荐》&#xff0c;主要是每周推荐一个库或者好的项目&#xff0c;然后写一点这个库使用方法或者优点之类的&#xff0c;这样可以真正的帮助到大家能够学习到

新的库&#xff0c;并且知道怎么用。

大概规则和每日新闻类似&#xff0c;如果报名人多的话每个人一个月轮到一次&#xff0c;欢迎大家报名&#xff01;戳「阅读原文」&#xff0c;即可报名

扫码也可以加入 GoCN 的大家族哟&#xff5e;

3cecef7ff40b855739ba53c989489c2f.png


推荐阅读
author-avatar
中国传媒大学一零播本更_822
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有