blevesearch/bleve
A modern text/numeric/geo-spatial/vector indexing library for go
什么是 bleve?
bleve 是一个用 Go 编程语言编写的搜索库。它允许开发者通过索引数据(组织数据以便快速检索)然后查询该索引(搜索数据)来为应用程序添加全文搜索功能。
它可以索引任何 Go 数据结构或 JSON 数据,并附带合理的默认设置,您可以根据需要进行自定义。
核心功能
可索引的字段类型
bleve 支持多种数据字段:
- text(单词/句子)
- number(数值)
- datetime(日期和时间)
- boolean(真/假)
- geopoint 和 geoshape(地图上的位置和区域)
- IP(互联网地址)
- vector(用于相似度搜索的数学表示)
支持的查询类型
您可以使用以下方式进行搜索:
- 基本匹配:term, phrase, match, match_phrase, prefix, regexp, wildcard, fuzzy
- 范围查询:term range, numeric range, date range, boolean field
- 复合查询:使用
conjuncts(必须全部匹配)、disjuncts(任意匹配)和布尔逻辑(must/should/must_not)组合条件 - 查询字符串语法:一种简单的基于文本的查询编写方式
- 地理空间搜索:查找位置附近或形状内的内容
- 向量搜索:近似 k-最近邻(通过向量查找相似项)
- 同义词搜索:匹配含义相同的单词
- 层级嵌套搜索:搜索结构化的嵌套数据
评分与排名
bleve 使用两种著名的评分模型对结果进行排名:tf-idf 和 BM25。它还支持混合搜索——使用两种融合方法将精确关键词匹配与语义(基于含义)匹配相结合:RRF (Reciprocal Rank Fusion) 和 RSF (Relative Score Fusion)。
其他特性
- 结果分页:对大量结果集进行分页
- 查询时加权:在搜索过程中为特定术语或字段赋予额外权重
- 匹配高亮:显示文档的哪些部分匹配,并提供文本片段
- 聚合/分面:按术语、数值范围或日期范围对结果进行分组(适用于过滤器和摘要)
工作原理(代码示例)
索引 — 存储文档:
message := struct {
Id string
From string
Body string
}{
Id: "example",
From: "xyz@couchbase.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 还附带一个 CLI(命令行界面),您可以使用 go install github.com/blevesearch/bleve/v2/cmd/bleve@latest 进行安装。它允许您从终端与 bleve 索引进行交互。命令包括:
create— 创建新索引index— 将文件添加到索引query— 搜索索引count— 统计文档数量dump— 显示索引内容check— 验证索引完整性fields— 列出字段mapping— 显示所使用的映射dictionary— 打印字段的术语字典bulk— 一次加载多个 JSON 文档registry— 列出已编译的组件scorch— 与 scorch 索引(底层存储引擎)交互
文本分析
bleve 包含通用分析器(可自定义)以及针对多种语言的预构建文本分析器:阿拉伯语、保加利亚语、加泰罗尼亚语、中日韩语、库尔德语、丹麦语、德语、希腊语、英语、西班牙语(卡斯蒂利亚语和加利西亚语)、巴斯克语、波斯语、芬兰语、法语、盖尔语、印地语、克罗地亚语、匈牙利语、亚美尼亚语、印度尼西亚语、意大利语、荷兰语、挪威语、波兰语、葡萄牙语、罗马尼亚语、俄语、瑞典语和土耳其语。
此外,还有一个 文本分析向导 bleveanalysis.couchbase.com 可帮助您试验分析器。
获取帮助与许可证
- 问题/讨论:GitHub issues 和 Google group
- 许可证:Apache License Version 2.0
简而言之:bleve 是一个灵活且功能丰富的 Go 开发者搜索库,带有用于快速任务的 CLI 和广泛的文本分析语言支持。
相关
- 项目
- 项目
- 项目
- 项目