本文帮助您快速理解PolarDB PostgreSQL版(兼容Oracle)全文检索的基本用法,包括安装/卸载插件、创建表、创建索引和查询等操作。
安装插件
CREATE EXTENSION rum;
如需使用中文分词功能,可同步安装中文分词插件。
CREATE EXTENSION pg_jieba;
创建表
创建英文表。
CREATE TABLE test_english(id serial, t text, d timestamp);
创建中文表。
CREATE TABLE test_chinese(id serial, t text, d timestamp, v tsvector);
插入数据
向英文表插入测试数据。
INSERT INTO test_english(t,d) VALUES ('The situation is most beautiful', '2016-05-01 20:21:22.326724'); INSERT INTO test_english(t,d) VALUES ('It is a beautiful', '2016-05-01 21:21:22.326724'); INSERT INTO test_english(t,d) VALUES ('It looks like a beautiful place', '2016-05-01 22:21:22.326724'); INSERT INTO test_english(t,d) VALUES ('It looks l a beautiful place', '2016-05-02 00:21:22.326724'); INSERT INTO test_english(t,d) VALUES ('It looks like a beautiful places', '2016-05-02 02:21:22.326724'); INSERT INTO test_english(t,d) VALUES ('It looks like a beaut places', '2016-05-02 03:21:22.326724'); INSERT INTO test_english(t,d) VALUES ('It looks like a pig', '2016-05-02 03:21:22.326724');
向中文表插入测试数据。
INSERT INTO test_chinese(t,d) VALUES ('南财理财通数据显示,5月公募理财产品吸金榜前十名归属于5家机构,信银理财有5只产品上榜,南银理财占两席,民生理财、恒丰理财、浦银理财各占一席,上榜产品均为中低风险的封闭式固收类产品。从投资周期看,本月榜单产品中有6只产品投资周期为1-2年,3-6个月及6-12个月期限产品各有2只。', '2016-05-01 20:21:22.326724'); INSERT INTO test_chinese(t,d) VALUES ('其中,信银理财“安盈象固收稳利十四个月封闭式95号”理财产品夺得吸金榜冠军,募集规模达到106.204 亿元;民生理财“富竹固收优选14个月封闭39号”位列第二,募集规模为46.606亿元;信银理财“安盈象固收稳利十四个月封闭式94号”排名第三,募集规模为41.365 亿元。', '2016-05-01 20:21:22.326724'); INSERT INTO test_chinese(t,d) VALUES ('5月新发产品募集规模最大的是信银理财“安盈象固收稳利十四个月封闭式95号”,实际募集资金高达106.204亿元,该系列产品已蝉联4个月榜首。', '2016-05-01 20:21:22.326724'); INSERT INTO test_chinese(t,d) VALUES ('南财理财通数据显示,“安盈象固收稳利十四个月封闭式95号”理财产品成立于2024年05月16日,将于2025年07月16日到期,风险评级PR2(中低风险),产品有A、C、D、K类份额,投资周期1-2年,业绩比较基准2.90%~3.45%。', '2016-05-01 20:21:22.326724'); -- 该操作可以通过执行更新操作或使用触发器的方式进行 UPDATE test_chinese SET v = to_tsvector('jiebacfg', t);
创建索引
为英文表创建索引。
CREATE INDEX ON test_english USING rum (t rum_text_ops);
为中文表创建索引。
CREATE INDEX ON test_chinese USING rum (v rum_tsvector_ops);
查询
英文表查询。
查询语句一:
SELECT * FROM test_rum WHERE to_tsvector('english', t) @@ to_tsquery('english', 'beautiful | place');
返回结果如下:
id | t | d ----+----------------------------------+---------------------------- 1 | The situation is most beautiful | 2016-05-01 20:21:22.326724 2 | It is a beautiful | 2016-05-01 21:21:22.326724 3 | It looks like a beautiful place | 2016-05-01 22:21:22.326724 4 | It looks l a beautiful place | 2016-05-02 00:21:22.326724 5 | It looks like a beautiful places | 2016-05-02 02:21:22.326724 6 | It looks like a beaut places | 2016-05-02 03:21:22.326724
查询语句二:
SELECT *, to_tsvector('english', t) <=> to_tsquery('english', 'beautiful | place') AS rank FROM test_rum WHERE to_tsvector('english', t) @@ to_tsquery('english', 'beautiful | place') ORDER BY to_tsvector('english', t) <=> to_tsquery('english', 'beautiful | place') DESC;
返回结果如下:
t | rank ---------------------------------+---------- It looks like a beautiful place | 8.22467 The situation is most beautiful | 16.44934 It is a beautiful | 16.44934
中文表查询。
查询语句一:
SELECT id, v <=> to_tsquery('jiebacfg', '数据 | 理财') as rank FROM test_chinese where v @@ to_tsquery('jiebacfg', '数据 | 理财');
返回结果如下:
id | rank ----+----------- 1 | 6.6024785 2 | 12.08523 3 | 16.44934 4 | 8.22467
查询语句二:
SELECT id, v <=> to_tsquery('jiebacfg', '数据 | 理财') as rank FROM test_chinese where v @@ to_tsquery('jiebacfg', '数据');
返回结果如下:
id | rank ----+----------- 1 | 6.6024785 4 | 8.22467
卸载插件(可选)
DROP EXTENSION rum CASCADE;
DROP EXTENSION pg_jieba CASCADE;
文档内容是否对您有帮助?