我的编程空间,编程开发者的网络收藏夹
学习永远不晚

深入了解zhparser

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

深入了解zhparser

瀚高数据库
目录
环境
文档用途
详细信息

环境
系统平台:N/A
版本:14
文档用途
本文参考《zhparser全文检索》,文章ID:051686104;对其进行互补,对zhparser进行进一步的了解。

详细信息
1、介绍

Zhparser是一个PostgreSQL扩展,用于中文全文搜索。它实现了一个基于简单中文分词(SCWS)的中文解析器。

SCWS 是 Simple Chinese Word Segmentation 的首字母缩写(即:简易中文分词系统)。这是一套基于词频词典的机械式中文分词引擎,它能将一整段的中文文本基本正确地切分成词。词是 中文的最小语素单位,但在书写时并不像英语会在词之间用空格分开,所以如何准确并快速分词一直是中文分词的攻关难点。

PHP 分词演示地址如下:

GBK http://www.xunsearch.com/scws/demo/v4.phpUTF-8 http://www.xunsearch.com/scws/demo/v48.php繁体中文 http://www.xunsearch.com/scws/demo/v48.cht.php整个全文搜索功能都是在PostgreSQL内置的全文搜索功能基础上实现的,Zhparser在很大程度上实现了对中文文本的解析。

安装

安装过程请参考《文章ID:051686104》,可能遇到的安装问题如下:

1)建议从官网下载scws源码,如果是从github上下载的scws源码需要先运行以下命令生成configure文件:

aclocal; autoconf; autoheader; libtoolize; automake --add-missing

2)已安装多个PG版本问题,报错如下:

[40861] ERROR:  incompatible library "/opt/postgresql-14/lib/zhparser.so": version mismatch[ 40861] DETAIL:  Server is version 14, library is version 12.[40861] STATEMENT:  create extension zhparser ;ERROR:  incompatible library "/opt/postgresql-14/lib/zhparser.so": version mismatchDETAIL:  Server is version 14, library is version 12.

解决:

export SCWS_HOME=/opt/scws-1.2.3make PG_CONFIG=/opt/postgresql-14/bin/pg_configmake instal

配置

1)创建使用zhparser作为解析器的全文搜索的配置

   create text search configuration zh_cn (PARSER = zhparser);

2)解析器配置

zhparser.multi_short = f    短词复合zhparser.multi_duality = f  散字二元复合zhparser.multi_zmain = f    重要单字复合zhparser.multi_zall = f     全部单字复合zhparser.punctuation_ignore = f   忽略所有的标点等特殊符号zhparser.seg_with_duality = f   闲散文字自动以二字分词法聚合zhparser.dict_in_memory = f         将词典全部加载到内存里zhparser.extra_dicts = ‘dict_extra.txt,mydict.xdb’   用户自定义词典

此处先不配置采用默认的,后面根据业务场景的使用再进行特殊配置;默认全部off。

词性配置

zhparser目前支持26种词性配置,即26个英文字母代表的词性;其词性标注来自北大词性标注版本。

1)将词性添加到词典使其支持此类词性

postgres=# alter text search configuration zh_cn add mappingfor a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,zwith simple;

注:①词性配置带有唯一约束;

②这里的simple是PostgreSQL自带的词典模板,包含:Simple Dictionary、Synonym Dictionary、Thesaurus Dictionary、Ispell Dictionary、Snowball Dictionary等;词典的目的是为了忽略文本中重复出现次数多而又没啥具体意义的词,比如:的、了等;这些词在本模块称为“Stop Words”,可以称为可忽略词。

2)相关配置在数据库的体现,如下:

① 已存在的解析器

zhparser=# \dFp            List of text search parsers Schema  |  Name  |  Description-----------+----------+---------------------pg_catalog | default  | default word parserpublic   | zhparser |

② 默认的词典

zhparser=# \dFt                     List of text search templates   Schema   |   Name    |        Description------------+-----------+----------------------------------------------------------- pg_catalog | ispell    | ispell dictionary pg_catalog | simple    | simple dictionary: just lower case and check for stopword pg_catalog | snowball  | snowball stemmer pg_catalog | synonym   | synonym dictionary: replace word by its synonym pg_catalog | thesaurus | thesaurus dictionary: phrase by phrase substitution

