最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用PostgreSQL數(shù)據(jù)庫(kù)進(jìn)行中文全文搜索的實(shí)現(xiàn)方法

 更新時(shí)間:2023年09月25日 10:33:41   作者:undefinedType  
目前在PostgreSQL中常見(jiàn)的兩個(gè)中文分詞插件是zhparser和pg_jieba,這里我們使用zhparser,插件的編譯和安裝請(qǐng)查看官方文檔 ,安裝還是比較復(fù)雜的,建議找個(gè)現(xiàn)成docker鏡像,本文給大家介紹了在PostgreSQL數(shù)據(jù)庫(kù)使用中文全文搜索,需要的朋友可以參考下

如何使用zhparser

安裝相應(yīng)插件

1 安裝 pg_trgm

用于執(zhí)行文本相似性和模糊搜索。它基于 trigram 算法,允許你在文本數(shù)據(jù)上執(zhí)行模糊匹配、相似性搜索和索引。命令如下

CREATE EXTENSION pg_trgm

2 安裝 zhparser

專門(mén)用于處理中文文本數(shù)據(jù)。它允許 PostgreSQL 在中文文本上執(zhí)行全文搜索,包括分詞、詞干提取、停用詞處理等操作,以便提高中文文本數(shù)據(jù)的搜索準(zhǔn)確性和性能。命令如下

CREATE EXTENSION zhparser

創(chuàng)建基于zhparser的搜索配置

CREATE TEXT SEARCH CONFIGURATION chinese_zh (PARSER = zhparser)

這個(gè)命令創(chuàng)建了一個(gè)名為 chinese_zh 的中文文本搜索配置。該配置使用了 zhparser 解析器,表明它將用于分析和處理中文文本數(shù)據(jù)。

ALTER TEXT SEARCH CONFIGURATION chinese_zh ADD MAPPING FOR n,v,a,i,e,l WITH simple

這個(gè)命令將指定的詞匯類別(n,v,a,i,e,l)與已存在的 simple 配置進(jìn)行映射。這意味著對(duì)于這些詞匯類別,將使用 simple 配置的規(guī)則來(lái)進(jìn)行文本分析和處理。

進(jìn)行搜索查詢

select ts_debug('chinese_zh', '春秋、戰(zhàn)國(guó)是中國(guó)歷史上思想迸發(fā)的時(shí)代,出現(xiàn)了百家爭(zhēng)鳴的現(xiàn)象');

執(zhí)行結(jié)果:

"(t,""time,時(shí)語(yǔ)素"",春秋,{},,)"
"(u,""auxiliary,助詞"",、,{},,)"
"(t,""time,時(shí)語(yǔ)素"",戰(zhàn)國(guó),{},,)"
"(v,""verb,動(dòng)詞"",是,{simple},simple,{是})"
"(n,""noun,名詞"",中國(guó),{simple},simple,{中國(guó)})"
"(n,""noun,名詞"",歷史,{simple},simple,{歷史})"
"(n,""noun,名詞"",上思,{simple},simple,{上思})"
"(v,""verb,動(dòng)詞"",想,{simple},simple,{想})"
"(v,""verb,動(dòng)詞"",迸發(fā),{simple},simple,{迸發(fā)})"
"(u,""auxiliary,助詞"",的,{},,)"
"(n,""noun,名詞"",時(shí)代,{simple},simple,{時(shí)代})"
"(u,""auxiliary,助詞"",,,{},,)"
"(v,""verb,動(dòng)詞"",出現(xiàn),{simple},simple,{出現(xiàn)})"
"(v,""verb,動(dòng)詞"",了,{simple},simple,{了})"
"(n,""noun,名詞"",百家爭(zhēng)鳴,{simple},simple,{百家爭(zhēng)鳴})"
"(u,""auxiliary,助詞"",的,{},,)"
"(n,""noun,名詞"",現(xiàn)象,{simple},simple,{現(xiàn)象})"
select to_tsvector('chinese_zh', '春秋、戰(zhàn)國(guó)是中國(guó)歷史上思想迸發(fā)的時(shí)代,出現(xiàn)了百家爭(zhēng)鳴的現(xiàn)象');

執(zhí)行結(jié)果:

"'上思':4 '中國(guó)':2 '了':9 '出現(xiàn)':8 '歷史':3 '想':5 '時(shí)代':7 '是':1 '現(xiàn)象':11 '百家爭(zhēng)鳴':10 '迸發(fā)':6"

可以看到春秋和戰(zhàn)國(guó)沒(méi)有出現(xiàn)在里面,這里我們把t,time,時(shí)語(yǔ)素的映射添加下

