logo
GBase 8s
适配迁移
文章

GBase 8s 全文索引功能

GBase社区管理员
发表于2019-12-16 23:22:007244次浏览0个评论

传统关系型数据库上,我们通常通过 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

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

评论

登录后才可以发表评论
图片
图片

热门帖子