歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 在PostgreSQL中使用全文索引介紹

在PostgreSQL中使用全文索引介紹

日期:2017/2/28 16:09:09   编辑:Linux教程

在近期的開發中由於需要處理比較大的數據量,但是由於沒有資金購買商業數據庫,而且最好不能用盜版的,所以沒辦法就用了這個PostgreSQL對象關系型數據庫。首先介紹一下這個數據庫,百度百科:“PostgreSQL是以加州大學伯克利分校計算機系開發的 POSTGRES,版本 4.2為基礎的對象關系型數據庫管理系統(ORDBMS)。PostgreSQL支持大部分 SQL標准並且提供了許多其他現代特性:復雜查詢、外鍵、觸發器、視圖、事務完整性、多版本並發控制。同樣,PostgreSQL 可以用許多方法擴展,比如, 通過增加新的數據類型、函數、操作符、聚集函數、索引方法、過程語言。並且,因為許可證的靈活,任何人都可以以任何目的免費使用,修改,和分發 PostgreSQL, 不管是私用,商用,還是學術研究使用”。

它是和MySQL一樣開源的數據庫,但是其功能卻比MySQL強大多了,它可以處理上百萬甚至上千萬條的數據,據我了解MySQL到來100W條數據時,其效率將會受到嚴重的影響。本篇文章主要講一下給數據庫全文索引的基本使用。全文索引在商業型數據管理系統中是非常常用的,因為它可以提高數據的檢索效率,在沒有全文索引的時候我們一般都是用like子句來匹配我們搜索的關鍵詞,我們知道like子句執行的效率是非常低的,這嚴重影響了系統的運行效率。因此全文索引就可以提高數據的檢索效率。全文索引是為我們需要被用戶檢索的信息進行創建全文索引,獨立的存儲在一個表中或者是一個字段上面。一下面將就在表中和字段中創建全文索引來進行介紹。

一、使用獨立的表存儲全文索引的信息

下面我舉例介紹:(注意PostgreSQL在8.3以後在自帶了全文索引,以前的版本需要安裝其他的包,具體我也不是很清楚,有興趣的可以自己看看)

首先我們創建一個數據表:

  1. CREATE TABLE author
  2. (
  3. id bigserial NOT NULL,
  4. "name" text NOT NULL,
  5. author_key text NOT NULL,
  6. CONSTRAINT author_key PRIMARY KEY (id),
  7. CONSTRAINT "key" UNIQUE (author_key)
  8. )
  9. WITH (
  10. OIDS=FALSE
  11. );

我們為該表的的name字段創建一個全文索引,並將它的信息獨立的存儲在一個表中,表如下:

CREATE TABLE full_text_index
(
<pre name="code" class="sql"> id bigserial NOT NULL,
CREATE TABLE full_text_index
(
<pre name="code" class="sql"> id bigserial NOT NULL, text_fti tsvector NOT NULL,)WITH ( OIDS=FALSE);ALTER TABLE full_text_index OWNER TO postgres;
);

我們注意看字段text_fti,它的類型是tsvector,說明該字段是存儲全文索引的,這就是postgresql數據庫中全文索引的字段類型。

那麼如何將我們的信息自動的創建全文索引信息添加到我們的full_text_index 中呢?那麼這裡將要用到sql中的觸發器,

如下創建觸發器函數:

  1. CREATE OR REPLACE FUNCTION node_text_fti()
  2. RETURNS trigger AS
  3. $BODY$begin
  4. if TG_OP = 'INSERT' then
  5. insert into full_text_index (text_fti) values(to_tsvector(coalesce(NEW.name,'')));
  6. end if;
  7. return NEW;end;$BODY$
  8. LANGUAGE plpgsql VOLATILE
  9. COST 100;
  10. ALTER FUNCTION node_text_fti() OWNER TO postgres;
Copyright © Linux教程網 All Rights Reserved