VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

PGroonga插件

功能描述

PGroonga是一个全文检索插件,Vastbase已经内置了 PGroonga扩展,用户只需要创建扩展,即可使用PGroonga支持的语言进行超高速全文检索。

语法格式

1、使用pgroonga()创建单字段全文索引。

CREATE  INDEX  pgroonga_index  ON  memos  USING  pgroonga(content1);
  • 使用&@操作符进行全文检索。

    SELECT * FROM memos WHERE content &@ '全文搜索关键字';
    
  • 使用&@~操作符执行含pgroonga查询语法的全文检索。

    SELECT * FROM memos WHERE content2 &@~ 'PGroonga OR PostgreSQL';
    
  • 使用like操作符(数据库本身的一种查询语法,区分大小写)执行全文检索。

    SELECT * FROM memos WHERE content2 LIKE '%全文搜索关键字%';
    
  • 使用ilike操作符(数据库本身的一种查询语法,不区分大小写)执行全文检索。

    SELECT * FROM memos WHERE content2 ILIKE '%全文搜索关键字%';
    

2、使用pgroonga()创建多字段全文索引。

CREATE INDEX pgroonga_index_1 ON memos USING pgroonga(content1, content2);
  • 使用&@操作符进行多字段全文检索。

    SELECT * FROM memos WHERE content1 &@ '全文搜索关键字' and content2 &@ '全文搜索关键字';
    
  • 使用like操作符(数据库本身的一种查询语法,区分大小写)执行多字段全文检索。

    SELECT * FROM memos WHERE content1 like '%全文搜索关键字%' and content2 like '%全文搜索关键字%';
    
  • 使用ilike操作符(数据库本身的一种查询语法,不区分大小写)执行多字段全文检索。

    SELECT * FROM memos WHERE content1 ilike '%全文搜索关键字%' and content2 ilike '%全文搜索关键字%';
    

3、使用pgroonga_vacuum()函数清理临时数据。

select pgroonga_vacuum();

示例

1、修改postgresql.conf中配置enable_pgroonga=true

enable_pgroonga=true

修改完成后重启数据库。

2、创建插件。

CREATE EXTENSION pgroonga;

3、关闭全表扫描,为了在少量数据下体现索引效果。

set enable_seqscan=off;

4、创建表,并插入数据。

CREATE TABLE memos (
id integer,
content text
);
INSERT INTO memos VALUES (1, 'PostgreSQL is a relational database management system.');
INSERT INTO memos VALUES (2, 'Groonga is a fast full text search engine that supports all languages.');
INSERT INTO memos VALUES (3, 'PGroonga is a PostgreSQL extension that uses Groonga as index.');
INSERT INTO memos VALUES (4, 'There is groonga command.');

5、创建全文索引。

CREATE INDEX idxA ON memos USING pgroonga (content pgroonga_text_full_text_search_ops_v2);

6、查看执行计划。

explain select * from memos where content LIKE '%groonga%';

结果显示如下:

                        QUERY PLAN                             
-------------------------------------------------------------------
 Index Scan using idxa on memos  (cost=0.00..4.01 rows=1 width=36)
   Index Cond: (content ~~ '%groonga%'::text)
(2 rows)

7、查看表中内容。

select * from memos where content LIKE '%groonga%';

结果显示如下:

 id |          content          
----+---------------------------
  4 | There is groonga command.
(1 row)

8、使用ILIKE查询。

select * from memos where content ILIKE '%roonga%';

结果显示如下:

 id | content 
----+---------
(0 rows)

9、查询验证。

  • 使用&@操作符。

    SELECT * FROM memos WHERE content &@ 'languages';
    

    结果显示如下:

    id | content
    ----+------------------------------------------------------------------------
    2 | Groonga is a fast full text search engine that supports all languages.
    (1 row)
    
  • 使用&@~操作符。

    SELECT * FROM memos WHERE content &@~ 'PGroonga OR PostgreSQL';
    

    结果显示如下:

    id | content
    ----+----------------------------------------------------------------
    3 | PGroonga is a PostgreSQL extension that uses Groonga as index.
    1 | PostgreSQL is a relational database management system.
    (2 rows)
    
  • 使用like操作符。

    SELECT * FROM memos WHERE content LIKE '%groonga%';
    

    结果显示如下:

    id | content
    ----+---------------------------
    4 | There is groonga command.
    (1 row)
    
  • 使用ilike操作符。

    SELECT * FROM memos WHERE content ILIKE '%groonga%';
    

    结果显示如下:

    id |                                content                                 
    ----+------------------------------------------------------------------------
      2 | Groonga is a fast full text search engine that supports all languages.
      3 | PGroonga is a PostgreSQL extension that uses Groonga as index.
      4 | There is groonga command.
    (3 rows)