postgres-xl 数据库 安装中文分词 zhparser

本文详细记录了在postgres-xl数据库中安装和配置中文分词库zhparser的过程,包括解决在已安装postgresql环境下安装zhparser的复杂问题,提供了一步步的安装步骤和错误处理方法。
摘要由CSDN通过智能技术生成

在工作工作中遇到使用postgres-xl数据库,需要使用中文分词zhparser ,postgresql的zhparser安装使用比较方便,但是postgres-xl在网上却找不到怎么安装 zhparser,于是自己摸索,进过4个小时的尝试,终于安装成功,记录下来分享给大家

    postgres-xl数据库的安装不在这里赘述,网上的安装教程比较多。我是安装了3台Centos服务器,建议没有安装过postgresql,会简单很多。

    

   GTM/GTM_PROXY 在同一台机器

   coordinator/datanode      coord1  dn1  dn2  一个协调器和两个数据节点在一台服务器

  coordinator/datanode      coord2  dn3  dn4  一个协调器和两个数据节点在一台服务器  


    安装目录为:/usr/local/pgxl     

    配置集群,在coord1

                                 alter node coord1 with (type=coordinator,host='XXX.XXX.XXX.XXX', port=11921);

                                 create  node coord2 with (type=coordinator,host='XXX.XXX.XXX.XXX', port=11921);

                                 create node dn1 with (type=datanode, host='XXX.XXX.XXX.XXX',port=11922,primary,preferred);

 create node dn2 with (type=datanode, host='XXX.XXX.XXX.XXX',port=11923);

                                 create node dn3 with (type=datanode, host='XXX.XXX.XXX.XXX',port=11922);

                                 create node dn4 with (type=datanode, host='XXX.XXX.XXX.XXX',port=11923);

  其他节点的配置参考 与此类似,可以参考网上的很多文章

  

   配置完成后启动 集群 网上的文章


   后面是如何安装配置zhparser,建议找一台没有安装过postgresql的机器,会比较方面


   1.先下载 scws-1.2.3.tar.bz2、zhparser  下载链接网上较多,这里不写了

   2.解压 scws-1.2.3.tar.bz

      tar jvxf scws-1.2.3.tar.bz

   3.编译scws

     cd scws-1.2.3 

     ./configure --prefix=/usr/local/pgxl/scws  

     prefix 根据自己的喜好设置

     make && make install

   5.解压 zhparser

     进入zhparser目录,执行

     SCWS_HOME=/usr/local/pgxl/scw make && make install

   正常情况下载这里就完成了,其他的配置按照zhparser 的说明进行



  如果在安装postgres-xl的机器上安装了postgresql,安装zhparser就会复杂一些,需要修改zhparser的Makefile文件

  主要是这里

  #PG_CONFIG = pg_config
  #PGXS := $(shell $(PG_CONFIG) --pgxs)
  PGXS := /usr/local/pgxl/lib/postgresql/pgxs/src/makefiles/pgxs.mk
  #include /usr/local/pgxl/lib/postgresql/pgxs/src/makefiles/pgxs.mk
  include $(PGXS)

  保存以后执行 

  SCWS_HOME=/usr/local/pgxl/scws make

  会出错

  gcc -DPGXC -DXCP -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -   fno-strict-aliasing -fwrapv -O2 -fpic -I/usr/local/pgxl/scws/include/scws  -I. -I./ -I/usr/pgsql-9.4/include/server -I/usr/pgsql-9.4/include/internal -   D_GNU_SOURCE   -c -o zhparser.o zhparser.c
  zhparser.c:10:22: error: postgres.h: No such file or directory
  zhparser.c:11:23: error: miscadmin.h: No such file or directory

  那我们就是直接修改一下 

  gcc -DPGXC -DXCP -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -   fno-strict-aliasing -fwrapv -O2 -fpic -I/usr/local/pgxl/scws/include/scws  -I. -I./ -I/usr/pgsql-9.4/include/server -I/usr/pgsql-9.4/include/internal -    D_GNU_SOURCE   -c -o zhparser.o zhparser.c

 执行下面的命令:

 gcc -DPGXC -DXCP -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -   fno-strict-aliasing -fwrapv -O2 -fpic -I/usr/local/pgxl/scws/include/scws  -I. -I.-I/usr/local/pgxl/include/server -/usr/local/pgxl/include/internal -    D_GNU_SOURCE   -c -o zhparser.o zhparser.c

 编译通过,然后执行

