GaussDB(DWS)全文檢索特性初探

      網友投稿 750 2025-04-01

      全文檢索是在互聯網場景下應用非常廣泛的特性,搜索引擎、站內搜索、電商搜索等場景下都會使用到,GaussDB(DWS)同樣也支持全文檢索功能,是基于GIN索引實現的,下面給大家詳細介紹一下GaussDB(DWS)的全文檢索特性的功能。


      全文檢索實現的功能,簡單來說就是根據關鍵字從在全文字段中搜索到相關的信息,在不使用全文檢索特性時,只能通過like ‘%keyword%’方式做模糊匹配,無法利用到索引,只能進行全表掃描,效率非常低,全文檢索特性可以有效地提升檢索性能。

      全文檢索的基礎就是GIN索引,Generalized Inverted Index,也就是通用倒排索引,是一個存儲對(key, posting list)集合的索引結構,其中key是一個鍵值,而posting list 是一組出現過key的位置。如(‘hello', 2,3)中,表示hello在2和3這兩個位置出現過。

      先來了解一下幾個接口

      to_tsvector

      to_tsvector(text, text)

      這個函數可以把一個文本轉換為一個向量,其中保存單詞和其出現的順序,

      test=# SELECT to_tsvector('english', 'huawei cloud data warehouse'); to_tsvector -------------------------------------------- 'cloud':2 'data':3 'huawei':1 'warehous':4 (1 row) test=# SELECT to_tsvector('zhparser', '華為云數據倉庫'); to_tsvector ----------------------------------- '云':2 '倉庫':4 '華為':1 '數據':3 (1 row)

      to_tsquery

      to_tsquery(text)

      這個函數作用是用來把文本轉化為可查詢的語句,例如:

      SELECT to_tsquery('華為&深圳');

      這樣就是尋找文本既包含“華為”,也包含“深圳”的語句,&是AND與操作,|是OR或操作

      如果想知道一個tsvector是否讓tsquery成立,可以使用 @@ 操作符,例如:

      SELECT to_tsvector('zhparser', '華為深圳') @@ to_tsquery('華為&深圳');

      這條語句會返回True

      ts_rank

      ts_rank(tsvector, tsquery)

      這個函數可以計算tsvector和tsquery的近似程度,通過這個函數計算出rank之后,就可以排序了

      SELECT ts_rank( to_tsvector('zhparser', '華為深圳'), to_tsquery('華為&深圳') );

      講完了這些接口,讓我們來做一些具體實踐:

      1.創建數據庫

      CREATE DATABASE test ENCODING 'utf8' template = template0;

      【注意】全文檢索必須使用在encoding為utf8或者gbk的數據庫上。

      2.創建表

      CREATE TABLE t1(id int, news text, location text);

      GaussDB(DWS)全文檢索特性初探

      3.導入數據

      INSERT INTO t1 VALUES(1, '華為云GaussDB(DWS)數據倉庫以2048大規模節點通過信通院評測認證,華為云數據倉庫成為國內首個單集群突破兩千的商用數據倉庫產品', '北京'); INSERT INTO t1 VALUES(2, 'GaussDB(DWS)歷經十年磨煉,是業界領先的企業級云分布式數據倉庫服務', '深圳'); INSERT INTO t1 VALUES(3, '華為GaussDB(DWS)數據倉庫,助力招行“人人用數,創新前行,招行客戶在華為論壇中表示,華為與招行的聯創實驗室還將進一步探索云數倉支持OBS存儲的實踐', '深圳'); INSERT INTO t1 VALUES(4, '數智金融 使能創新,2020 華為 數智金融論壇在溪村成功舉辦', '東莞'); INSERT INTO t1 VALUES(5, '華為云 AI 訓練營西安站:“ModelArts Pro——行業 AI 落地新利器”主題沙龍盛大開幕', '西安');

      4.創建索引

      CREATE INDEX t1_news_idx ON t1 USING gin(to_tsvector('zhparser', news));

      執行查詢:

      SELECT * FROM t1 WHERE to_tsvector('zhparser',news) @@ to_tsquery('華為');

      查詢結果:

      id | news | location ----+----------------------------------------------------------------------------------------------------------------------------------------------+---------- 5 | 華為云 AI 訓練營西安站:“ModelArts Pro——行業 AI 落地新利器”主題沙龍盛大開幕 | 西安 1 | 華為云GaussDB(DWS)數據倉庫以2048大規模節點通過信通院評測認證,華為云數據倉庫成為國內首個單集群突破兩千的商用數據倉庫產品 | 北京 3 | 華為GaussDB(DWS)數據倉庫,助力招行“人人用數,創新前行,招行客戶在華為論壇中表示,華為與招行的聯創實驗室還將進一步探索云數倉支持OBS存儲的實踐 | 深圳 4 | 數智金融 使能創新,2020 華為 數智金融論壇在溪村成功舉辦 | 東莞 (4 rows)

      news中只要包含“華為”詞組,都會檢索出來

      5.創建多字段聯合索引:

      CREATE INDEX t1_news_location_idx ON t1 USING gin(to_tsvector('zhparser', news||location));

      執行結果:

      查找同時包含兩個詞組

      SELECT * FROM t1 WHERE to_tsvector('zhparser', news||location) @@ to_tsquery('華為 & 深圳');

      news跟location只要有一個字段中包含“華為”和“深圳”都會檢索出來

      test=# SELECT * FROM t1 WHERE to_tsvector('zhparser', news||location) @@ to_tsquery('華為 & 深圳'); id | news | location ----+----------------------------------------------------------------------------------------------------------------------------------------------+---------- 3 | 華為GaussDB(DWS)數據倉庫,助力招行“人人用數,創新前行,招行客戶在華為論壇中表示,華為與招行的聯創實驗室還將進一步探索云數倉支持OBS存儲的實踐 | 深圳 (1 row)

      查詢包含其中一個詞組

      SELECT * FROM t1 WHERE to_tsvector('zhparser', news||location) @@ to_tsquery('云|深圳');

      news跟location只要有一個包含“云”跟“深圳”這兩個詞的任何一個都會檢索出來。

      test=# SELECT * FROM t1 WHERE to_tsvector('zhparser', news||location) @@ to_tsquery('云|深圳'); id | news | location ----+----------------------------------------------------------------------------------------------------------------------------------------------+---------- 5 | 華為云 AI 訓練營西安站:“ModelArts Pro——行業 AI 落地新利器”主題沙龍盛大開幕 | 西安 3 | 華為GaussDB(DWS)數據倉庫,助力招行“人人用數,創新前行,招行客戶在華為論壇中表示,華為與招行的聯創實驗室還將進一步探索云數倉支持OBS存儲的實踐 | 深圳 1 | 華為云GaussDB(DWS)數據倉庫以2048大規模節點通過信通院評測認證,華為云數據倉庫成為國內首個單集群突破兩千的商用數據倉庫產品 | 北京 2 | GaussDB(DWS)歷經十年磨煉,是業界領先的企業級云分布式數據倉庫服務 | 深圳 (4 rows)

      6.排序

      按照某一列包含的某個詞組權重來排序

      SELECT id, news, location ,ts_rank_cd(to_tsvector('zhparser',news), query) AS rank FROM t1, to_tsquery('華為') query WHERE query @@ to_tsvector('zhparser',news) order by rank DESC;

      執行結果:

      test=# SELECT id, news, location ,ts_rank_cd(to_tsvector('zhparser',news), query) AS rank FROM t1, to_tsquery('華為') query WHERE query @@ to_tsvector('zhparser',news) order by rank DESC; id | news | location | rank ----+----------------------------------------------------------------------------------------------------------------------------------------------+----------+------ 3 | 華為GaussDB(DWS)數據倉庫,助力招行“人人用數,創新前行,招行客戶在華為論壇中表示,華為與招行的聯創實驗室還將進一步探索云數倉支持OBS存儲的實踐 | 深圳 | .3 1 | 華為云GaussDB(DWS)數據倉庫以2048大規模節點通過信通院評測認證,華為云數據倉庫成為國內首個單集群突破兩千的商用數據倉庫產品 | 北京 | .2 4 | 數智金融 使能創新,2020 華為 數智金融論壇在溪村成功舉辦 | 東莞 | .1 5 | 華為云 AI 訓練營西安站:“ModelArts Pro——行業 AI 落地新利器”主題沙龍盛大開幕 | 西安 | .1 (4 rows)

      搜索出含有“華為”的詞組,并且根據權重排序

      按照某一列包含多個詞組權重排序(同時包含兩個詞組)

      SELECT id, news, location,ts_rank_cd(to_tsvector('zhparser', news||location), query) AS rank FROM t1, to_tsquery('華為&深圳') query WHERE query @@ to_tsvector('zhparser',news||location) order by rank DESC;

      執行結果:

      test=# SELECT id, news, location,ts_rank_cd(to_tsvector('zhparser', news||location), query) AS rank FROM t1, to_tsquery('華為&深圳') query WHERE query @@ to_tsvector('zhparser',news||location) order by rank DESC; id | news | location | rank ----+----------------------------------------------------------------------------------------------------------------------------------------------+----------+----------- 3 | 華為GaussDB(DWS)數據倉庫,助力招行“人人用數,創新前行,招行客戶在華為論壇中表示,華為與招行的聯創實驗室還將進一步探索云數倉支持OBS存儲的實踐 | 深圳 | .00555556 (1 row)

      搜索出含有“華為”和“深圳”的詞組,并且根據權重排序

      按照某一列包含多個詞組權重排序(包含兩個詞組其中一個)

      SELECT id, news, location,ts_rank_cd(to_tsvector('zhparser', news||location), query) AS rank FROM t1, to_tsquery('云|深圳') query WHERE query @@ to_tsvector('zhparser', news||location) order by rank DESC;

      查看執行結果:

      test=# SELECT id, news, location,ts_rank_cd(to_tsvector('zhparser', news||location), query) AS rank FROM t1, to_tsquery('云|深圳') query WHERE query @@ to_tsvector('zhparser', news||location) order by rank DESC; id | news | location | rank ----+----------------------------------------------------------------------------------------------------------------------------------------------+----------+------ 1 | 華為云GaussDB(DWS)數據倉庫以2048大規模節點通過信通院評測認證,華為云數據倉庫成為國內首個單集群突破兩千的商用數據倉庫產品 | 北京 | .2 2 | GaussDB(DWS)歷經十年磨煉,是業界領先的企業級云分布式數據倉庫服務 | 深圳 | .2 5 | 華為云 AI 訓練營西安站:“ModelArts Pro——行業 AI 落地新利器”主題沙龍盛大開幕 | 西安 | .1 3 | 華為GaussDB(DWS)數據倉庫,助力招行“人人用數,創新前行,招行客戶在華為論壇中表示,華為與招行的聯創實驗室還將進一步探索云數倉支持OBS存儲的實踐 | 深圳 | .1 (4 rows)

      檢索出包含“云”或者“深圳”的記錄,并且根據權重排序。

      通過以上的案例,相信大家對GaussDB(DWS)的全文檢索使用已經有了一些了解,其實全文檢索還有ngram分詞,和自定義詞典等等其他用法,大家如果有興趣,可以訪問DWS產品文檔或者到社區提問,獲取更全面的解答。

      EI企業智能 Gauss AP HUAWEI CONNECT 數據倉庫服務 GaussDB(DWS)

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel甘特圖制作方法
      下一篇:怎樣用excel修改圖片背景顏色
      相關文章
      亚洲AV无码乱码国产麻豆| 在线亚洲午夜理论AV大片| 亚洲爆乳无码一区二区三区| 亚洲中文字幕成人在线| 亚洲成片观看四虎永久| 亚洲国产人成精品| 亚洲精品无码久久久| 亚洲日韩国产一区二区三区| 亚洲精品无码AV中文字幕电影网站| 亚洲国产一区明星换脸| 国内精品久久久久久久亚洲| 亚洲一级特黄大片在线观看| 久久精品国产精品亚洲艾草网美妙| 亚洲视频一区二区| 国产亚洲精久久久久久无码AV | 亚洲伊人久久大香线蕉综合图片| 久久亚洲高清综合| 国产亚洲精品岁国产微拍精品| 久久亚洲国产午夜精品理论片| 亚洲av日韩av不卡在线观看| 久久久久久久亚洲Av无码| 亚洲精品电影在线| 中文字幕在线观看亚洲日韩| 亚洲国产美女精品久久久| 亚洲国产成人久久一区WWW| 国产AⅤ无码专区亚洲AV| 久久久久亚洲精品成人网小说 | 亚洲视频免费一区| 亚洲AV综合色区无码二区偷拍| 学生妹亚洲一区二区| 久久亚洲精品11p| 亚洲中文字幕丝袜制服一区| 亚洲精品无码永久中文字幕| 久久亚洲私人国产精品| 亚洲另类春色校园小说| 亚洲日韩av无码中文| 亚洲女人被黑人巨大进入| 亚洲啪啪综合AV一区| 亚洲一区二区三区夜色| 亚洲一区在线免费观看| 久久亚洲AV成人无码国产电影|