GBase 8s 全文索引功能

GBase 8s 支持中文的全文本搜索功能BTS -- Basic Text Search。
传统关系型数据库上,我们通常通过 LIKE 或 MATCHES 条件来搜索文本数据,往往需要进行全表扫描,性能低下。
BTS提供全文本搜索能力,可以检索一个表上的字符数据类型列(BLOB, CHAR, CLOB, LVARCHAR, NCHAR, NVARCHAR, or VARCHAR)数据

准备:
为使用BTS功能,准备如下:
1.创建一个默认的sbspace空间
2.可选项:为bts 索引创建一个单独的sbspace空间
3.可选项:创建一个临时的 sbspace空间

通过CJK分词器可以支持中文搜索能力。
对于zh_CN.GB18030-2000字符集,需要设置环境变量GL_USEGLU=1,否则无法进行中文分词。

以下测试使用的字符集为zh_CN.utf8
1, 增加处理bts的vp

onmode -p +1 bts

-- 修改于2024-04-08
注:onmode -p只是临时增加,永久增加需要在ONCONFIG配置文件中增加VPCLASS bts,num=1

2, 注册bts,按提示确认注册,使用exit退出。

blademgr
register bts.3.10 btstest  

注:
a, bts.3.10 的版本号来源于$GBASEDBTDIR/extend/目录下具体版本号
b, btstest为需要使用bts的数据库名

3, 创建测试表,导入测试数据。

drop table if exists tclob;
create table tclob(col1 int, col2 clob);

insert into tclob values(1,filetoclob('1.txt','client'));
insert into tclob values(2,filetoclob('2.txt','client'));
insert into tclob values(3,filetoclob('3.txt','client'));

三个文本的内容为

# 1.txt
天津南大通用
# 2.txt
北京太阳宫大厦
# 3.txt
海泰发展六道6号

4, 创建全文索引

create index ix_tclob_col2 on tclob(col2 bts_clob_ops) USING bts(analyzer="cjk");

注:
bts_clob_ops类,根据字段类型调整,如char使用bts_char_ops类。ckj是China Korea Japan的缩写。

5, 使用全文索引查询

select * from tclob where bts_contains(col2,'太阳宫');

结果:

col1  2
col2
北京太阳宫大厦

对于单个汉字的全文索引查询,可以使用以下方式

select * from  tclob where bts_contains(col2,'?大 大?');

结果:

col1  1
col2
天津南大通用

col1  2
col2
北京太阳宫大厦

参考:http://www.talkwithtrend.com/Article/196721

标签: bts, 全文索引, 全文搜索

添加新评论