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
北京太阳宫大厦
- 上一篇: GBase 8s自定义使用find_in_set()函数
- 下一篇: GBase 8s数据类型