当前位置: 首页 > 工具软件 > SCWS > 使用案例 >

PostgreSQL基于SCWS、Zhparser插件全文检索环境安装

蒋招
2023-12-01

PostgreSQL基于SCWS、Zhparser插件全文检索环境安装

  • 提到全文检索,我们会想到Elasticsearch、Lucene等功能强大的搜索引擎,但或许我们仅需要实现一些简单的全站搜索或是字符匹配功能,此时引入Elasticsearch、Lucene搜索引擎或许过于重量,使用这些重量级的搜索引擎得需要性能强悍的服务器,还需要处理数据同步与数据一致性问题。
  • PostgreSQL数据库自身具备全文检索功能,PostgreSQL全文检索是通过FTS(FTS(full text search,全文检索)是一个带有一定“智能”的搜索工具包)配置库来支持的,FTS 是 PostgreSQL 原生自带的一个功能模块,不需要单独安装,但是很不幸FTS默认不具备中文配置库
  • PostgreSQL自带的parser插件适用于分词比较简单的语言(如英语),按照标点、空格切分语句即可获得有含义的词语,而中文比较复杂,词语之间没有空格分隔,长度也不固定,分词还和语义有关,因此parser不能用来做中文分词
  • PostgreSQL提供了多种索引类型,其中有两种索引可以被用来加速全文搜索,GIN(通用倒排索引) 和 GiST 索引类型。如果没有特殊的需求GIN更适合全文检索的索引。

1、centos7源码安装PostgreSQL12

全文检索需要安装scws、zhparser插件,推荐源码安装postgresql避免依赖缺失问题
yum方式安装参考

1.1、前置操作(root用户下操作)

  • 如果已存在yum安装的postgresql,提供以下卸载方式

    • # 停止postgresql,此处为注册了服务的停止方式,12版本
      systemctl stop postgresql-12
      # 卸载 包含postgresql名的程序包
      yum remove postgresql*
      # 删除postgres用户及其对应的用户目录(/home/postgres)
      userdel -r postgres
      # 检查是否存在 /usr/psqlXXX文件夹,有的话删除,例如
      rm -rf /usr/pgsql-12
      
  • 创建用户及用户组

    • 这里创建postgres用户是因为启动postgresql仅允许非root用户进行

    • # 创建postgres用户组
      groupadd postgres
      # 创建postgres用户,用户位于postgres组内
      useradd -g postgres postgres
      
  • 依赖安装

    • yum install gcc
      yum install readline-devel.x86_64
      yum install zlib-devel.x86_64
      

1.2、安装PostgreSQL12(postgres用户下操作)

  • 切换到postgres用户

    • su - postgres
      
  • 回到用户目录

    • cd ~
      
  • 下载postgresql12源码包

    • wget -c https://ftp.postgresql.org/pub/source/v12.6/postgresql-12.6.tar.gz
      
  • 解压到当前目录

    • tar -zxvf postgresql-12.6.tar.gz
      
  • 配置及安装

    • # 新建PostgreSQL安装路径下的文件夹(/home/postgres/postgresql)
      mkdir postgresql
      # 进入解压后的源码文件夹(/home/postgres/postgresql-12.1)
      cd postgresql-12.6
      # 检查、并配置(--prefix=/home/postgres/postgresql 为配置postgreSQL的安装路径)
      ./configure --prefix=/home/postgres/postgresql
      # 编译及安装
      make && make install
      
    • 环境变量配置

      • vim ~/.bash_profile
        
      • #postgresql安装目录
        PGHOME=/home/postgres/postgresql
        
        #postgresql数据存储目录
        PGDATA=/home/postgres/PGDATA
        
        PATH=$PATH:$HOME/.local/bin:$HOME/bin:$PGHOME/bin
        
        export PATH
        
    • 重载.bash_profile

      • source ~/.bash_profile
        
  • postgresql数据库初始化

    • # /home/postgres/PGDATA为postgres数据文件的存放路径
      initdb -D /home/postgres/PGDATA
      
  • 启动

    • # /home/postgres/PGDATA为数据文件存放路径,里面也有一些配置文件
      pg_ctl -D /home/postgres/PGDATA -l logfile start
      
      #配置postgresql数据存储路径环境变量后用以下简化命令代替
      pg_ctl start
      
  • 停止

    • pg_ctl -D /home/postgres/PGDATA -l logfile stop
      #配置postgresql数据存储路径环境变量后用以下简化命令代替
      pg_ctl stop
      
  • 重启

    • pg_ctl -D /home/postgres/PGDATA -l logfile restart
      #配置postgresql数据存储路径环境变量后用以下简化命令代替
      pg_ctl restart
      
  • 查看状态

    • pg_ctl -D /home/postgres/PGDATA -l logfile status
      #配置postgresql数据存储路径环境变量后用以下简化命令代替
      pg_ctl status
      

2、中文分词环境安装

  • centos7
  • postgresql 12
  • 全文索引的实现要靠 postgresqlgin 索引。分词功能 postgresqlL 内置了英文、西班牙文等,但中文分词需要借助开源插件 zhparser

2.1、SCWS

要使用 zhparser,首先需要安装 SCWS 分词库,SCWS 是 Simple Chinese Word Segmentation 的首字母缩写(即:简易中文分词系统)GitHub

  • 前置条件

    • bzip2

      • yum -y install bzip2
        
    • gcc 编译器

      • yum -y install gcc
        
    • wget

      • yum -y install wget
        
  1. 取得 scws 源码并解压

    • wget -q -O - http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2 | tar xjf -
      
  2. 进入源码目录配置和编译

    • cd scws-1.2.3 ; ./configure ; make install
      

2.2、Zhparser

zhparser是PostgreSQL的中文分词插件,安装后可以使PostgreSQL支持中文的全文检索 GitHub

  • 前置条件

    • git

      • yum -y install git
        
  1. 下载zhparser源码

    • git clone https://github.com/amutu/zhparser.git
      
  2. 编译和安装zhparser

    • make && make install
      

至此postgresql中文检索插件安装完毕

3、postgresql中文检索配置

  • 登录postgresql启用zhparser插件

    • CREATE EXTENSION zhparser;
      
  • 创建使用zhparser作为解析器的全文搜索的配置

    • -- 就是需要给zhparser解析器取一个在sql里面可以使用的名称,一下“zh”则为名称
      CREATE TEXT SEARCH CONFIGURATION zh (PARSER = zhparser);
      
  • 添加token映射

    • ALTER TEXT SEARCH CONFIGURATION zh ADD MAPPING FOR n,v,a,i,e,l WITH simple;
      

4、全文检索使用

4.1、索引创建

create index idx_name on table_name using gin(to_tsvector('zh', field_name));

4.2、查询

SELECT * FROM table_name WHERE to_tsvector('zh', field_name) @@ 'keyword';
 类似资料: