圈子推荐
查看所有吧>>
活跃用户
    vastbase全文检索FTS的使用

    一、全文检索FTS的使用:

    1.原始文本不能被直接搜索,通过to_tsvector将其向量化为词组,并保存到tsvector类型字段。

    2.tsvector 的字段存储的是词与词序列的元组,需要新建 gin 索引才能使用搜索。

    3.搜索条件,狭义上可以理解成搜索关键字,也需要通过 to_tsquery 来向量化,且类型为 tsquery。

    4.使用 tsquery 去搜索 tsvector。


    二、vastbase全文检索插件

    1.全文检索插件pg_zhtrgm

    # su - vastbase

    $ vsql

    vastbase=# select * from pg_extension;

         extname     | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition 

    -----------------+----------+--------------+----------------+------------+-----------+--------------

     plpgsql         |       10 |           11 | f              | 1.0        |           | 

     mot_fdw         |       10 |           11 | t              | 1.0        |           | 

     file_fdw        |       10 |           11 | t              | 1.0        |           | 

     security_plugin |       10 |           11 | t              | 1.0        |           | 

     pg_zhtrgm       |       10 |           11 | t              | 1.0        |           | 

    (5 rows)


    vastbase=#

    2.文本检索解析器

    vastbase=# dFp

                 List of text search parsers

       Schema   |   Name   |         Description          

    ------------+----------+------------------------------

     pg_catalog | default  | default word parser

     pg_catalog | ngram    | ngram chinese word parser

     pg_catalog | pound    |  pound split parser

     pg_catalog | zhparser | zhparser chinese word parser

    (4 rows)


    vastbase=# 

    vastbase=# select ts_token_type('ngram');            

               ts_token_type           

    -----------------------------------

     (1,zh_words,"chinese words")

     (2,en_word,"english word")

     (3,numeric,"numeric data")

     (4,alnum,"alnum string")

     (5,grapsymbol,"graphic symbol")

     (6,multisymbol,"multiple symbol")

    (6 rows)


    vastbase=# 


    三、全文检索初步使用

    1.基本命令使用


    SELECT to_tsvector('ngram', '国家大剧院');

    SELECT * FROM to_tsvector('ngram','SQL,你敢吃我俺老孙一棒吗?');

    select setweight(to_tsvector('ngram','SQL,你敢吃我俺老孙一棒吗?'), 'A');


    2.创建测试数据库

    --- create test database and table 


    vastbase=# create database tdb01;

    vastbase=# c tdb01

    tdb01=# DROP TABLE IF EXISTS tourist_spots;

    tdb01=# CREATE TABLE tourist_spots

    (

      id      serial PRIMARY KEY,

      spots   varchar(40), # 景点名称

      profile text         # 景点简介

    );


    -- insert into records


    tdb01=# INSERT INTO tourist_spots(id, spots, profile)

    VALUES (1, '中国国家大剧院', '中国国家大剧院(National Centre for the Performing Arts of China)是新“北京十六景”之一的地标性建筑,位于北京市中心天安门广场西,人民大会堂西侧,由主体建筑及南北两侧的水下长廊、地下停车场、人工湖、绿地组成。中国国家大剧院由法国建筑师保罗·安德鲁主持设计,国家大剧院外观呈半椭球形,东西方向长轴长度为212.20米,南北方向短轴长度为143.64米,建筑物高度为46.285米,占地11.89万平方米,总建筑面积约16.5万平方米,其中主体建筑10.5万平方米,地下附属设施6万平方米,总造价30.67亿元。设有歌剧院、音乐厅、戏剧场以及艺术展厅、餐厅、音像商店等配套设施。中国国家大剧院于1958年被定为国庆十周年十大建筑之一;2008年12月19日获“鲁班奖”;2009年10月28日入选新中国成立60周年“百项经典暨精品工程”。'),

    (2,'颐和园','颐和园主景区由万寿山、昆明湖组成,全园占地3.009平方公里(其中颐和园世界文化遗产区面积是2.97平方公里),水面约占四分之三。园内现存各式宫殿、园林古建7万平方米,并以珍贵的文物藏品闻名于世,是第一批全国重点文物保护单位。颐和园前身为清漪园,始建于清朝乾隆十五年(1750),咸丰十年(1860)被英法联军烧毁。光绪十二年(1886),清廷挪用海军经费等款项开始重建,并于两年后取用今名,作为慈禧太后的颐养之所。一九〇〇年又遭八国联军破坏,一九〇二年修复。中华人民共和国成立后,几经修缮,颐和园陆续复建了四大部洲、苏州街、景明楼、澹宁堂、文昌院、耕织图等重要景区。颐和园集传统造园艺术之大成,借景周围的山水环境,既有皇家园林恢弘富丽的气势,又充满了自然之趣,高度体现了中国园林“虽由人作,宛自天开”的造园准则。一九九八年十二月,颐和园被联合国教科文组织列入《世界遗产名录》,并予以如下评价:1)北京的颐和园是对中国风景园林造园艺术的一种杰出的展现,将人造景观与大自然和谐地融为一体;2)颐和园是中国的造园思想和实践的集中体现,而这种思想和实践对整个东方园林艺术文化形式的发展起了关键性的作用;3)以颐和园为代表的中国皇家园林是世界几大文明之一的有力象征。'),

    (3,'香山公园','香山公园位于北京西北郊小西山山脉东麓,距城20公里,占地160公顷,是一座著名的具有皇家园林特色的大型山林公园。香山公园始建于金大定二十六年(1186年),距今已有800多年历史。1956年开辟为人民公园,经过近半个世纪的建设,现已成为中外闻名的北京十大公园之一。香山公园文物古迹丰富珍贵,亭台楼阁似星辰散布山林之间。这里有燕京八景之一“西山晴雪”; 这里有集明清两代建筑风格的寺院“碧云寺”;这里有国内仅存的木质贴金“五百罗汉堂”;这里有迎接六世班禅的行宫“宗镜大昭之庙”;这里有颇具江南特色的古雅庭院“见心斋”;这里有世纪伟人毛泽东和中共中央进驻北平最早居住和办公的地方,双清别墅;这里有世纪伟人孙中山先生灵柩暂厝地--碧云寺金刚宝座塔。 香山公园地势崛峻,峰峦叠翠,泉沛林茂。主峰香炉峰(俗称鬼见愁)海拔557米。公园内人与自然和谐相处,鸟啼虫鸣,松鼠嬉闹于沟壑林间。这里春日繁花似锦、夏时凉爽宜人、冬来银妆素裹。尤其是深秋时节,10万株黄栌如火如荼,气势磅礴,曾被评为“北京新十六景”之一。香山公园旅游服务设施齐全。游,可乘大型吊椅式游览索道(全长1400米,落差431米),西山美景、北京城廓尽收眼底。吃,松林餐厅环境优美,昆虫野菜、泉水煮饭,别具风味。住,香山别墅功能齐全,是观光旅游、洽谈会议、度假休闲的理想场所。住在这里,悠闲散步即可到达中国科学院植物园、北京植物园、卧佛寺。');


    --- add FTS col: fts

    tdb01=# ALTER TABLE tourist_spots ADD COLUMN fts tsvector;

    ALTER TABLE

    tdb01=#

    --- update fts col 

    tdb01=# UPDATE tourist_spots SET fts = setweight(to_tsvector('ngram', spots), 'A') || setweight(to_tsvector('ngram', profile), 'B');

    UPDATE 3


    -- create index on fts

    tdb01=# CREATE INDEX ON tourist_spots USING gin (fts);

    CREATE INDEX

    tdb01=#

    --- query data

    tdb01=# select spots from tourist_spots where fts @@ to_tsquery('香山');

      spots   

    ----------

     香山公园

    (1 row)


    tdb01=#q


    • 分享到:
    排序方式:回复时间 共有0条评论