ALTER TEXT SEARCH CONFIGURATION chinese_zh ADD MAPPING FOR t WITH simple;

再執(zhí)行上面的語(yǔ)句就會(huì)得到下面的結(jié)果

"'上思':6 '中國(guó)':4 '了':11 '出現(xiàn)':10 '歷史':5 '想':7 '戰(zhàn)國(guó)':2 '時(shí)代':9 '春秋':1 '是':3 '現(xiàn)象':13 '百家爭(zhēng)鳴':12 '迸發(fā)':8"

可以看到春秋和戰(zhàn)國(guó)已經(jīng)出現(xiàn)在文本向量的結(jié)果中了。我們搜索下春秋看下

select to_tsquery('戰(zhàn)國(guó)') @@ to_tsvector('chinese_zh', '春秋、戰(zhàn)國(guó)是中國(guó)歷史上思想迸發(fā)的時(shí)代,出現(xiàn)了百家爭(zhēng)鳴的現(xiàn)象');

true

添加自定義詞典(txt)

select to_tsquery('二十四節(jié)谷') @@  to_tsvector('chinese_zh', '春秋、戰(zhàn)國(guó)是中國(guó)歷史上思想迸發(fā)的時(shí)代,在二十四節(jié)谷出現(xiàn)了百家爭(zhēng)鳴的現(xiàn)象');
false

這里竟然沒(méi)有,仔細(xì)觀察上面對(duì)這個(gè)句子的向量化分析,破案了,沒(méi)有把‘二十四節(jié)谷’這個(gè)詞作為一個(gè)整體

'上思':6 '中國(guó)':4 '了':11 '出現(xiàn)':10 '歷史':5 '想':7

在以下位置創(chuàng)建客戶字典/usr/share/postgresql/14/tsearch_data/kkdict.utf8.txt:(必須在該目錄中)

#word TF  IDF ATTR
二十四節(jié)谷  1 1 n

然后修改/var/lib/postgresql/data/posrgresql.conf,在末尾添加以下行: zhparser.extra_dicts = 'kkdict.utf8.txt'

select ts_debug('chinese_zh', '春秋、戰(zhàn)國(guó)是中國(guó)歷史上思想迸發(fā)的時(shí)代,在二十四節(jié)谷出現(xiàn)了百家爭(zhēng)鳴的現(xiàn)象');
(n,"noun,名詞",二十四節(jié)谷,{simple},simple,{二十四節(jié)谷})

可見(jiàn)現(xiàn)在已經(jīng)變成一個(gè)名詞了。

創(chuàng)建索引

這里使用to_tsvector函數(shù)方式,不單獨(dú)增加一列tsvector字段

create table testing(
  title text
  );
  insert into testing values('春秋、戰(zhàn)國(guó)是中國(guó)歷史上思想迸發(fā)的時(shí)代,出現(xiàn)了百家爭(zhēng)鳴的現(xiàn)象');
  insert into testing values('春秋、戰(zhàn)國(guó)是中國(guó)歷史上思想迸發(fā)的時(shí)代,在二十四節(jié)谷出現(xiàn)了百家爭(zhēng)鳴的現(xiàn)象');
create index ind_testing on testing using gin (to_tsvector('chinese_zh', title));

這樣就可以在查詢中使用中文檢索了,注意當(dāng)你數(shù)據(jù)量不夠的時(shí)候不會(huì)走索引,會(huì)直接便利。

select * from testing where to_tsquery('chinese_zh', '二十四節(jié)谷') @@ to_tsvector('chinese_zh', title);

總結(jié)

