zoukankan      html  css  js  c++  java
  • postgresql全文检索部署实施

    概述

     zhparser 是一个支持中文全文检索的 extension,基于Simple Chinese Word Segmentation(SCWS) 上开发的

    SCWS安装

    下载文件:http://www.xunsearch.com/scws/down/scws-1.2.2.tar.bz2

    解压安装:

    tar xvf scws-1.2.2.tar.bz2
    cd scws-1.2.2
    ./configure
    make install

    zhparser安装

    准备:

    设置环境变量

    PG_HOME=/opt/PostgreSQL/9.6

    PG_BIN=/opt/PostgreSQL/9.6/bin

    PATH=$PATH:$PG_BIN

    下载zhparser:https://github.com/amutu/zhparser/archive/master.zip

    解压并进入解压目录,执行命令:

    SCWS_HOME=/usr/local make && make install

    检查安装结果:

    进入目录/opt/PostgreSQL/9.6/share/postgresql/extension,查看文件列表

    中文分词测试

    1、创建extension:create extension zhparser;

    2、CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser);

    3、ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;

    4、select to_tsvector('testzhcfg','南京市长江大桥');

    结果:

    创建GIN索引

    create index idx_gin_tbl_store_name on poi using gin(to_tsvector('testzhcfg',name_zh));

    执行查询:

     select * from poi where to_tsvector('testzhcfg',name_zh) @@ to_tsquery('testzhcfg','中华人民共和国')

    查询结果:

    注意点:不要随意加limit,不加limit的执行计划为:

    加上limit的执行计划为:

    也就是没有走索引

    扩展词库

    除了zhparser自带的词典,用户可以增加自定义词典,自定义词典的优先级高于自带的词典。自定义词典的文件必须放在share/postgresql/tsearch_data目录中,zhparser根据文件扩展名确定词典的格式类型,.txt扩展名表示词典是文本格式,.xdb扩展名表示这个词典是xdb格式,多个文件使用逗号分隔,词典的分词优先级由低到高,如:

    zhparser.extra_dicts = 'dict_extra.txt,mydict.xdb'

    TXT 词库的写法 (TXT词库目前已兼容 cli/scws_gen_dict 所用的文本词库) **

    1. 每行一条记录,以 # 或 分号开头的相当于注释,忽略跳过

    2. 每行由4个字段组成,依次为“词语"(由中文字或3个以下的字母合成), "TF", "IDF", "词性",字段使用空格或制表符分开,数量不限,可自行对齐以美化

    3. 除“词语”外,其它字段可忽略不写。若忽略,TF和IDF默认值为 1.0 而 词性为 "@"

    4. 由于 TXT 库动态加载(内部监测文件修改时间自动转换成 xdb 存于系统临时目录),故建议TXT词库不要过大

    5. 删除词做法,请将词性设为“!“,则表示该词设为无效,即使在其它核心库中存在该词也视为无效

    更改之后,需要重新启动数据库: bin/pg_ctl -D /data/lilei/postgresql/data/ restart

    附加创建xdb导入、导出工具:http://www.xunsearch.com/scws/download.php、http://www.xunsearch.com/scws/down/phptool_for_scws_xdb.zip

  • 相关阅读:
    leetcode刷题笔记一百四十一题与一百四十二题 环形链表与环形链表2
    leetcode刷题笔记一百三十九题与一百四十题 单词拆分与单词拆分II
    leetcode刷题笔记一百三十八题 复制带随机指针的链表
    leetcode刷题笔记一百三十六题与一百三十七题 只出现一次的数字与只出现一次的数字II
    sklearn.ensemble.RandomForestClassifier 随机深林参数详解
    Python国内镜像地址
    机器学习from(zhouxun-old leader)
    np.argsort()元素从小到大排序后,提取对应的索引index,可以一行搞定排序
    df.mask() 和df.where() 替换方法区别
    sklearn.feature_selection.VarianceThreshold 方差阈值法(过滤法的一种)
  • 原文地址:https://www.cnblogs.com/lilei2blog/p/8031310.html
Copyright © 2011-2022 走看看