③ 默认的对应每一种语言的语义词干,共29种

zhparser=# \dFd   List of text search dictionaries   Schema   |      Name       |                        Description------------+-----------------+----------------------------------------------------------- pg_catalog | arabic_stem     | snowball stemmer for arabic language pg_catalog | armenian_stem   | snowball stemmer for armenian language pg_catalog | basque_stem     | snowball stemmer for basque language pg_catalog | catalan_stem    | snowball stemmer for catalan language pg_catalog | danish_stem     | snowball stemmer for danish language pg_catalog | dutch_stem      | snowball stemmer for dutch language pg_catalog | english_stem    | snowball stemmer for english language pg_catalog | finnish_stem    | snowball stemmer for finnish language

④各种语言的搜索配置,共29种

zhparser=# \dF                List of text search configurations   Schema   |    Name    |              Description------------+------------+--------------------------------------- pg_catalog | arabic     | configuration for arabic language pg_catalog | armenian   | configuration for armenian language pg_catalog | basque     | configuration for basque language pg_catalog | catalan    | configuration for catalan language pg_catalog | danish     | configuration for danish language pg_catalog | dutch      | configuration for dutch language pg_catalog | simple     | simple configuration pg_catalog | tamil      | configuration for tamil language pg_catalog | turkish    | configuration for turkish language pg_catalog | yiddish    | configuration for yiddish language public     | zh_cn      |

⑤ 针对各种语言搜索配置的语义词干词性,太多了,只展示我们自己配置的

zhparser=# \dF+  Text search configuration "public.zh_cn"Parser: "public.zhparser" Token | Dictionaries-------+-------------- a     | simple b     | simple c     | simple d     | simple e     | simple f     | simple g     | simple h     | simple i     | simple j     | simple k     | simple l     | simple m     | simple n     | simple o     | simple p     | simple q     | simple r     | simple s     | simple t     | simple u     | simple v     | simple w     | simple x     | simple y     | simple z     | simple

测试

create table test_zhparser(pn_name varchar(1000));insert into test_zhparser values ('三次学习会议精神');create index idx_pname on test_zhparser using gin(to_tsvector('zh_cn', pn_name));zhparser=# select  pn_name from test_zhparserwhere to_tsvector('zh_cn', pn_name) @@ plainto_tsquery('zh_cn', '导向基础研究');         pn_name------------------------------------ 有组织推进战略导向的体系化基础研究 前沿导向的探索性基础研究 市场导向的应用性基础研究

解析函数

1 to_tsvector([config regconfig,]document text)

①用于将文本(查询字段)转换为tsvector数据类型;

②将文本文档解析为标记,将标记减少为单词,并返回一个tsvector,列出单词及其在文档中的位置。文档将根据指定的或默认的文本搜索配置进行处理。

如下例子:

zhparser=# SELECT to_tsvector('english', 'a fat  cat sat on a mat - it ate a fat rats');                     to_tsvector----------------------------------------------------- 'ate':9 'cat':3 'fat':2,11 'mat':7 'rat':12 'sat':4zhparser=# SELECT to_tsvector('zh_cn', 'a fat  cat sat on a mat - it ate a fat rats');         to_tsvector-------------------------------------------------------------------------------------- '-':8 'a':1,6,11 'ate':10 'cat':3 'fat':2,12 'it':9 'mat':7 'on':5 'rats':13 'sat':4zhparser=# SELECT to_tsvector('english', '有组织推进战略导向的体系化基础研究');              to_tsvector---------------------------------------- '有组织推进战略导向的体系化基础研究':1zhparser=# SELECT to_tsvector('zh_cn', '有组织推进战略导向的体系化基础研究');           to_tsvector------------------------------------------------------------------------------------------ '体系':8 '体系化':7 '基础':9 '导向':5 '战略':4 '推进':3 '有':1 '的':6 '研究':10 '组织':2

以上示例中,生成的tsvector不包含单词a、on或it,单词rats变为rat,标点符号-被忽略,这些词在官方称为“Stop Words”,就是可忽略词;a、on、it已被忽略,的却没有被忽略,这是词典配置策略问题;请参考最后的《Stop Words》章节。

