2024.02.03修改,添加关键词增加了独占锁.
cd D:\build
git clone https://github.com/jaiminpan/pg_jieba
git clone --depth=10 --branch=master git://github.com/yanyiwu/cppjieba.git
# 复制cppjieba/deps至pg_jieba/libjieba
# 复制cppjieba/include至pg_jieba/libjieba
# 复制cppjieba/dict至pg_jieba/libjieba
去掉".token =" 和 “.descr =”.
改完后的效果
/*-------------------------------------------------------------------------
*
* jieba_token.c
* token description
*
* Author: Jaimin Pan
*
* IDENTIFICATION
* jieba_token.h
*
*-------------------------------------------------------------------------
*/
#ifndef JIEBA_TOKEN_H_
#define JIEBA_TOKEN_H_
typedef struct TokenDescData {
const char* token;
const char* descr;
} TokenDescData;
typedef struct TokenDescData *TokenDesc;
static const TokenDescData lex_descr[] =
{
{ "", ""},
{ "eng", "letter"},
{ "nz", "other proper noun"},
{ "n", "noun"},
{ "m", "numeral"},
{ "i", "idiom"},
{ "l", "temporary idiom"},
{ "d", "adverb"},
{ "s", "space"},
{ "t", "time"},
{ "mq", "numeral-classifier compound"},
{ "nr", "person's name"},
{ "j", "abbreviate"},
{ "a", "adjective"},
{ "r", "pronoun"},
{ "b", "difference"},
{ "f", "direction noun"},
{ "nrt", "nrt"},
{ "v", "verb"},
{ "z", "z"},
{ "ns", "location"},
{ "q", "quantity"},
{ "vn", "vn"},
{ "c", "conjunction"},
{ "nt", "organization"},
{ "u", "auxiliary"},
{ "o", "onomatopoeia"},
{ "zg", "zg"},
{ "nrfg", "nrfg"},
{ "df", "df"},
{ "p", "prepositional"},
{ "g", "morpheme"},
{ "y", "modal verbs"},
{ "ad", "ad"},
{ "vg", "vg"},
{ "ng", "ng"},
{ "x", "unknown"},
{ "ul", "ul"},
{ "k", "k"},
{ "ag", "ag"},
{ "dg", "dg"},
{ "rr", "rr"},
{ "rg", "rg"},
{ "an", "an"},
{ "vq", "vq"},
{ "e", "exclamation"},
{ "uv", "uv"},
{ "tg", "tg"},
{ "mg", "mg"},
{ "ud", "ud"},
{ "vi", "vi"},
{ "vd", "vd"},
{ "uj", "uj"},
{ "uz", "uz"},
{ "h", "h"},
{ "ug", "ug"},
{ "rz", "rz"}
};
/* Start From 1 and LASTNUM is the last number */
extern int LASTNUM;
#endif /* JIEBA_TOKEN_H_ */
#ifndef H_3069A164_35BD_4687_868B_1F5B20E2030E
#define H_3069A164_35BD_4687_868B_1F5B20E2030E
#include
#include
PGDLLEXPORT void _PG_init(void);
PGDLLEXPORT void _PG_fini(void);
PGDLLEXPORT Datum jieba_start(PG_FUNCTION_ARGS);
PGDLLEXPORT Datum jieba_query_start(PG_FUNCTION_ARGS);
PGDLLEXPORT Datum jieba_mp_start(PG_FUNCTION_ARGS);
PGDLLEXPORT Datum jieba_hmm_start(PG_FUNCTION_ARGS);
PGDLLEXPORT Datum jieba_gettoken(PG_FUNCTION_ARGS);
PGDLLEXPORT Datum jieba_end(PG_FUNCTION_ARGS);
PGDLLEXPORT Datum jieba_lextype(PG_FUNCTION_ARGS);
PGDLLEXPORT Datum jieba_reload_dict(PG_FUNCTION_ARGS);
#endif /*H_3069A164_35BD_4687_868B_1F5B20E2030E*/
大约在45行
//引用头文件pg_main.h
#include "pg_main.h"
/*
* prototypes
*/
PG_FUNCTION_INFO_V1(jieba_start);
//Datum jieba_start(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(jieba_query_start);
//Datum jieba_query_start(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(jieba_mp_start);
//Datum jieba_mp_start(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(jieba_hmm_start);
//Datum jieba_hmm_start(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(jieba_gettoken);
//Datum jieba_gettoken(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(jieba_end);
//Datum jieba_end(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(jieba_lextype);
//Datum jieba_lextype(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(jieba_reload_dict);
//Datum jieba_reload_dict(PG_FUNCTION_ARGS);
添加以下内容
#修改cmake最小版本需求,pg_jieba使用的是cmake2版本
cmake_minimum_required(VERSION 3.11)
#message(STATUS "Setting ${CMAKE_PROJECT_NAME} build type - ${CMAKE_BUILD_TYPE}")后面添加以下内容
IF (MSVC)
#设置编译器标准
#set(CMAKE_C_STANDARD 99)
#set(CMAKE_CXX_STANDARD 17)
#set(CMAKE_CXX_STANDARD_REQUIRED ON)
#宏定义
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
add_definitions(-D_HAS_AUTO_PTR_ETC=1)
add_definitions(-D_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING)
#引用PostgreSQL头文件
IF (NOT DEFINED ENV{PostgreSQL_INCLUDE_DIR})
set(PostgreSQL_INCLUDE_DIR "C:/pgsql/include/server/port/win32_msvc;C:/pgsql/include/server/port/win32;C:/pgsql/include;C:/pgsql/include/server;")
ENDIF ()
#使用pg_config获取PostgreSQL的基本配置信息
IF (NOT DEFINED ENV{PostgreSQL_PG_CONFIG})
set(PostgreSQL_PG_CONFIG "C:/pgsql/bin/pg_config.exe")
ENDIF ()
#链接PostgreSQL库文件
IF (NOT DEFINED ENV{PostgreSQL_LIBRARY})
set(PostgreSQL_LIBRARY "C:/pgsql/lib/postgres.lib")
ENDIF ()
#设置PostgreSQL库目录
IF (NOT DEFINED ENV{PostgreSQL_LIBRARY_DIRS})
set(PostgreSQL_LIBRARY_DIRS "C:/pgsql/lib")
ENDIF ()
ENDIF ()
#删除所有PostgreSQL_TYPE_INCLUDE_DIR
#在add_library(${PG_JIEBA_LIBRARY_NAME} ${LIBRARY_MODE_TARGET} ${SOURCE_FILES})后面添加一行
TARGET_LINK_LIBRARIES(${PG_JIEBA_LIBRARY_NAME} ${PostgreSQL_LIBRARY})
以下所有命令均在“开始-》Visual Studio 2019-》x64 Native Tools Command Prompt for VS 2019”命令行中执行.
#namke 不能编译,修改了CMakelist.txt后加在项目文件中自动生成几个字符"没有被记录",暂时未找到原因
#cmake -G "NMake Makefiles" -Wno-dev -DCMAKE_BUILD_TYPE=Release -B vc_build -S .
#cmake --build vc_build --config Release
#cmake --install build --config Release
rd /S /Q vc_build
cmake-gui -Wno-dev -DCMAKE_BUILD_TYPE=Release -B vc_build -S .
#点击"Configure"后选择"Visual Studio 16 2019"和x64,然后点击"Finish"
#完成后点击"Generate",在"Generate"成功后要修改一下vc_build\pg_jieba.vcxproj,用文本编辑器打开修改,查找删除"没有被记录"这几个字符,修改完成后保存
#打开"Visual Studio",选择"Release x64",然后在项目"INSTALL"上右键编译, "Visual Studio"即开始编译并安装
#注意:编译完成安装成功后要修改文件名
del C:\pgsql\lib\pg_jieba.dll
rename C:\pgsql\lib\libpg_jieba.dll pg_jieba.dll
#查看依赖和导出(可选)
dumpbin /DEPENDENTS C:/pgsql/lib/pg_jieba.dll
dumpbin /EXPORTS C:/pgsql/lib/pg_jieba.dll
有关更多信息请参看:(GitHub - fxsjy/jieba: 结巴中文分词)
#库文件,用于pg_jieba二次开发,如果没有可以删除
C:/pgsql/lib/pg_jieba.lib
#pg启动时会加载这个dll和加载字典数据
C:/pgsql/lib/libpg_jieba.dll
#pg专用控制文件(不能修改,必须要)
C:/pgsql/share/extension/pg_jieba.control
#pg_jieba中的函数定义(不能修改,必须要)
C:/pgsql/share/extension/pg_jieba--1.1.1.sql
#后面的都是字典数据,如果要添加自定义数据,请在share/tsearch_data/jieba_user.dict中添加.具体信息请参看结巴中文分词
C:/pgsql/share/tsearch_data/jieba_base.dict
C:/pgsql/share/tsearch_data/jieba_hmm.model
C:/pgsql/share/tsearch_data/jieba_user.dict
C:/pgsql/share/tsearch_data/jieba.stop
C:/pgsql/share/tsearch_data/jieba.idf
自定义数据设置完成后,无需重启数据库,执行以下命令即可(可能需要管理员权限)
select jieba_reload_dict()
只要服务器的PostgreSQL版本和你编译pg_jieba时的PostgreSQL版本一致,你只要复制上述安装文件至服务器上即可,服务器不需要重新编译.
shared_preload_libraries = 'pg_jieba' # (change requires restart)
C:/pgsql/bin/pg_ctl -D F:/pgdata stop -m fast
C:/pgsql/bin/pg_ctl -D F:/pgdata start
c:\pgsql\bin\psql -h 127.0.0.1 -U postgres
create extension pg_jieba;
select * from to_tsquery('jiebacfg', '是拖拉机学院手扶拖拉机专业的。不用多久,我就会升职加薪,当上CEO,走上人生巅峰。');
to_tsquery
----------------------------------------------------------------------------------------------------------------------------------
'拖拉机' & '学院' & '手扶拖拉机' & '专业' & '不用' & '多久' & '会' & '升职' & '加薪' & '当上' & 'ceo' & '走上' & '人生' & '巅峰'