Oracle 9i 全文檢索索引簡單配置方式

來源:互聯網
上載者:User

Oracle 9i 全文檢索索引簡單配置方式
1、先決條件
   Oracle 9I 預設全部支援,具體如下
   系統中存在CTXSYS使用者及CTXAPP角色,
   監聽程式支援全文檢索索引,如下
   # LISTENER.ORA Network Configuration File: D:/oracle/ora92/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
      )
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = server)(PORT = 1521))
      )
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = D:/oracle/ora92)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = server)
      (ORACLE_HOME = D:/oracle/ora92)
      (SID_NAME = server)
    )
  )
2、設定文法分析器
   在CTXSYS下,預設使用的是basic_lexer,對英文支援比較好,為支援中文,做如下設定
   begin ctx_ddl.create_preference('my_lexer','chinese_vgram_lexer'); end;
3、執行個體
   在使用者search下search_catalog表的page_desc,link_tile需要進行全文檢索索引,如下
   create index index_text on search_catalog(page_desc) indextype is ctxsys.context parameters('lexer ctxsys.my_lexer');
   create index index_title on search_catalog(link_title) indextype is ctxsys.context parameters('lexer ctxsys.my_lexer');
  
   //可以修改index 的儲存空間,最簡單的方法是建立在其他使用者的預設儲存空間上
   grant create any index to "search";
   grant alter any index to "search";
   create index shiyq_index.index_text on search_catalog(page_desc) indextype is ctxsys.context parameters('lexer ctxsys.my_lexer');
   create index shiyq_index.index_title on search_catalog(link_title) indextype is ctxsys.context parameters('lexer ctxsys.my_lexer');
   //可以定製儲存空間
  
   同步(當未經處理資料變化時,索引不會自動重建,所以需要手工同步)
   alter index index_text rebuild online parameters('sync');
   alter index index_title rebuild online parameters('sync');
   或
   alter index shiyq_index.index_text rebuild online parameters('sync');
   alter index shiyq_index.index_title rebuild online parameters('sync');
     
4、結果
select t.*, t.rowid from search_catalog t
where instr(t.page_desc,'健康')>0

select * from search_catalog where contains(page_desc,'健康')>0

5、補遺:
   這種情況下當檢索一個單詞的時候,會使用兩個欄位的全文檢索索引,使用and ,or 來串連,這樣效能比較低,
   而且容易造成cpu的瓶頸,所以可以將兩個欄位合為一個,如將link_title增加到page_desc的後面,然後
   Sql由
   select * from search_catalog t where contains(t.link_title,'健康')>0 and contains (t.page_desc,
   '健康')>0
   修改為
   select * from search_catalog t where contains(t.page_desc,'健康')>0
   如果搜尋多個單詞,可以用邏輯符號,如 邏輯與(and 或 & ),邏輯或(or 或 | ),邏輯非(not 或 ~),可以
   用括弧組織
   如搜尋包含“健康”,“藥品”或“產品”,但不包含“海虹”的資料
   select * from search_catalog t where contains(t.page_desc,'( 健康 & ( 藥品 | 產品) ) ~ 海虹 ')>0 

 參考了玉面飛龍的大作,這篇文章非常好,我寫的非常簡單,有問題可以去看看http://epub.itpub.net/4/1.htm,

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.