本文幫助您快速理解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;
文檔內容是否對您有幫助?