暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss每日一练第20天,全文检索

原创 虫爷 2021-12-20
528

openGauss每日一练第20天课后作业


1.用tsvector @@ tsquery和tsquery @@ tsvector完成两个基本文本匹配

SELECT '中文 法文 英文 日文'::tsvector @@ '日 & 文'::tsquery AS RESULT;

SELECT '中文 法文 英文 日文'::tsvector @@ '日文 & 中文'::tsquery AS RESULT;

SELECT 
result 
(1 row) 
SELECT 
result 
(1 row) 
' : :tsvector @@ 
' : :tsvector @@ 
'El & AS RESULT; 
& AS RESULT;

--模糊匹配,中文使用ngram分词器

select to_tsvector('ngram','发射一枚火球攻击目标,对其造成561到715点火焰伤害,并在8秒内造成额外的72点伤害。') @@ to_tsquery('ngram','火球&额外&伤害&561') as result;

omm=# select to tsvector 、 〈 'ngr 、 am 
r 、 esu1t 
是 发 射 一 枚 火 球 攻 击 目 标 , 对 其 造 成 561 到 715 点 火 焰 伤 害 , 并 在 8 秒 内 造 成 额 外 的 72 点 伤 害 。 
') @@ to_tsquer 、 y('ngr 、 am 
' 火 球 & 额 外 & 伤 害 & 561D as result ;

2.创建表且至少有两个字段的类型为 text类型,在创建索引前进行全文检索

create schema day20;

create table day20.spell (id int,name text,description text);

insert into day20.spell values

(1,'火球术','发射一枚火球攻击目标,对其造成561到715点火焰伤害,并在8秒内造成额外的72点伤害。'),

(2,'寒冰箭','向目标射出一支寒冰箭,对其造成515到555点冰霜伤害,并使其移动速度降低40%,持续9秒。'),

(3,'奥术飞弹','向目标射出数枚奥术飞弹,对其造成每秒230点伤害,持续5秒。'),

(4,'魔爆术','制造一次以施法者为中心的魔法爆炸,对半径10码范围内的所有目标造成243到263点奥术伤害。'),

(5,'火焰冲击','施放火焰冲击敌人,对其造成431到509点火焰伤害。'),

(6,'冰锥术','施法者面前锥形范围内的目标将受到335到365点冰霜伤害,移动速度降低50%,持续8 秒。');

omm=# cr 、 eate schema day20 ; 
CREATE SCHEMA 
omm=# cr 、 eate table day20.spe11 ()d int,name text,descr 、 iption text) ; 
CREATE TABLE 
omm=# inser 、 t into day20.spe11 values 
omm-# 〈 1 
omm-# 〈 2 
omm-# 〈 3 
omm-# 〈 4 
omm-# 〈 5 
omm-# 〈 6 
INSERT 2 
' 火 球 术 ' 是 发 射 一 枚 火 球 攻 击 目 标 , 对 其 造 成 561 到 715 点 火 焰 伤 害 , 并 在 8 秒 内 造 成 额 外 的 72 点 伤 害 。 I), 
寒 冰 箭 是 向 目 标 射 出 一 支 寒 冰 箭 , 对 其 造 成 515 到 555 点 冰 霜 伤 害 , 并 使 其 移 动 速 度 降 低 49 % , 持 续 9 秒 。 I), 
奥 术 飞 弹 ' 是 向 目 标 射 出 数 枚 奥 术 飞 弹 , 对 其 造 成 每 秒 239 点 伤 害 , 持 续 5 秒 。 I), 
魔 爆 术 ' 是 制 造 一 次 以 施 法 者 为 中 心 的 魔 氵 去 爆 炸 , 对 半 径 19 码 范 围 内 的 所 有 目 标 造 成 243 到 263 点 奥 术 伤 害 。 I), 
' 火 焰 冲 击 ' 是 施 放 火 焰 冲 击 敌 人 , 对 其 造 成 431 到 599 点 火 焰 伤 害 。 I), 
冰 锥 术 ' 是 施 法 者 面 前 锥 形 范 围 内 的 目 标 将 受 到 335 到 365 点 冰 霜 伤 害 , 移 动 速 度 降 低 59 % , 持 续 8 秒 。 ') ; 
6

SELECT id, name, description FROM day20.spell WHERE to_tsvector(description) @@ to_tsquery('冰霜');

SELECT 
id I 
name 
(0 rows) 
id, name, description FROM day20.spe11 WHERE to tsvector(description) @@ to tsquery( 'bK%fi'); 
description

--由于是中文,需要使用pg_catalog.ngram解析器。pg_catalog.ngram/pg_catalog.pound是为了支持中文全文检索功能新增的两种解析器。

SELECT id, name, description FROM day20.spell WHERE to_tsvector('ngram',description) @@ to_tsquery('冰霜');

--如果要模糊检索,在to_tsquery后面也加上'ngram'。

id, name, description FROM day20.spe11 WHERE to tsvector 、 ('ngr 、 am ,description) @@ to_tsquery( 冰 霜 ) ; 
omm=# S E L ECT 
descr 、 iption 
n a me 
2 《 寒 冰 箭 《 向 目 标 射 出 一 支 寒 冰 箭 , 对 其 造 成 515 到 555 点 冰 霜 伤 害 , 并 使 其 移 动 速 度 降 低 49 % , 持 续 9 秒 。 
6 《 冰 锥 术 《 施 法 者 面 前 锥 形 范 围 内 的 目 标 将 受 到 335 到 365 点 冰 霜 伤 害 , 移 动 速 度 降 低 59 % , 持 续 8 秒 。 
〈 2 、 ows)

3.创建GIN索引

CREATE INDEX spell_idx1 ON day20.spell USING gin(to_tsvector('ngram', description));

\d+ day20.spell;


4.清理数据

drop schema day20 cascade;

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论