2 将查询条件转换为tsquery数据类型的to_tsquery、plasto_tsquery、phraseto_tsquery和websearch_to_tsquery函数

①to_tsquery([config regconfig,]querytext文本)

 从querytext创建一个tsquery值,该值必须由tsquery运算符&(AND)、|(OR)、!分隔的单个标记组成!(NOT)和<->(FOLLOWED BY),可以使用括号分组;换句话说,to_tsquery的输入必须遵循tsquery输入的一般规则。

②plainto_tsquery([ config regconfig, ] querytext text)

 将未格式化的文本querytext转换为tsquery值,文本与to_tsvector一样被解析和规范化,然后将&(and)运算符插入保留单词之间。

③phraseto_tsquery([config regconfig,]querytext文本)

 类似plainto_tsquery ,只是它在保留单词之间插入<->(FOLLOWED BY)运算符,而不是&(AND)运算符;此外,可忽略词不是简单地丢弃,而是通过插入运算符而不是<->运算符来解析。

④websearch_to_tsquery([config regconfig,]querytext text)

 使用另一种语法从querytext创建tsquery值,其中简单的无格式文本是有效的;与plainto_tsquery和phraseto_tsquery不同,它还识别某些运算符。

例子如下:

zhparser=# select to_tsquery('zh_cn', '有组织推进战略导向的体系化基础研究');   to_tsquery                       ---------------------------------------------------------------------------------------------------------'有' <-> '组织' <-> '推进' <-> '战略' <-> '导向' <-> '的' <-> '体系化' <-> '体系' <-> '基础' <-> '研究'zhparser=# select plainto_tsquery('zh_cn', '有组织推进战略导向的体系化基础研究');   plainto_tsquery                       ---------------------------------------------------------------------------------------'有' & '组织' & '推进' & '战略' & '导向' & '的' & '体系化' & '体系' & '基础' & '研究‘zhparser=# select phraseto_tsquery('zh_cn', '有组织推进战略导向的体系化基础研究');   phraseto_tsquery                     ---------------------------------------------------------------------------------------------------------'有' <-> '组织' <-> '推进' <-> '战略' <-> '导向' <-> '的' <-> '体系化' <-> '体系' <-> '基础' <-> '研究'zhparser=# select websearch_to_tsquery('zh_cn', '有组织推进战略导向的体系化基础研究');   websearch_to_tsquery             ---------------------------------------------------------------------------------------------------------'有' <-> '组织' <-> '推进' <-> '战略' <-> '导向' <-> '的' <-> '体系化' <-> '体系' <-> '基础' <-> '研究‘

高亮显示

zhparser=# select ts_headline('zh_cn',pn_name,plainto_tsquery('zh_cn', '导向性基础研究'))        from test_zhparser where to_tsvector('zh_cn', pn_name) @@ plainto_tsquery('zh_cn', ' 导向基础研究');                   ts_headline-------------------------------------------------------------有组织推进战略<b>导向</b>的体系化体系<b>基础</b><b>研究</b>前沿<b>导向</b>的探索性探索<b>基础</b><b>研究</b>市场<b>导向</b>的应用性应用<b>基础</b><b>研究</b>
zhparser=# select ts_headline(  'zh_cn',                       pn_name,                       plainto_tsquery('zh_cn', '导向性基础研究'),                       'StartSel='''',                       StopSel=</font>' )        from test_zhparser        where to_tsvector('zh_cn', pn_name) @@ plainto_tsquery('zh_cn', ' 导向基础研究');  ts_headline-------------------------------------------------------------------------------------------------------------------

有组织推进战略导向的体系化体系基础研究

前沿导向的探索性探索基础研究

市场导向的应用性应用基础研究

ts_headline([ config regconfig, ] document text, query tsquery [, options text ]) returns text
options支持以下选项:

MaxWords,MinWords(整数):这些数字决定要输出的最长和最短标题;默认值为35和15。

ShortWord(整数):此长度或以下的单词将在标题的开头和结尾处删除,除非它们是查询词,默认值为3。

HighlightAll(布尔值):如果为true,则整个文档将用作标题,忽略前面的三个参数;默认值为false。

MaxFragments(整数):要显示的最大文本片段数;默认值为零。

