vertica基于UDTF中文分词器建立全文索引

前言

vertica当我们需要查询的列字段过长时候(例如long varchar(1048576)),会导致查询速度过慢,所以这个时候我们可以建立全文索引,将字段长度缩小(varchar(128)) ,提高查询速度

假设需求

假设有一个名为 test 的表,包含以下列
id:文章的唯一标识符

title:文章的标题

content:文章的内容

现在需要创建一个全文索引,以便可以快速搜索文章标题的关键词。

步骤如下:
1.创建中文分词器
2.创建主键
3.创建投影
4.创建全文索引
5.查询

1.创建中文分词器

CREATE OR REPLACE TRANSFORM FUNCTION v_txtindex.ICUchineseTonkenizer AS LANGUAGE ‘C++’ NAME ‘my_tokenizer_factory’ LIBRARY v_txtindex.logSearchLib not FENCED;

对常量分词

select v_txtindex.ICUChineseTokenizer(123,‘重庆成都上海’) OVER();

2.更新表的主键

//选择一个主键 (必须)
//不然在创建投影和索引的时候会报错
Alter TABLE tableName ADD PRIMARY KEY(ID);

3.创建投影

创建投影

CREATE PROJECTION IF NOT EXISTS test_projection_title
(
  id,//id 必须放在第一位
  title,// 对那个字段创建全文索引,第二位就必须是那个字段(这里对title建立全文索引所有这里是title字段,如果是对content建立索引,则这里应该改为content)
  content
)
AS
  SELECT id, title, content
  FROM articles
  ORDER BY id
SEGMENTED BY HASH(id) ALL NODES kasfe;

删除投影

DROP PROJECTION test_projection_title RESTRICT

4.创建全文索引

创建全文索引

//这里的(id,title,content) 三个参数 
//id代表之前第二步骤创建的主键
//title代表建立的索引字段
//content代表额外字段,可以自行添加,方便不用回表操作
CREATE TEXT INDEX test_index ON test(id,title,content) 
  TOKENIZER v_txtindex.ICUChineseTokenizer(long varchar) stemmer none;

删除索引

DROP TEXT INDEX test_index;

5.查询




//通过分词查找到索引表的id
//对单个词语进行查询
select doc_id from test_index where token="重庆";

//对多个词语进行查询
//先进行分词
select v_txtindex.ICUChineseTokenizer(123,'重庆成都上海') OVER();

//查询
select a1.doc_id from
test.Index a1,
test.Index a2,
test.Index a3
where 1=1 and a1.doc_id=a2.doc_id
and a2.doc_id=a3.doc_id
and a1.token="重庆"
and a2.token="成都"
and a3.token="上海"

//通过查询出来的doc_id 就可以查出需要的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值