PostgreSQL自帶有一個(gè)簡(jiǎn)易的全文檢索引擎,可以實(shí)現(xiàn)小規(guī)模數(shù)據(jù)量的全文檢索功能。本文我們將引導(dǎo)介紹一下這個(gè)功能,對(duì)于小數(shù)據(jù)量的搜索這個(gè)功能是足夠使用的,而無(wú)需搭建額外的ES等重量級(jí)的全文檢索服務(wù)器。
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),永勝企業(yè)網(wǎng)站建設(shè),永勝品牌網(wǎng)站建設(shè),網(wǎng)站定制,永勝網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,永勝網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
PG的全文檢索操作符是 @@ ,當(dāng)一個(gè) tsvector (文檔)和 tsquery (條件)匹配時(shí)返回 true ,并且前后順序無(wú)影響:
和普通的SQL查詢(xún)一樣,只要在 WHERE 條件中使用這個(gè)符號(hào)就代表使用全文檢索條件篩選文檔了。如:
@@ 操作符支持隱式轉(zhuǎn)換,對(duì)于 text 類(lèi)型可以無(wú)需強(qiáng)類(lèi)型轉(zhuǎn)換( ::tsvector 或 to_tsvector(config_name, text) ),所以這個(gè)操作符實(shí)際支持的參數(shù)類(lèi)型是這樣的:
tsquery 查詢(xún)條件并不是簡(jiǎn)單的正則,而是一組搜索術(shù)語(yǔ),使用并且使用布爾操作符 (AND)、 | (OR)和 ! (NOT)來(lái)組合它們,還有短語(yǔ)搜索操作符 - (FOLLOWED BY)。更詳細(xì)的語(yǔ)法參見(jiàn) 此文檔 。
此外,PostgreSQL還提供了兩個(gè)相對(duì)簡(jiǎn)化的版本 plainto_tsquery 和 phraseto_tsquery 。
plainto_tsquery ( plainto_tsquery([ config regconfig, ] querytext text) returns tsquery )用戶(hù)將未格式化的 text 經(jīng)過(guò)分詞之后,插入 符號(hào)轉(zhuǎn)為 tsquery :
phraseto_tsquery ( phraseto_tsquery([ config regconfig, ] querytext text) returns tsquery )行為和 plainto_tsquery 行為類(lèi)似,但是分詞之后不是插入 而是 - (FOLLOWED BY):
使用索引可以加快全文檢索的速度。對(duì)于全文檢索來(lái)說(shuō),可選的索引類(lèi)型是 GIN (通用倒排索引)和 GIST (通用搜索樹(shù)),官方文檔更推薦使用 GIN索引 。創(chuàng)建一個(gè) GIN 索引的范例:
也可以是一個(gè)連接列:
還可以單獨(dú)創(chuàng)建一個(gè) tsvector 列,為這個(gè)列創(chuàng)建索引:
除了普通的 ORDER BY 條件之外,PostgreSQL為全文檢索提供了兩個(gè)可選的排序函數(shù) ts_rank([ weights float4[], ] vector tsvector, query tsquery [, normalization integer ]) returns float4 和 ts_rank_cd([ weights float4[], ] vector tsvector, query tsquery [, normalization integer ]) returns float4 ,以便實(shí)現(xiàn)基于 權(quán)重 的排序。
此外,對(duì)于PostgreSQL 9.6以上的版本還可以使用 RUM index 排序。(注意,這個(gè)是擴(kuò)展,默認(rèn)不包含)。
PostgreSQL默認(rèn)的分詞字典中并不包含中文分詞字典,因此我們必須手工引入。目前一個(gè)比較好的項(xiàng)目是 zhparser ,同時(shí)這個(gè)插件也是阿里云的RDS默認(rèn)包含的。安裝和啟用沒(méi)什么好說(shuō)的。值得一提的是分詞配置參數(shù)。
在 CREATE EXTENSION 之后,必須配置分詞參數(shù)才能正確進(jìn)行分詞和查找,否則什么都查不到。官方文檔提供的一個(gè)配置策略是:
n,v,a,i,e,l 這幾個(gè)字母分別表示一種token策略,只啟用了這幾種token mapping,其余則被屏蔽。具體支持的參數(shù)和含義可以用 \dFp+ zhparser 顯示:
WITH simple 表示詞典使用的是內(nèi)置的simple詞典,即僅做小寫(xiě)轉(zhuǎn)換。根據(jù)需要可以靈活定義詞典和token映射,以實(shí)現(xiàn)屏蔽詞和同義詞歸并等功能。
比如我們看下面這個(gè)例子:
可以看到 江淮 這個(gè)詞組在查詢(xún)的時(shí)候被忽略了,我們啟用 j (abbreviation,簡(jiǎn)稱(chēng))再看看結(jié)果:
所以實(shí)際使用中要設(shè)置合理的token types,過(guò)少將導(dǎo)致搜索結(jié)果不準(zhǔn)確,過(guò)多將導(dǎo)致性能下降。此外,還有一些諸如 短詞復(fù)合: zhparser.multi_short = f 這一類(lèi)的控制分詞結(jié)果的選項(xiàng),根據(jù)實(shí)際使用酌情開(kāi)啟。
postgresql版本號(hào)前面的兩個(gè)數(shù)字是他的大版本號(hào),后面的一個(gè)數(shù)字是小版本號(hào)。大版本號(hào)相同的,數(shù)據(jù)文件格式都完全一樣,比如你從8.4.6升級(jí)到8.4.7,只需要重新獲得8.4.7的二進(jìn)制文件,替換掉8.4.6的就可以了,因?yàn)閿?shù)據(jù)文件一樣,可以直接使用而如果從8.4.想升級(jí)到9.0版本,數(shù)據(jù)文件格式變動(dòng),上面方法則不適用,數(shù)據(jù)文件必須經(jīng)過(guò)sql轉(zhuǎn)儲(chǔ)才可以繼續(xù)使用。也可以這樣理解,大版本號(hào)相當(dāng)于windows具體的操作系統(tǒng),而小版本號(hào)就是sp幾,比如8.4是windowsvista,9.0是windows7,后面的數(shù)字則是只是他們的升級(jí)包而已。版本之間的具體區(qū)別和改動(dòng)請(qǐng)參看releasenotes,這里有最新的
在已經(jīng)安裝了PostgreSQL的Linux上,使用下面的命令即可查詢(xún)安裝的版本:
psql --version
在已經(jīng)安裝了PostgreSQL的Linux上,使用下面的命令即可查詢(xún)安裝的版本:
psql?--version
PostgreSQL是以加州大學(xué)伯克利分校計(jì)算機(jī)系開(kāi)發(fā)的 POSTGRES,現(xiàn)在已經(jīng)更名為PostgreSQL,版本 4.2為基礎(chǔ)的對(duì)象關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(ORDBMS)。PostgreSQL支持大部分 SQL標(biāo)準(zhǔn)并且提供了許多其他現(xiàn)代特性:復(fù)雜查詢(xún)、外鍵、觸發(fā)器、視圖、事務(wù)完整性、MVCC。同樣,PostgreSQL 可以用許多方法擴(kuò)展,比如, 通過(guò)增加新的數(shù)據(jù)類(lèi)型、函數(shù)、操作符、聚集函數(shù)、索引。免費(fèi)使用、修改、和分發(fā) PostgreSQL,不管是私用、商用、還是學(xué)術(shù)研究使用。
當(dāng)前名稱(chēng):postgresql版本的簡(jiǎn)單介紹
鏈接地址:http://chinadenli.net/article36/dsdgesg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、服務(wù)器托管、ChatGPT、靜態(tài)網(wǎng)站、域名注冊(cè)、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)