相似文档排序召回检索函数和操作符
###
场景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;