Oracle全文檢索之中文
Oracle全文檢索之Context:http://space.itpub.net/81227/viewspace-692318
Oracle全文檢索之Ctxcat 索引:http://space.itpub.net/81227/viewspace-692471
透過BASIC_LEXER來索引中文,Oracle只識別被空格、標點和回車符分隔出來的部分。需要對中文內容進行索引的話,就必須使用中文的LEXER。
Oracle提供了兩種預定義的中文LEXER屬性:CHINESE_VGRAM_LEXER和CHINESE_LEXER。
Oracle在文件上是這樣描述的:
CHINESE_LEXER相對應CHINESE_VGRAM_LEXER屬性有如下的優點:
產生的索引更小;
更好的查詢響應時間;
產生更接近真實的索引切詞,使得查詢精度更高;
支援停用詞。
SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));
Table created
SQL> INSERT INTO T VALUES (1, '一箇中文例子,測試BASIC_LEXER語法屬性是否可以正常識別中文。');
1 row inserted
SQL> commit;
Commit complete
SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT;
Index created
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '中文') > 0;
ID DOCS
---------- ----------------------------------------------------------------------
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '一箇中文例子') > 0;
ID DOCS
---------- ----------------------------------------------------------------------
1 一箇中文例子,測試BASIC_LEXER語法屬性是否可以正常識別中文。
SQL> DROP INDEX IND_T_DOCS;
Index dropped
SQL> TRUNCATE TABLE T;
Table truncated
SQL> INSERT INTO T VALUES (1, '北京大學未名湖');
1 row inserted
SQL> INSERT INTO T VALUES (2, '北京郵電大學');
1 row inserted
SQL> INSERT INTO T VALUES (3, '北京市第十四中學');
1 row inserted
SQL> commit;
Commit complete
SQL> exec CTX_DDL.CREATE_PREFERENCE('TEST_CHINESE_VGRAM_LEXER', 'CHINESE_VGRAM_LEXER');
PL/SQL procedure successfully completed
SQL> exec CTX_DDL.CREATE_PREFERENCE('TEST_CHINESE_LEXER', 'CHINESE_LEXER');
PL/SQL procedure successfully completed
SQL> CREATE INDEX IND_T_DOCS ON T(DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('LEXER TEST_CHINESE_VGRAM_LEXER');
Index created
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '北京') > 0;
ID DOCS
---------- ----------------------------------------------------------------------
1 北京大學未名湖
2 北京郵電大學
3 北京市第十四中學
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '大學') > 0;
ID DOCS
---------- ----------------------------------------------------------------------
1 北京大學未名湖
2 北京郵電大學
SQL> DROP INDEX IND_T_DOCS;
Index dropped
SQL> CREATE INDEX IND_T_DOCS ON T(DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('LEXER TEST_CHINESE_LEXER');
Index created
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '北京') > 0;
ID DOCS
---------- ----------------------------------------------------------------------
2 北京郵電大學
SQL> SELECT * FROM T WHERE CONTAINS(DOCS, '北京 or 北京市') > 0;
ID DOCS
---------- ----------------------------------------------------------------------
2 北京郵電大學
3 北京市第十四中學
透過對比結果可以發現:使用CHINESE_LEXER沒有將第一條記錄和第三條記錄中的北京檢索出來。也許Oracle的CHINESE_LEXER認為北京大學和北京市是一個完整的詞彙,而沒有對其進行進一步切分。也許這就是Oracle提到的這種切分方式更接近於真實的情況。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/81227/viewspace-700233/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle全文索引之配置全文檢索環境Oracle索引
- Oracle的全文檢索技術(轉)Oracle
- 配置全文檢索
- 全文檢索庫 bluge
- Kibana 全文檢索操作
- 全文檢索的轉義
- solr全文檢索學習Solr
- 基於ElasticSearch實現商品的全文檢索檢索Elasticsearch
- openGauss每日一練(全文檢索)
- php + MongoDB + Sphinx 實現全文檢索PHPMongoDB
- PostgreSQL全文檢索-詞頻統計SQL
- 全文檢索技術lucene的demo
- springboot ElasticSearch 簡單的全文檢索高亮Spring BootElasticsearch
- 【IT老齊072】全文檢索執行原理
- 基於Lucene的全文檢索實踐
- ElasticSearch 實現分詞全文檢索 - 概述Elasticsearch分詞
- IM全文檢索技術專題(四):微信iOS端的最新全文檢索技術優化實踐iOS優化
- ElasticSearch 實現分詞全文檢索 - delete-by-queryElasticsearch分詞delete
- 在ef core中使用postgres資料庫的全文檢索功能實戰之中文支援資料庫
- 個人部落格分享(Laravel + Vue 元件,支援全文檢索)LaravelVue元件
- Mysql 如何實現全文檢索,關鍵詞跑分MySql
- Oracle OCP(15):分層檢索Oracle
- lnmp+coreseek實現站內全文檢索(安裝篇)LNMP
- 讀書筆記:從Lucene到Elasticsearch:全文檢索實戰筆記Elasticsearch
- 沒辦法了,用 MySQL 做全文檢索也挺好的MySql
- Laravel 中文文件檢索 Alfred WorkflowLaravelAlfred
- 【搜尋引擎】Solr全文檢索近實時查詢優化Solr優化
- oracle全文索引之commit與DML操作Oracle索引MIT
- Homestead 環境下安裝 Elasticsearch 並使用 scout 進行全文檢索Elasticsearch
- oracle全文索引之幾個關鍵表Oracle索引
- oracle全文索引之如何實現查詢Oracle索引
- 在ef core中使用postgres資料庫的全文檢索功能實戰資料庫
- Oracle:全文索引Oracle索引
- 【搜尋引擎】Solr Suggester 實現全文檢索功能-分詞和和自動提示Solr分詞
- Oracle OCP(14):使用子查詢檢索資料Oracle
- Oracle的全文索引Oracle索引
- Oracle OCP(01):使用SQL SELECT語句檢索資料OracleSQL
- 萬字詳解PHP+Sphinx中文億級資料全文檢索實戰(實測億級資料0.1秒搜尋耗時)PHP
- ES:檢索