openGauss每日一练第20天课后作业
1.用tsvector @@ tsquery和tsquery @@ tsvector完成两个基本文本匹配
SELECT '中文 法文 英文 日文'::tsvector @@ '日 & 文'::tsquery AS RESULT;
SELECT '中文 法文 英文 日文'::tsvector @@ '日文 & 中文'::tsquery AS RESULT;
--模糊匹配,中文使用ngram分词器
select to_tsvector('ngram','发射一枚火球攻击目标,对其造成561到715点火焰伤害,并在8秒内造成额外的72点伤害。') @@ to_tsquery('ngram','火球&额外&伤害&561') 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 秒。');
SELECT id, name, description FROM day20.spell WHERE to_tsvector(description) @@ to_tsquery('冰霜');
--由于是中文,需要使用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'。
3.创建GIN索引
CREATE INDEX spell_idx1 ON day20.spell USING gin(to_tsvector('ngram', description));
\d+ day20.spell;

4.清理数据
drop schema day20 cascade;




