更新时间:2024-11-12 GMT+08:00
分享

相似文档排序召回检索函数和操作符

###

场景1:

功能说明:基于BM25算法族计算两个文本间的相似度,只对使用BM25索引的查询有效。

左参数类型:text

右参数类型:text

返回值类型:double precision

代码示例:

-- 建表及BM25索引
gaussdb=# CREATE TABLE t1(_id TEXT UNIQUE, title TEXT, texts TEXT, metadata TEXT) WITH (storage_type=astore);
gaussdb=# CREATE INDEX "bm25_idx1" ON "t1" USING bm25 ("texts");
-- 执行检索
gaussdb=# SELECT /*+ indexscan(t1, bm25_idx1) */ _id, texts ### 'drop table t1;' AS SCORE FROM t1 ORDER BY SCORE desc LIMIT 10;

场景2:

功能说明:基于BM25算法族计算两个分词文本数组间的相似度,只对使用BM25索引的查询有效。

左参数类型:text[]

右参数类型:text[]

返回值类型:double precision

代码示例:

-- 建表及BM25索引
gaussdb=# CREATE TABLE st_information (st_id SERIAL PRIMARY KEY, st_name TEXT[], st_email TEXT[]);
gaussdb=# CREATE INDEX st_information_st_email_bm25_index ON st_information USING bm25(st_email);
-- 执行检索
gaussdb=# SELECT /*+ indexscan(st_information, st_information_st_email_bm25_index) */ st_id, st_email ### '{common-domain@xyz.com}' AS score FROM st_information ORDER BY SCORE desc LIMIT 10;

gs_ts_dict_add_definition

功能说明:增量添加词典内容。

  • 第一个参数为词典OID,可以直接输入词典名字符串由数据库内部做自动转换。
  • 第二个参数表示该次增量词典内容添加的内容类型,'t'表示关键词或者同义词,'s'表示停用词。
  • 第三个参数是添加的词典内容,类型为文本数组,数组中每条数据应单独表示一条词典内容定义,定义格式请见《向量数据库开发指南》中的“使用向量数据库>相似文档检索>自定义Tokenweight分词词典”章节的相关内容。

    该函数效果等同于DDL语句,运行后会清空所有数据库连接的词典缓存,重新加载词典时会造成BM25文本索引增删查操作大幅度变慢,不建议在线使用。

入参类型:regdictionary, "char", text[]

出参类型:BOOLEAN

代码示例:

gaussdb=# CREATE TEXT SEARCH DICTIONARY test_dict (
    template = tokenweight,
    usedefault = false
);
gaussdb=# call gs_ts_dict_add_definition('test_dict', 't', array['高斯数据库:50']);
-- 对于定义了多关键词的情况,建议使用的导入方式如下:
gaussdb=# do $$
DECLARE
    tempwords TEXT;
begin
    create temp table tokenwords (t text);
    insert into tokenwords values ('单词一'), ('单词二'), ('单词三'), ('单词四'), ('单词五');
    call gs_ts_dict_add_definition('test_dict', 't', (select array_agg(t) into tempwords from tokenwords));
end$$;
gaussdb=# SELECT gs_bm25_tokenize('高斯数据库', 'test_dict');
 gs_bm25_tokenize 
------------------
   {高斯数据库}
(1 row)

gs_bm25_tokenize

功能说明:使用指定词典对输入文本进行分词操作,返回被分割的单词文本数组。

入参类型:text, cstring(默认值"pg_catalog.simple_cn_segmentation")

出参类型:text[]

代码示例:

gaussdb=# SELECT gs_bm25_tokenize('高斯数据库');
gaussdb=# SELECT gs_bm25_tokenize('高斯数据库', 'pg_catalog.simple_cn_segmentation');

gs_bm25_inspect

功能说明:显示索引磁盘使用和内部词倒排信息等数据。

入参类型:text

出参类型record

代码示例:

-- 建表及BM25索引
gaussdb=# CREATE TABLE st_information (st_id SERIAL PRIMARY KEY, st_name TEXT[], st_email TEXT[]);
gaussdb=# CREATE INDEX st_information_st_email_bm25_index ON st_information USING bm25(st_email);
-- 执行检索
gaussdb=#  SELECT * FROM gs_bm25_inspect('st_information_st_email_bm25_index');

gs_bm25_distance_text

功能说明:返回bm25文档相似分数,只在使用BM25索引检索时有效。

入参类型:text, text

出参类型:double precision

代码示例

-- 建表及BM25索引
gaussdb=# CREATE TABLE t1(_id TEXT UNIQUE, title TEXT, texts TEXT, metadata TEXT) WITH (storage_type=astore);
gaussdb=# CREATE INDEX "bm25_idx1" ON "t1" USING bm25 ("texts");
-- 执行检索
gaussdb=# SELECT /*+ indexscan(t1, bm25_idx1) */ _id, gs_bm25_distance_text(texts, 'drop table t1;') AS SCORE FROM t1 ORDER BY texts ### 'drop table t1;' desc LIMIT 10;

gs_bm25_distance_textarr

功能说明:返回bm25文档相似分数,只在使用BM25索引检索时有效。

入参类型:text[], text[]

出参类型:double precision

代码示例
-- 建表及BM25索引
gaussdb=# CREATE TABLE st_information (st_id SERIAL PRIMARY KEY, st_name TEXT[], st_email TEXT[]);
gaussdb=# CREATE INDEX st_information_st_email_bm25_index ON st_information USING bm25(st_email);
-- 执行检索
gaussdb=# SELECT /*+ indexscan(st_information, st_information_st_email_bm25_index) */ *, gs_bm25_distance_textarr(st_email, '{common-domain@xyz.com}') AS score FROM st_information ORDER BY st_email ### '{common-domain@xyz.com}' desc LIMIT 10;

相关文档