StartSel、StopSel(字符串):用于分隔文档中出现的查询词的字符串,以将其与其他摘录词区分开来;默认值为“”和“”,可适用于HTML输出。

FragmentDelimiter(字符串):当显示多个片段时,这些片段将由该字符串分隔;默认值为“…”。

如上查询结果在HTML显示如下:
image.png

排序

根据文档与查询条件的相关性,对查询结果进行排序,优先显示最相关的结果。提供了两个排序函数ts_rank和ts_rank_cd,相关性包含了频次、词位、接近度、结构信息等维度。其实相关性的概念是非常模糊的,而且与实际的业务场景是紧密相关的。这两个内置函数只是例子,我们可以编写自己的排序函数或者与其他相关因素叠加,来实现匹配自己业务场景的需求。

频次:搜索条件出现的次数

词位:搜索条件在文本中出现的位置,从头开始算,可忽略词不计算位置

接近度:搜索条件和文本位置的接近程度

结构信息:搜索条件在文本中的重要程度

通过以下例子可以展示相关性的几个维度标准,如下:

#zhparser.multi_short=‘on’
#zhparser.multi_duality=‘on’
#zhparser.multi_zmain=‘on’
#zhparser.multi_zall=‘on’

zhparser.multi_short=‘on’
zhparser.multi_duality=‘on’
zhparser.multi_zmain=‘on’
zhparser.multi_zall=‘on’
ts_rank_cd(to_tsvector(‘zh_cn’, c1), to_tsquery(‘zh_cn’, ‘长江’))
长江频雨后,明月众星中
长江险可逾,蜀道难可陟
长江为杯斗为构,一饮天地生春红
且归来,谈笑护长江,波澄碧
昔人不可见,长江无尽时
我住长江头,君住长江尾
哀吾生之须臾,羡长江之无穷

ts_rank_cd(to_tsvector(‘zh_cn’, c1), to_tsquery(‘zh_cn’, ‘长江’))
长江频雨后,明月众星中
长江险可逾,蜀道难可陟
长江为杯斗为构,一饮天地生春红
且归来,谈笑护长江,波澄碧
昔人不可见,长江无尽时
我住长江头,君住长江尾
哀吾生之须臾,羡长江之无穷

ts_rank_cd(to_tsvector(‘zh_cn’, c1), to_tsquery(‘zh_cn’, ‘长江’),2)
长江频雨后,明月众星中
昔人不可见,长江无尽时
我住长江头,君住长江尾
且归来,谈笑护长江,波澄碧
长江险可逾,蜀道难可陟
哀吾生之须臾,羡长江之无穷
长江为杯斗为构,一饮天地生春红

ts_rank_cd(to_tsvector(‘zh_cn’, c1), to_tsquery(‘zh_cn’, ‘长江’),2)
长江险可逾,蜀道难可陟
长江频雨后,明月众星中
昔人不可见,长江无尽时
我住长江头,君住长江尾
哀吾生之须臾,羡长江之无穷
且归来,谈笑护长江,波澄碧
长江为杯斗为构,一饮天地生春红

ts_rank_cd(to_tsvector(‘zh_cn’, c1), to_tsquery(‘zh_cn’, ‘长江’),0|1|2|4)
长江频雨后,明月众星中
昔人不可见,长江无尽时
我住长江头,君住长江尾
且归来,谈笑护长江,波澄碧
长江险可逾,蜀道难可陟
哀吾生之须臾,羡长江之无穷
长江为杯斗为构,一饮天地生春红

ts_rank_cd(to_tsvector(‘zh_cn’, c1), to_tsquery(‘zh_cn’, ‘长江’),0|1|2|4)
长江险可逾,蜀道难可陟
长江频雨后,明月众星中
昔人不可见,长江无尽时
我住长江头,君住长江尾
哀吾生之须臾,羡长江之无穷
且归来,谈笑护长江,波澄碧
长江为杯斗为构,一饮天地生春红

ts_rank(to_tsvector(‘zh_cn’, c1), to_tsquery(‘zh_cn’, ‘长江’))
长江频雨后,明月众星中
长江险可逾,蜀道难可陟
长江为杯斗为构,一饮天地生春红
且归来,谈笑护长江,波澄碧
昔人不可见,长江无尽时
我住长江头,君住长江尾
哀吾生之须臾,羡长江之无穷

