版本:latest

BM25全文检索索引

可获得性

本特性自 openGauss 7.0.0-RC2 版本开始引入。

特性简介

图 1主备场景BM25索引设计方案

客户价值

RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合检索系统与生成模型的技术框架, 通过从外部知识库中检索相关信息,生成模型根据这些相关信息生成更加准确的答案。越来越多的企业通过 RAG 技术搭建自己的智能知识问答、业务推荐等系统,提升了效率、优化用户体验和提供精准服务。 如何快速从外部知识库中检索准确度高,相关性高的文档,进而提升 RAG 系统准确性和响应能力,成为了企业的核心诉求。BM25(Best Matching 25)全文检索算法,通过对文档库构建 BM25 倒排索引,可以快速准确的检索用户提问的相关文档,已成为 RAG 系统的主流选择。

openGauss 新增BM25全文检索索引功能,通过简单的创建索引命令,即可为文档库构建BM25索引,实现对文档的快速检索,支持新增文档实时更新到索引中。查询响应性能超GIN索引几十甚至上百倍。同时,索引数据对接openGauss存储引擎,支持主备部署,提供高可用、故障切换、备份恢复的能力,以保障业务连续性。

特性描述

openGauss 单机/主备集群场景下,对文档库中的文档进行分词,随后根据分词结果构建倒排索引。扫描阶段,根据搜索词实现对文档的快速搜索。

  • 构建阶段:

    用户发起BM25索引构建请求,主节点通过分词器对文档进行分词,对每个分词构建倒排索引,即每个分词对应着所有包含该分词的文档信息。支持并行构建。

  • 基于日志的索引数据同步:

    为了保证索引数据的实时性,索引构建和行数据修改都通过日志方式同步到备机。

  • 扫描阶段:

    用户发起BM25索引查询请求,节点内部会将用户的问题进行分词,根据该分词结果获取相关倒排列表,随后遍历倒排列表通过BM25算法对文档进行打分、排序,最终返回 top-k 个分数最高的文档给大模型生成用户所需答案。同时支持 where 等过滤条件。

特性增强

  • 支持 WITH (dict_path='绝对路径') 为 BM25 索引指定自定义词典目录。
  • BM25 存储支持块级优化,通过可变大小块提升小数据场景的空间利用率。
  • 7.0.0 LTS 版本引入索引空间优化能力,属于内部存储优化,不改变 SQL 使用方式。

特性约束

BM25 全文检索的规格约束如下:

  • 表:仅支持普通表的构建BM25索引,不支持分区表。支持astore、段页式表,不支持ustore表、列存表、MOT表。
  • 数据类型:仅支持 text 字段类型。
  • 仅支持单列构建索引,不支持构建多列组合索引,如:create index bm25_index on bm25_table using bm25(col1, col2);
  • 仅支持降序排序。
  • 不支持极致RTO。
  • 仅支持原词检索,不支持同义词检索和语义相关性检索。
  • 索引创建及使用兼容A、B、C、PG库。
  • 不支持CONCURRENTLY创建索引。
  • 创建索引支持设置 dict_path 选项,其他 options 暂不支持。
  • 不支持修改已创建索引的 dict_path;由于分词器特性,修改自定义词典后已有索引会失效,需删除并重建索引。
  • 使用 dict_path 自定义词典时,主备场景要求主机与备机的词典目录内容保持一致,且 GAUSSHOME 保持一致。
  • 旧版本创建的 BM25 索引在新版本中仍可用;如需获得更低空间占用,建议删除旧索引并重建。
  • 批量插入文档事务未提交情况下,同时执行索引查询,会出现文档分数变化的现象。批量插入文档失败时事务回滚,建议重建索引。