postgresql全文检索之pg_jieba编译及使用

文章讲述了在地理信息应用中地址关键词检索的重要性,介绍了PostgreSQL强大的文本搜索能力,特别是其全文检索和模糊查询特性,以及如何通过pg_jieba插件结合jieba分词库提升中文地址检索效率。
摘要由CSDN通过智能技术生成

在地图或地理信息有关的场景里 ,地址关键词的检索尤其重要。比如打开百度地图,想要查询某个位置的信息“北京市海淀区清华东路17号中国农业大学”,往往我们输入的是关键词“中国农业大学”而不是精确到街道的详细地址信息。在地址关键词检索的背后,需要的是一款可以支持全文检索和模糊查询的数据库与之匹配,以此快速提高地址检索的效率。
PostgreSQL被誉为“世界上可获得的最先进的开源数据库 ”,拥有很强的文本搜索能力,不仅支持全文检索,PostgreSQL还支持模糊查询、正则查询。除此之外,PostgreSQL还内置了表达式索引、Gin索引功能,配合丰富的插件生态,在地址关键词检索方向有比较大的优势。

jieba结巴分词是一个强大的分词库,分词更加贴合业务属性特点,主要功能包含:支持不同模式的分词、自定义字典、关键字提取、词性标注。pg_jieba运用了jieba分词算法,构建了PostgreSQL中文分词插件,分词效果也有不错的表现。

#预先安装好cmake编译工具,此处不再赘述
g++ (version >= 4.1 is recommended) or clang++;
cmake (version >= 2.6 is recommended);
#安装PG相关依赖
sudo yum install postgresql postgresql-server postgresql-devel
#git下载pg_jieba,无Git命令可单独下载解压安装
git clone https://github.com/jaiminpan/pg_jieba
cd pg_jieba
mkdir build
cd build
cmake -D PostgreSQL_TYPE_INCLUDE_DIR=/opt/highgo/hgdb-see-4.5.8/include/postgresql/server ..
make && make install
#登录数据库创建pg_jieba扩展:
create extension pg_jieba;
EXAMPLE:
highgo=# create extension pg_jieba; 
highgo=# select * from to_tsquery('jiebacfg', '是拖拉机学院手扶拖拉机专业的。'); to_tsquery
'拖拉机' & '学院' & '手扶拖拉机' & '专业' (1 row)
highgo=# select * from to_tsvector('jiebacfg', '是拖拉机学院手扶拖拉机专业的。不用多久,我就会升职加薪,当上CEO,走上人生巅峰。'); to_tsvector
'ceo':18 '不用':8 '专业':5 '人生':21 '会':13 '加薪':15 '升职':14 '多久':9 '学院':3 '巅峰':22 '当上':17 '手扶拖拉机':4 '拖拉机':2 '走上':20 (1 row)

highgo=# select * from ts_token_type('jieba');
tokid | alias |         description
-------+-------+-----------------------------
   1 | eng   | letter
   2 | nz    | other proper noun
   3 | n     | noun
... ...
... ...
  55 | ug    | ug
  56 | rz    | rz
  57 |       |
(56 rows)

highgo=# select * from ts_debug('jiebacfg', '是拖拉机学院手扶拖拉机专业的。');
alias |  description  |   token    | dictionaries | dictionary |   lexemes
-------+---------------+------------+--------------+------------+--------------
v     | verb          || {jieba_stem} | jieba_stem | {}
n     | noun          | 拖拉机     | {jieba_stem} | jieba_stem | {拖拉机}
n     | noun          | 学院       | {jieba_stem} | jieba_stem | {学院}
n     | noun          | 手扶拖拉机 | {jieba_stem} | jieba_stem | {手扶拖拉机}
n     | noun          | 专业       | {jieba_stem} | jieba_stem | {专业}
uj    | uj            || {jieba_stem} | jieba_stem | {}
x     | unknown       || {jieba_stem} | jieba_stem | {}

PS:当通过shared_preload_libraries加载pg_jieba时,以下配置选项可用,可以添加到postgresql.conf中

pg_jieba.hmm_model(需要重新启动)hmm模型文件。

pg_jieba.base_dict(需要重新启动)基本字典。

pg_jieba.user_dict(需要重新启动)特定用户词典名称的csv列表(不包括后缀.dict)。所有这些都应位于目录tsearch_data中。

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值