ts_rank(to_tsvector(‘zh_cn’, c1), to_tsquery(‘zh_cn’, ‘长江’))
我住长江头,君住长江尾
长江险可逾,蜀道难可陟
长江为杯斗为构,一饮天地生春红
长江频雨后,明月众星中
昔人不可见,长江无尽时
哀吾生之须臾,羡长江之无穷
且归来,谈笑护长江,波澄碧

ts_rank(to_tsvector(‘zh_cn’, c1), to_tsquery(‘zh_cn’, ‘长江’),2)
长江频雨后,明月众星中
昔人不可见,长江无尽时
我住长江头,君住长江尾
且归来,谈笑护长江,波澄碧
长江险可逾,蜀道难可陟
哀吾生之须臾,羡长江之无穷
长江为杯斗为构,一饮天地生春红

ts_rank(to_tsvector(‘zh_cn’, c1), to_tsquery(‘zh_cn’, ‘长江’),2)
我住长江头,君住长江尾
长江险可逾,蜀道难可陟
长江频雨后,明月众星中
昔人不可见,长江无尽时
哀吾生之须臾,羡长江之无穷
且归来,谈笑护长江,波澄碧
长江为杯斗为构,一饮天地生春红

ts_rank(to_tsvector(‘zh_cn’, c1), to_tsquery(‘zh_cn’, ‘长江’),0|1|2|4)
长江频雨后,明月众星中
昔人不可见,长江无尽时
我住长江头,君住长江尾
且归来,谈笑护长江,波澄碧
长江险可逾,蜀道难可陟
哀吾生之须臾,羡长江之无穷
长江为杯斗为构,一饮天地生春红

ts_rank(to_tsvector(‘zh_cn’, c1), to_tsquery(‘zh_cn’, ‘长江’),0|1|2|4)
我住长江头,君住长江尾
长江险可逾,蜀道难可陟
长江频雨后,明月众星中
昔人不可见,长江无尽时
哀吾生之须臾,羡长江之无穷
且归来,谈笑护长江,波澄碧
长江为杯斗为构,一饮天地生春红

自定义词库

两种方式:

1)解析器配置:zhparser.extra_dicts = ‘dict_extra.txt,mydict.xdb’;

2)zhparser自带的表zhprs_custom_word,插入自定义词语,同步后,重新创建连接即可生效;

建议使用第二种,作为普通表维护,简单高效,如下:

zhparser=# SELECT * FROM ts_parse('zhparser', '支付宝使用很方便'); tokid | token-------+-------   118 | 支付   110 |118 | 使用   100 |118 | 方便zhparser=# insert into zhparser.zhprs_custom_word values('支付宝');zhparser=#  select sync_zhprs_custom_word();zhparser=# \q[pg14@localhost data]$ psql zhparser pg14zhparser=# SELECT * FROM ts_parse('zhparser', '支付宝使用很方便'); tokid | token-------+--------   120 | 支付宝   118 | 使用   100 |118 | 方便zhparser=# SELECT * FROM ts_parse('zhparser', '请支付宝贝订单'); tokid | token -------+-------   118 |118 | 支付   110 | 宝贝   110 | 订单--自定义词库虽然添加了“支付宝”,但是此处还是将“支付”、“宝贝”分开了,体现了zhparser的作用。zhparser=# select * from  zhparser.zhprs_custom_word;   word | tf  | idf | attr----------+------+-----+------ 资金压力|  1 |  1 | @ 支付宝  |  1 |  1 | @-- 此处将“@”改为“!”也可以使其不起作用,也可以where条件删除zhparser=# delete from zhparser.zhprs_custom_word;zhparser=#  select sync_zhprs_custom_word();zhparser=# \q[pg14@localhost data]$ psql zhparser pg14zhparser=# SELECT * FROM ts_parse('zhparser', '我不喜欢支付宝支付'); tokid | token-------+-------   114 |100 |118 | 喜欢   118 | 支付   110 |118 | 支付

分词粒度

解析器配置:

zhparser.multi_short = f 短词复合

zhparser.multi_duality = f 散字二元复合