gcc -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -DLINUX_OOM_ADJ=0 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -fpic -shared  zhparser.o  -L/usr/local/pgxl/scws/lib -L/usr/lib64 -lscws -Wl,-rpath -Wl,/usr/local/pgxl/scws/lib -o zhparser.so

 编译成功了 zhparser.so


 需要拷贝一些文件到postgres-xl的目录

cp zhparser.so /usr/local/pgxl/lib/postgresql/zhparser.so

cp zhparser.control /usr/local/pgxl/share/postgresql/extension/

cp zhparser--1.0.sql zhparser--unpackaged--1.0.sql  /usr/local/pgxl/share/postgresql/extension/

cp dict.utf8.xdb rules.utf8.ini /usr/local/pgxl/share/postgresql/tsearch_data/


完成后重新启动postgres 就可以配置zhparser了。


 



 

 

  

  




使用方法:打开scws-1.2.3\win32里的解决方案文件,里面包括了scws和zhparser,另外一个是scws的php扩展不用编译 zhparserPostgresql中进行中文分词的常用扩展,网上的相关资料很多,安装的教程也不少,但大多数是linux的,并没有windows的安装介绍。原因有两个方面,一个是本身像这种数据库服务器一般都是linux系统的,另外一个比较致命,zhparser本身并没提供windows环境下的编译工程,连依赖库scws的readme里也建议在linux环境下使用,或者用cygwin或mingw一类工具。对于博主这种只使用windows环境(其实Postgresql也是刚接触),连makefile也搞不明白的真是头大。好在万变不离其中,编译环境只是工具,只要搞清楚个中原理(看代码),移植到windows+VS的环境应该也不是难事(当然这个也只是在轻量级的库下面适用)。下面进入正题: 干货在这里 ① 编译scws:由于 zhparser是基于scws(scws是简易中文分词系统的缩写,它的原理其实很简单,基于词典,将文本中的内容按照词典进行分词,提取关键字等。)做的分词,因此先要编译scws,网上下载下来的源码有vs2008的版本,因此,直接编译,后来出现头文件无法加入的错误,将相关文件编码方式修改成unicode解决(利用notepad++ 编码->转换为UTF-8编码)。 ② 编译zhparser:由于zhparser只提供了linux下面的makefile文件,想着用Mingw去编译,后来因为postgresql所在目录有空格,导致编译过程也失败。只好到vs2008里自建一个工程,建好工程后,首先把scws的头文件和库文件加进去,然后把postgresql的头文件和库文件加进去,设置项目属性为生成dll文件。 ③ 扩展安装:编译成功以后,在postgresql下面运行:create extension zhparser; 提示找不到control文件,在下载的源码文件夹里找到该文件,放到指定目录,再次运行sql,提示找不到dll文件,将dll文件放到指定目录,再运行,提示找不到zhprs_start函数,看来是dll没有正常explort出函数,修改源代码中的相关函数声明,再次运行后,显示成功。但zhparser源文件下其实还有很多文件,包括一个词典文件和ini配制文件,还不知道应该放在何处。 ④ zhparser运行环境配制:运行测试sql语句,发现并没有实现分词,想起来应该是词典位置不正确,到zhparser源码中去搜寻,发现如下代码,看来是放到tsearch_data目录下面,用同样的方法找到ini文件的目录,将它们都放进去,再次运行测试代码,得到正确结果。 测试代码: REATE EXTENSION zhparser; -- make test configuration using parser CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser); ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple; select to_tsvector('testzhcfg','南京市长江大桥');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值