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 可帮助您试验分析器。

获取帮助与许可证

简而言之:bleve 是一个灵活且功能丰富的 Go 开发者搜索库,带有用于快速任务的 CLI 和广泛的文本分析语言支持。

相关

  • 项目
  • 项目
  • 项目
  • 项目