zhparser.multi_zmain = f 重要单字复合

zhparser.multi_zall = f 全部单字复合

zhparser.punctuation_ignore = f 忽略所有的标点等特殊符号

zhparser.seg_with_duality = f 闲散文字自动以二字分词法聚合

默认值全部为off,效果如下:

zhparser=# select to_tsvector('zh_cn', '前沿导向的探索性基础研究');               to_tsvector------------------------------------------------------- '前沿':1 '基础':5 '导向':2 '探索性':4 '的':3 '研究':6

进行如下设置:

zhparser.multi_short='on'zhparser.multi_duality='on'zhparser.multi_zmain='on'zhparser.multi_zall='on'

再次执行,解析结果如下:

zhparser=# select to_tsvector('zh_cn', '前沿导向的探索性基础研究');   to_tsvector----------------------------------------------------------------------------------------------------- '前':2 '前沿':1 '向':6 '基':15 '基础':14 '导':5 '导向':4 '性':13 '探':11 '探索':9 '探索性':8 '沿':3 '的':7 '研':18 '研究':17 '础':16 '究':19 '索':12 '索性':10

由此可见,解析粒度更细了,但是这并不一定业务需要;粒度越细意味着耗时越长;需要根据业务具体调节。

Stop Words

Stop Words 是非常常见的词,几乎出现在每个文档中,没有实际价值。因此,在全文搜索的上下文中可以忽略它们。例如,每个英文文本都包含像a和the这样的单词,因此将它们存储在索引中是无用的。

使用PostgreSQL默认配置效果如下:

zhparser=# SELECT to_tsvector('english', 'a fat  cat sat on a mat - it ate a fat rats');                 to_tsvector----------------------------------------------------- 'ate':9 'cat':3 'fat':2,11 'mat':7 'rat':12 'sat':4zhparser=# SELECT to_tsvector('zh_cn', '有组织推进战略导向的体系化基础研究');                      to_tsvector------------------------------------------------------------------------------------------ '体系':8 '体系化':7 '基础':9 '导向':5 '战略':4 '推进':3 '有':1 '的':6 '研究':10 '组织':2

这里english使用了默认配置的词典库,词典库中包含a、on、it这些词;下面我们通过配置词典来实现自动忽略“的”的效果。

Stop Words 词典存放在$SHAREDIR/tsearch_data目录下,如下:

[pg14@localhost tsearch_data]$ pwd/opt/postgresql-14/share/tsearch_data[pg14@localhost tsearch_data]$ ll-rw-r--r--. pg14 pg14        4  chinese.stop --自己添加的,默认不带-rw-r--r--. pg14 pg14      424  danish.stop-rw-r--r--. pg14 pg14 14315393    dict.utf8.xdb-rw-r--r--. pg14 pg14      453  dutch.stop-rw-r--r--. pg14 pg14      622  english.stop-rw-r--r--. pg14 pg14     1579  finnish.stop-rw-r--r--. pg14 pg14      805  french.stop-rw-r--r--. pg14 pg14     1349  german.stop-rw-r--r--. pg14 pg14     1227  hungarian.stop-rw-r--r--. pg14 pg14      243  hunspell_sample.affix-rw-r--r--. pg14 pg14      633  hunspell_sample_long.affix-rw-r--r--. pg14 pg14       98  hunspell_sample_long.dict-rw-r--r--. pg14 pg14      462  hunspell_sample_num.affix-rw-r--r--. pg14 pg14      129  hunspell_sample_num.dict-rw-r--r--. pg14 pg14      465  ispell_sample.affix-rw-r--r--. pg14 pg14       81  ispell_sample.dict-rw-r--r--. pg14 pg14     1654  italian.stop-rw-r--r--. pg14 pg14       24  mydict.xdb-rw-r--r--. pg14 pg14     4261  nepali.stop-rw-r--r--. pg14 pg14      851  norwegian.stop-rw-r--r--. pg14 pg14     1267  portuguese.stop-rw-r--r--. pg14 pg14     4396  rules.utf8.ini-rw-r--r--. pg14 pg14     1235  russian.stop-rw-r--r--. pg14 pg14     2178  spanish.stop-rw-r--r--. pg14 pg14      559  swedish.stop-rw-r--r--. pg14 pg14       73  synonym_sample.syn-rw-r--r--. pg14 pg14      473  thesaurus_sample.ths-rw-r--r--. pg14 pg14      260  turkish.stop[pg14@localhost tsearch_data]$ more english.stopimemymyselfweouroursourselvesyouyouryoursyourselfyourselveshehimhishimselfsheherhersherself--127条记录