以上就是在PostgreSQL數(shù)據(jù)庫(kù)中使用中文全文搜索的實(shí)現(xiàn)方法的詳細(xì)內(nèi)容,更多關(guān)于PostgreSQL中文全文搜索的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Postgresql數(shù)據(jù)庫(kù)SQL字段拼接方法

    Postgresql數(shù)據(jù)庫(kù)SQL字段拼接方法

    Postgresql里面內(nèi)置了很多的實(shí)用函數(shù),下面這篇文章主要給大家介紹了關(guān)于Postgresql數(shù)據(jù)庫(kù)SQL字段拼接方法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • PostgreSQL優(yōu)雅的進(jìn)行遞歸查詢的實(shí)戰(zhàn)指南

    PostgreSQL優(yōu)雅的進(jìn)行遞歸查詢的實(shí)戰(zhàn)指南

    在實(shí)際開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到樹(shù)形結(jié)構(gòu)或圖結(jié)構(gòu)的數(shù)據(jù)需求,這些場(chǎng)景的核心問(wèn)題是:如何高效查詢具有層級(jí)/遞歸關(guān)系的數(shù)據(jù)?所以本文將從基礎(chǔ)到實(shí)戰(zhàn),手把手教你掌握遞歸查詢的精髓,需要的朋友可以參考下
    2026-01-01
  • 將PostgreSQL的數(shù)據(jù)實(shí)時(shí)同步到Doris的技巧分享

    將PostgreSQL的數(shù)據(jù)實(shí)時(shí)同步到Doris的技巧分享

    眾所周知,在兩個(gè)毫不相干的數(shù)據(jù)管理系統(tǒng)之間進(jìn)行數(shù)據(jù)同步,特別是實(shí)時(shí)同步,其復(fù)雜程度足以讓高級(jí)DBA腦瓜疼,本文給大家介紹了將PostgreSQL的數(shù)據(jù)實(shí)時(shí)同步到Doris的技巧分享,需要的朋友可以參考下
    2024-03-03
  • Windows 安裝 PostgreSQL 并安裝 vector 擴(kuò)展的流程

    Windows 安裝 PostgreSQL 并安裝 vector 擴(kuò)展

    文章詳細(xì)指導(dǎo)了在Windows系統(tǒng)上安裝PostgreSQL并配置Vector擴(kuò)展的全過(guò)程,涵蓋安裝流程、環(huán)境優(yōu)化、擴(kuò)展部署、數(shù)據(jù)庫(kù)設(shè)置及功能驗(yàn)證,同時(shí)提供常見(jiàn)問(wèn)題排查和版本/內(nèi)存優(yōu)化建議,對(duì)PostgreSQL安裝 vector 擴(kuò)展相關(guān)知識(shí)感興趣的朋友一起看看吧
    2025-07-07
  • Postgresql查詢效率計(jì)算初探

    Postgresql查詢效率計(jì)算初探

    這篇文章主要給大家介紹了關(guān)于Postgresql查詢效率計(jì)算的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Postgresql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • PostgreSQL長(zhǎng)事務(wù)概念解析

    PostgreSQL長(zhǎng)事務(wù)概念解析

    pg中的長(zhǎng)事務(wù)會(huì)影響表中垃圾回收,導(dǎo)致表的年齡增長(zhǎng)無(wú)法freeze。能消耗事務(wù)的只有當(dāng)執(zhí)行了一些DML或者DDL操作后才能算是我們通常說(shuō)的長(zhǎng)事務(wù)。否則只能算是我們常說(shuō)的長(zhǎng)連接,當(dāng)然長(zhǎng)連接也有很多弊端,例如占用內(nèi)存、cpu等資源
    2022-09-09
  • PostgreSQL數(shù)據(jù)庫(kù)事務(wù)插入刪除及更新操作示例

    PostgreSQL數(shù)據(jù)庫(kù)事務(wù)插入刪除及更新操作示例

    這篇文章主要為大家介紹了PostgreSQL事務(wù)的插入刪除及更新操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • PostgreSQL ROW_NUMBER() OVER()的用法說(shuō)明

    PostgreSQL ROW_NUMBER() OVER()的用法說(shuō)明

    這篇文章主要介紹了PostgreSQL ROW_NUMBER() OVER()的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • PostgreSQL數(shù)據(jù)DML誤操作恢復(fù)方法

    PostgreSQL數(shù)據(jù)DML誤操作恢復(fù)方法

    PostgreSQL是一種開(kāi)源的對(duì)象關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),其DML(Data Manipulation Language)負(fù)責(zé)數(shù)據(jù)的操作和管理,那么如何DML誤操作了如何恢復(fù),所以本文介紹了PostgreSQL數(shù)據(jù)DML誤操作恢復(fù)方法,需要的朋友可以參考下
    2024-12-12
  • postgreSQL數(shù)據(jù)庫(kù)默認(rèn)用戶postgres常用命令分享

    postgreSQL數(shù)據(jù)庫(kù)默認(rèn)用戶postgres常用命令分享

    這篇文章主要介紹了postgreSQL數(shù)據(jù)庫(kù)默認(rèn)用戶postgres常用命令分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01

最新評(píng)論

普格县| 同江市| 兰坪| 从化市| 呈贡县| 安岳县| 扶沟县| 宜宾县| 江源县| 潍坊市| 达州市| 德令哈市| 东乌珠穆沁旗| 永春县| 宁城县| 正蓝旗| 安阳县| 宁化县| 宜章县| 望都县| 台江县| 柳河县| 北安市| 乌拉特中旗| 鸡东县| 嘉峪关市| 云龙县| 广安市| 长宁区| 剑阁县| 建宁县| 延边| 汉源县| 峨山| 宜都市| 达州市| 洛川县| 灵宝市| 黎城县| 陆丰市| 泸西县|