博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zhparser在windows下的编译安装
阅读量:7009 次
发布时间:2019-06-28

本文共 2277 字,大约阅读时间需要 7 分钟。

hot3.png

最近应项目需求,要在windows下把中文全文检索zhparser编译到postgresql的安装包中。但是网上的资料少之又少,即使有这方面的介绍,最后也有问题没解决。好在最后经过几天的努力终于做出来了。

下面就把我编译的过程,遇到的问题及解决方法记录一下。

  编译环境:        windows 7 (32位)        VS2010        postgresql 9.4版本

前提:

        用VS2010对postgresql进行编译安装。

1. 首先下载scws和zhparser的源码。    

下载scws-1.2.3

 下载已经用vs改进的zhparser工程

2. 把下载的scws和zhparser源码放在同一目录下。

3. 由于下载的scws工程文件是vs2008工程, 这里需要把vs2008工程转换成vs2010

    的工程文件,直接用vs2010打开scws.sln可以自动转换。

4. 用vs2010打开zhparser的工程文件zhparser.sln,此时可以看到vs也会把scws的

    工程加载进来。

    170353_IlFZ_2009022.png

5. 先编译scws,生成libscws.lib静态库。

    编译前,现在scws工程属性 --> C/C++ --> 常规的‘附加包含目录’添加头文件目录。

C:\Source\3.0\scws\libscws;C:\hgsql\3.0\include;C:\hgsql\3.0\include\server;C:\hgsql\3.0\include\server\utils;C:\hgsql\3.0\include\server\port;C:\hgsql\3.0\include\server\port\win32;C:\hgsql\3.0\include\server\port\win32_msvc;%(AdditionalIncludeDirectories)

    这里大家可根据自己安装包目录修改一下。

6. 右击项目,执行生成命令时,可能会提示以下错误。

    170724_vxCd_2009022.png

    这是由于这个宏在定义时,后面带有中文字符造成的,打开xdict.h文件,去掉这些中文字符。

    170851_DWji_2009022.png

7. 下面编译zhparser。

    同样把上面的头文件路径添加到zhparser的头文件目录中,另外还要把在

    属性 --> 链接器 --> 常规中的’附加库目录’添加以下路径:

C:\hgsql\3.0\lib;C:\Source\3.0\zhparser-master;%(AdditionalLibraryDirectories)

    重新执行生成命令,提示一下错误:

    171159_1t0q_2009022.png

    这个头文件在gettext工具(postgresql在编译前会预先下载这个工具)里,把libintl.h拷贝到pg安装包

    的include目录里,重新执行生成命令,在zhparser-master\Release下就生成我们所需要的

    zhparser.dll。

8. 把生成zhparser.dll拷贝到pg安装包的lib目录,把zhparser源码下的三个文件

    171651_vWzj_2009022.png

    拷到pg安装包的share\extension目录下。

 

此时我们就把编译zhparser的工作完成了,下面就开始测试是否可行。

1. 打开pgsql命令行,相继执行一下sql语句。    

CREATE EXTENSION zhparser;CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = 'zhparser');ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;

但是执行到第三个sql语句时,数据库出现崩溃。最后经过一番跟踪发现是在zhparser.c文件中,程序执

行到下面的pstrdup时出现的问题:

172031_ut2M_2009022.png

    解决这一问题的方法是写一个函数pstrdup_call替换掉上面pstrdup函数。

char *pstrdup_call(const char *src){	char *dst;	int len;	if (src == NULL) 		return NULL;	len = strlen(src) + 1;	dst = (char *) palloc(len);	memcpy(dst, src, len);	return dst;}

    替换完重新生成zhparser.dll库,替换掉拷贝到pg安装包的lib下的库。

    重新执行上面sql语句成功。

2. 接着执行一下sql语句:

select ts_token_type('zhparser');select * from ts_parse('zhparser','保障房资金压力');

但执行第二个语句时显示:

172343_Fvgs_2009022.png

    从上面执行结果看,zhparser并没有对输入的字符串进行正确分词。

    根据红框的内容提示,发现是因为在pg安装包下share/tsearch_data目录下

    没有dict.utf8.xdb词典造成的。

    把zhparser源码目录下的dict.utf8.xdb拷到share/tsearch_data目录下。

    重新执行上面sql语句,结果正常。

    172630_k52a_2009022.png

这样,就把zhparser在windows下成功编译出来了。

 

参考文档:https://github.com/kerneltravel/zhparser

转载于:https://my.oschina.net/tianbing/blog/798990

你可能感兴趣的文章
Windows10下安装spacemacs
查看>>
ELK平台介绍
查看>>
我的推理逻辑设计图
查看>>
关于PHP通过PDO用中文条件查询MySQL的问题。
查看>>
算法 - 理论基础
查看>>
OSChina 技术周刊第二十四期 —— C# 6.0 的新特性
查看>>
Netty NIO 框架性能压测 – 长链接
查看>>
Quartz2.2.1简单使用
查看>>
scrapy在spider中通过pipeline获取数据库内容
查看>>
spring 抽象类注入方式
查看>>
android:dataPath解析
查看>>
AVYAY交换机参考,CM常见命令中文解释
查看>>
angular ui-bootstrap datepicker第二次点击没有显示时间选择 解决方案
查看>>
zhuce
查看>>
Java 多线程
查看>>
InstallCert.java
查看>>
在Debian 7上配置Nginx + php-FPM + apc + MariaDB(翻译)
查看>>
解决Maven多模块项目,MavenWeb项目依赖的项目,修改无法立即生效问题
查看>>
XMPP协议实现原理介绍
查看>>
Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor...
查看>>