进行以下配置:

zhparser=# alter text search configuration zh_cn drop mappingfor a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z ;touch /opt/postgresql-14/share/tsearch_data/chinese.stopchown pg14:pg14 -R pg14vi 添加 “的”zhparser=# CREATE TEXT SEARCH DICTIONARY chinese_dict (      TEMPLATE = pg_catalog.simple,  STOPWORDS = chinese           );    zhparser=# alter text search configuration zh_cn add mappingfor a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z with chinese_dict;重启数据库

再次测试效果:

zhparser=# SELECT to_tsvector('zh_cn', '有组织推进战略导向的体系化基础研究');                           to_tsvector----------------------------------------------------------------------------------- '体系':8 '体系化':7 '基础':9 '导向':5 '战略':4 '推进':3 '有':1 '研究':10 '组织':2

查看效果“的”已经忽略了。

来源地址:https://blog.csdn.net/pg_hgdb/article/details/130135968

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

深入了解zhparser

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

深入了解mysql索引

1、索引原理 索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始,然后读完整个表直到它找出相关的行。表越大,花费时间越多。对于一个有序字段,可以运用二分查找(Binary Search),这就是为什么
2022-05-14

深入了解mysql长事务

前言: 本篇文章主要介绍MySQL长事务相关内容,比如说我们开启的一个事务,一直没提交或回滚会怎样呢,出现事务等待情况应该如何处理,本篇文章将给你答案。注意:本篇文章并不聚焦于谈论事务隔离级别以及相关特性。而是介绍长事务相关危害以及监控处
2022-05-20

深入了解Android中的AsyncTask

AsyncTask,即异步任务,是Android给我们提供的一个处理异步任务的类。通过此类,可以实现UI线程和后台线程进行通讯,后台线程执行异步任务,并把结果返回给UI线程。 我们知道,Android中只有UI线程,也就是主线程才能进行对
2022-06-06

深入了解Redis的性能

简介 多少次你发现自己在几个月的开发和无数的努力后陷入了毫无性能而言的web应用?多少次你在好奇如果你无法向普通用户传达快与最快的标准,你的客户还应该把你当作专家?多少你听到有关Google和Facebook一些糟糕的对比?让我告诉你,我的
2022-06-04

深入了解Node中的Buffer

最开始的时候 JS 只在浏览器端运行,对于 Unicode 编码的字符串容易处理,但是对于二进制和非 Unicode 编码的字符串处理困难。并且二进制是计算机最底层的数据格式,视频/音频/程序/网络包
2023-05-14

深入了解Angular(新手入门指南)

本篇文章带大家深入了解Angular,分享最全的Angular新手入门指南,希望对大家有所帮助!
2023-05-14

深入了解PHP:从入门到精通

深入了解PHP:从入门到精通引言:PHP是一种广泛应用于web开发的服务器端脚本语言,它简单易学,适用于初学者,也提供了丰富的功能和扩展性,能够满足复杂的开发需求。本文将从入门到精通,通过具体的代码示例,带您逐步了解PHP的各个方面。一、基
深入了解PHP:从入门到精通
2023-12-19

深入了解Mysql逻辑架构

Mysql现在是大多数公司企业在用的数据库,之所以用Mysql,一点是因为Mysql是开源软件,一些有能力的公司会基于已有的Mysql架构,进行修改、调整改成适合自己公司的业务需要。 一点是因为Mysql免费,相对昂贵的Oracle服务,对
2022-05-30

带你深入了解下this.$nextTick!

都快2023年,你还不会this.$nextTick吗,Vue2都出快10年了,Vue3也已经出了两年多了,没错!说出来就丢脸,我现在才会this.nextTick(实话实说),好的咱先百度一下,哒哒哒....网速飞快地跳到了Vue.js官网文档,突然发现文档中有一言
2023-05-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录