日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle建立全文索引详解

發布時間:2023/12/9 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle建立全文索引详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Oracle建立全文索引詳解
1.全文檢索和普通檢索的區別
不使用Oracle text功能,當然也有很多方法可以在Oracle數據庫中搜索文本,比如INSTR函數和LIKE操作:
SELECT *FROM mytext WHERE INSTR (thetext, 'Oracle') > 0;
SELECT * FROM mytext WHERE thetext LIKE '%Oracle%';
有很多時候,使用instr和like是很理想的, 特別是搜索僅跨越很小的表的時候。然而通過這些文本定位的方法將導致全表掃描,對資源來說消耗比較昂貴,而且實現的搜索功能也非常有限,因此對海量的文本數據進行搜索時,建議使用oralce提供的全文檢索功能。

附:這里順帶記錄一下INSTR和LIKE:
Oracle中,可以使用 Instr 函數對某個字符串進行判斷,判斷其是否含有指定的字符。其語法為:Instr(string, substring, position, occurrence)。
string:代表源字符串(寫入字段則表示此字段的內容)。
substring:代表想從源字符串中查找的子串。
position:代表查找的開始位置,該參數可選的,默認為1。
occurrence:代表想從源字符中查找出第幾次出現的substring,該參數也是可選的,默認為1。
position 的值為負數,那么代表從右往左進行查找。

instr和like的性能比較
其實從效率角度來看,誰能用到索引,誰的查詢速度就會快。
like有時可以用到索引,例如:name like ‘李%’,而當下面的情況時索引會失效:name like ‘%李’。所以一般我們查找中文類似于‘%字符%’時,索引都會失效。與其他數據庫不同的是,oracle支持函數索引。例如在name字段上建個instr索引,查詢速度就比較快了,這也是為什么instr會比like效率高的原因。
注:instr(title,’手冊’)>0 相當于like‘%手冊%’
instr(title,’手冊’)=0 相當于not like‘%手冊%’

2.設置全文檢索
步驟步驟一:檢查和設置數據庫角色
首先檢查數據庫中是否有CTXSYS用戶和CTXAPP腳色。如果沒有這個用戶和角色,意味著你的數據庫創建時未安裝intermedia功能(10G默認安裝都有此用戶和角色)。你必須修改數據庫以安裝這項功能。默認安裝情況下,ctxsys用戶是被鎖定的,因此要先啟用ctxsys的用戶。

--設置詞法分析器(lexer)
Oracle實現全文檢索,其機制其實很簡單。即通過Oracle專利的詞法分析器(lexer),將文章中所有的表意單元(Oracle 稱為 term)找出來,記錄在一組以dr$開頭的表中,同時記下該term出現的位置、次數、hash值等信息。檢索時,Oracle從這組表中查找相應的term,并計算其出現頻率,根據某個算法來計算每個文檔的得分(score),即所謂的‘匹配率’。而lexer則是該機制的核心,它決定了全文檢索的效率。Oracle針對不同的語言提供了不同的lexer,而我們通常能用到其中的三個:

basic_lexer:針對英語。它能根據空格和標點來將英語單詞從句子中分離,還能自動將一些出現頻率過高已經失去檢索意義的單詞作為‘垃圾’處理,如if,is等,具有較高的處理效率。但該lexer應用于漢語則有很多問題,由于它只認空格和標點,而漢語的一句話中通常不會有空格,因此,它會把整句話作為一個term,事實上失去檢索能力。以‘中國人民站起來了’這句話為例,basic_lexer分析的結果只有一個term,就是‘中國人民站起來了’。此時若檢索‘中國’,將檢索不到內容。

chinese_vgram_lexer:專門的漢語分析器,支持所有漢字字符集(ZHS16CGB231280 ZHS16GBK ZHT32EUC ZHT16BIG5 ZHT32TRIS ZHT16MSWIN950 ZHT16HKSCS UTF8 )。該分析器按字為單元來分析漢語句子。‘中國人民站起來了’這句話,會被它分析成如下幾個term:‘中’,‘中國’,‘國人’,‘人民’,‘民站’,‘站起’,起來’,‘來了’,‘了’。可以看出,這種分析方法,實現算法很簡單,并且能實現‘一網打盡’,但效率則是差強人意。

chinese_lexer:這是一個新的漢語分析器,只支持utf8字符集。上面已經看到,chinese vgram lexer這個分析器由于不認識常用的漢語詞匯,因此分析的單元非常機械,像上面的‘民站’,‘站起’在漢語中根本不會單獨出現,因此這種term是沒有意義的,反而影響效率。chinese_lexer的最大改進就是該分析器能認識大部分常用漢語詞匯,因此能更有效率地分析句子,像以上兩個愚蠢的單元將不會再出現,極大提高了效率。但是它只支持utf8,如果你的數據庫是zhs16gbk字符集,則只能使用笨笨的那個Chinese vgram lexer。如果不做任何設置,Oracle缺省使用basic_lexer這個分析器。

3.測試全文檢索
--測試用戶為oratext,建立此用戶和對應表空間的內容就不寫了:
步驟一:授權,ctxsys登陸并對oratext用戶授權:

alter user ctxsys identified by oracle account unlock;
create user oratext identified by oracle;

GRANT resource, connect, ctxapp TO oratext;
GRANT execute ON ctxsys.ctx_cls TO oratext;
GRANT execute ON ctxsys.ctx_ddl TO oratext;
GRANT execute ON ctxsys.ctx_doc TO oratext;
GRANT execute ON ctxsys.ctx_output TO oratext;
GRANT execute ON ctxsys.ctx_query TO oratext;
GRANT execute ON ctxsys.ctx_report TO oratext;
GRANT execute ON ctxsys.ctx_thes TO oratext;
GRANT execute ON ctxsys.ctx_ulexer TO oratext;

步驟二:設置詞法分析器,使用chinese_vgram_lexer作為分析器:
conn oratext/oracle@service_name

BEGIN --設置詞法分析器
ctx_ddl.create_preference ('oratext_lexer', 'chinese_vgram_lexer');
END;
/

--可以通過下面的語句查看系統默認及設置的oracle text參數:
SELECT pre_name, pre_object FROM ctx_preferences;

可以看到我剛剛設置的語法分析器參數oratext_lexer,(默認的有一個MY_LEXER的語法分析器參數)。

步驟三:建立測試表,插入測試數據:
CREATE TABLE textdemo(
id number NOT NULL PRIMARY KEY,
book_author varchar2(20),--作者
publish_time date,--發布日期
title varchar2(400),--標題
book_abstract varchar2(2000),--摘要
path varchar2(200)--路徑
);

INSERT INTO textdemo VALUES(1,'宮琦峻',to_date('2008-10-07','yyyy-mm-dd'),' 移動城堡','故事發生在19世紀末的歐洲,善良可愛的蘇菲被惡毒的女巫施下魔咒,從18歲的女孩變成90歲的婆婆,孤單無助的她無意中走入鎮外的移動城堡,據說它的主人哈爾以吸取女孩的靈魂為樂,但是事情并沒有人們傳說的那么可怕,性情古怪的哈爾居然收留了蘇菲,兩個人在四腳的移動城堡中開始了奇妙的共同生活,一段交織了愛與痛、樂與悲的愛情故事在戰火中悄悄展開','E:\textsearch\moveingcastle.doc');

INSERT INTO textdemo VALUES(2,'莫貝克曼貝托夫',to_date('2008-10-07','yyyy-mm-dd'),' 子彈轉彎','這部由俄羅斯導演提莫貝克曼貝托夫執導的影片自6 月末在北美上映以來,已經在全球取得了超過3億美元的票房收入。在亞洲上映后也先后拿下日本、韓國等地的票房冠軍寶座。雖然不少網友在此之前也相繼通過各種渠道接觸到本片,但相信影片憑著在大銀幕上呈現出的超酷的視聽效果,依然能夠吸引大量影迷前往影院捧場。','E:\textsearch\catch.pdf');

INSERT INTO textdemo VALUES(3,'袁泉',to_date('2008-10-07','yyyy-mm-dd'),'主演吳彥祖和袁泉現身','電影《如夢》在上海同樂坊拍攝,主演吳彥祖和袁泉現身。由于是深夜拍攝,所以周圍并沒有過多的fans注意到,給了劇組一個很清凈的拍攝環境,站在街頭的袁泉低著頭,在寒冷的夜里看上去還真有些像女鬼,令人毛骨悚然。','E:\textsearch\dream.txt');
commit;

--步驟四:在book_abstract字段建立索引使用剛剛設置的ORATEXT_LEXER :chinese_vgram_lexer作為分析器。
CREATE INDEX demo_abstract ON textdemo(book_abstract) indextype IS ctxsys.context parameters('lexer ORATEXT_LEXER');

--之后如上所述多出很多dr$開頭的表和索引,系統會創建四個相關的表:
DR$DEMO_ABSTRACT$I(分詞后的TOKEN表)\
DR$DEMO_ABSTRACT$K\
DR$DEMO_ABSTRACT$N \
DR$DEMO_ABSTRACT$R

--下面的語句可以查看索引創建過程中是否發生了錯誤:
SELECT * FROM ctx_USER_index_errors

附:對于建立索引的類型(例如ctxsys.context),包括四種:context,ctxcat,ctxrule,ctxxpath。

CONTEXT用于對含有大量連續文本數據進行檢索。支持word、html、xml、text等很多數據格式。支持范圍(range)分區,支持并行創建索引(Parallel indexing)的索引類型。

支持類型:VARCHAR2, CLOB, BLOB, CHAR, BFILE, XMLType, and URIType.DML。操作后,需要CTX_DDL.SYNC_INDEX手工同步索引如果有查詢包含多個詞語,直接用空格隔開(如 oracle itpub)。

查詢標識符CONTAINS
CTXCAT適用于混合查詢語句(如查詢條件包括產品id,價格,描述等)。適合于查詢較小的具有一定結構的文本段。具有事務性。DML 操作后,索引會自動進行同步。

操作符:and,or,&gt,;<, =,between,in
查詢標識符CATSEARCH
CTXRULE查詢標識符MATCHES。
CTXXPATH(這兩個索引沒有去更多搜索相關內容)
一般來說我們建立CONTEXT類型的索引(CONTAINS來查詢)。

--步驟五:查詢測試
--查詢或
SELECT score(20),t.* FROM textdemo t WHERE contains(book_abstract,'移動城堡 or 俄羅斯',20)>0;
SELECT score(20),t.* FROM textdemo t WHERE contains(book_abstract,'移動城堡 or 歐洲',20)>0;
--基本查詢
SELECT score(20),t.* FROM textdemo t WHERE contains(book_abstract,'移動城堡',20)>0;
--查詢包含多個詞語and測試通過
SELECT score(20),t.* FROM textdemo t WHERE contains(book_abstract,'移動城堡 and 歐洲',20)>0;

4.對多字段建立全文索引(還在揣摩中)
很多時候需要從多個文本字段中查詢滿足條件的記錄,這時就需要建立針對多個字段的全文索引,例如需要從pmhsubjects(專題表)的 subjectname(專題名稱)和briefintro(簡介)上進行全文檢索,則需要按以下步驟進行操作:

--建立多字段索引的preference,以ctxsys登錄,并執行:
BEGIN
ctx_ddl.create_preference('ctx_demo_abstract_title','MULTI_COLUMN_DATASTORE');
END;
/

--建立preference對應的字段值(以ctxsys登錄) 對應title path book_abstract三個字段建立索引:
BEGIN
ctx_ddl.set_attribute('ctx_demo_abstract_title ','columns','title,path');
END;
/

--建立全文索引:
create table textdemo1 as SELECT * FROM textdemo;

--ORA-29855:執行ODCIINDEXCREATE例行程序出錯
CREATE INDEX demo_abstract_title ON textdemo1(book_abstract) indextype IS ctxsys.context parameters('DATASTORE ctxsys. ctx_demo_ abstract_title lexer ORATEXT_LEXER');

--測試
SELECT score(20),t.* FROM textdemo1 t WHERE contains(book_abstract,'移動城堡 or 俄羅斯',20)>0;

--5.對大字段進行檢索測試
CREATE TABLE mytable(
id number PRIMARY KEY,
docs clob);

INSERT INTO mytable VALUES(111555,'this text will be indexed');
INSERT INTO mytable VALUES(111556,'this is a direct_datastore example');
Commit;

CREATE INDEX myindex ON mytable(docs) indextype IS ctxsys.context parameters ('datastore ctxsys.default_datastore');

SELECT * FROM mytable WHERE contains(docs, 'text') > 0;

-------------------------------------------------------------------------------------------------------------------------------------------------------
oracle 全文索引
--模糊查詢的兩種方式
select * from dj_nsrxx where contains(nsrmc,'和謙亨') > 0;
select * from dj_nsrxx where nsrmc like '%康仁如快餐店%';

--建立分詞器
BEGIN
ctx_ddl.create_preference ('my_chinese_vgram_lexer', 'chinese_vgram_lexer');
END;

--建立索引
CREATE INDEX IDX_DJ_NSRXX_NSRMC_QW ON dj_nsrxx(nsrmc) indextype is ctxsys.context parameters('lexer my_chinese_vgram_lexer');
--使用實時同步(DML提交時同步全文索引)
CREATE INDEX IDX_DJ_NSRXX_NSRMC_QW ON dj_nsrxx(nsrmc) indextype is ctxsys.context PARAMETERS ('LEXER my_chinese_vgram_lexer SYNC (ON COMMIT)');

--刷新索引
BEGIN
ctx_ddl.sync_index('IDX_DJ_NSRXX_NSRMC_QW');
end;
/

--定時job刷新索引,未測試
BEGIN
DBMS_JOB.SUBMIT(:jobno,ctx_ddl.sync_index('IDX_DJ_NSRXX_NSRMC_QW'),SYSDATE, SYSDATE + (1/24/4));
commit;
END;
/

--查詢索引產生的表
select * from dba_tables where table_name like '%IDX_DJ_NSRXX_NSRMC_QW%'
select count(*) from DR$IDX_DJ_NSRXX_NSRMC_QW$I

--刪除索引
drop index IDX_DJ_NSRXX_NSRMC_QW;

--刪除分詞器
begin
ctx_ddl.drop_preference('my_chinese_vgram_lexer');
end;

--查詢索引
select * from dba_indexes;
item chinese_vgram chinese comments
測試數據量 80萬 80萬
創建時間 37s 370S
刷新時間(0條跟新) 0s 0s 增量刷新,刷新速度較快
刷新時間(3條跟新) 0.031S 0.031S
索引條數 123萬 68萬
==注:
如果一個列沒有使用全文索引,而使用了contains的話會報錯 column is not indexed
select * from dj_nsrxx where contains(nsrmc,’易家聯快餐店’) > 0;==
以下為網上摘取的內容,簡單的描述了oracle全文索引的原理

Oracle實現全文檢索。
創建即通過Oracle專利的詞法分析器(lexer),將文章中所有的表意單元(Oracle稱為term)找出來,記錄在一組以dr$開頭的表中,同時記下該term出現的位置、次數、hash值等信息。
檢索
檢索時,Oracle從這組表中查找相應的term,并計算其出現頻率,根據某個算法來計算每個文檔的得分(score),即所謂的‘匹配率’。而lexer則是該機制的核心,它決定了全文檢索的效率。
Oracle針對不同的語言提供了不同的lexer,而我們通常能用到其中的三個:
basic_lexer:針對英語。它能根據空格和標點來將英語單詞從句子中分離,還能自動將一些出現頻率過高已經失去檢索意義的單詞作為‘垃圾’處理,如if , is等,具有較高的處理效率。但該lexer應用于漢語則有很多問題,由于它只認空格和標點,而漢語的一句話中通常不會有空格,因此,它會把整句話作為一個term,事實上失去檢索能力。以‘中國人民站起來了’這句話為例,basic_lexer分析的結果只有一個term ,就是‘中國人民站起來了’。此時若檢索‘中國’,將檢索不到內容。
chinese_vgram_lexer:專門的漢語分析器,支持所有漢字字符集(ZHS16CGB231280ZHS16GBKZHT32EUCZHT16BIG5ZHT32TRISZHT16MSWIN950ZHT16HKSCSUTF8)。該分析器按字為單元來分析漢語句子。‘中國人民站起來了’這句話,會被它分析成如下幾個term: ‘中’,‘中國’,‘國人’,‘人民’,‘民站’,‘站起’,起來’,‘來了’,‘了’。可以看出,這種分析方法,實現算法很簡單,并且能實現‘一網打盡’,但效率則是差強人意。
chinese_lexer:這是一個新的漢語分析器,只支持utf8字符集。上面已經看到,chinese vgram lexer這個分析器由于不認識常用的漢語詞匯,因此分析的單元非常機械,像上面的‘民站’,‘站起’在漢語中根本不會單獨出現,因此這種term是沒有意義的,反而影響效率。chinese_lexer的最大改進就是該分析器能認識大部分常用漢語詞匯,因此能更有效率地分析句子,像以上兩個愚蠢的單元將不會再出現,極大提高了效率。但是它只支持utf8,如果你的數據庫是zhs16gbk字符集,則只能使用笨笨的那個Chinese vgram lexer.
==如果不做任何設置,Oracle缺省使用basic_lexer這個分析器。要指定使用哪一個lexer,可以這樣操作:==
BEGIN
ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer');
END;

其中my_lexer是分析器名。
在索引建好后,我們可以在該用戶下查到Oracle自動產生了以下幾個表:(假設索引名為myindex):
DRmyindexI、DRmyindexK、DRmyindexR、DRmyindexN其中以I表最重要,可以查詢一下該表,看看有什么內容:
SELECT token_text, token_count FROM drirsk1I WHERE ROWNUM <= 20;
這里就不列出查詢接過了。可以看到,該表中保存的其實就是Oracle 分析你的文檔后,生成的term記錄在這里,包括term出現的位置、次數、hash值等。當文檔的內容改變后,可以想見這個I表的內容也應該相應改變,才能保證Oracle在做全文檢索時正確檢索到內容(因為所謂全文檢索,其實核心就是查詢這個表)。這就用到sync(同步) 和 optimize(優化)了。
同步(sync): 將新的term 保存到I表;
優化(optimize): 清除I表的垃圾,主要是將已經被刪除的term從I表刪除。
當基表中的被索引文檔發生insert、update、delete操作的時候,基表的改變并不能馬上影響到索引上直到同步索引。可以查詢視圖 CTX_USER_PENDING查看相應的改動。例如:
SELECT pnd_index_name, pnd_rowid,
TO_CHAR (pnd_timestamp, 'dd-mon-yyyy hh24:mi:ss') timestamp
FROM ctx_user_pending;

該語句的輸出類似如下:
PND_INDEX_NAME PND_ROWID TIMESTAMP
MYINDEX AAADXnAABAAAS3SAAC 06-oct-1999 15:56:50
--------------------------------------------------------------------------------
同步和優化方法:
可以使用Oracle提供的ctx_ddl包同步和優化索引
一. 對于CTXCAT類型的索引來說, 當對基表進行DML操作的時候,Oracle自動維護索引。對文檔的改變馬上反映到索引中。CTXCAT是事務形的索引。
索引的同步
在對基表插入,修改,刪除之后同步索引。推薦使用sync同步索引。 語法:
ctx_ddl.sync_index(
idx_name IN VARCHAR2 DEFAULT NULL
memory IN VARCHAR2 DEFAULT NULL,
part_name IN VARCHAR2 DEFAULT NULL
parallel_degree IN NUMBER DEFAULT 1);

idx_name 索引名稱
memory 指定同步索引需要的內存。默認是系統參數DEFAULT_INDEX_MEMORY 。
指定一個大的內存時候可以加快索引效率和查詢速度,且索引有較少的碎片
part_name 同步哪個分區索引。
parallel_degree 并行同步索引。設置并行度。
例如:
同步索引myindex:Exec ctx_ddl.sync_index (‘myindex’);
實施建議:建議通過oracle的job對索引進行同步

instr函數在Oracle/PLSQL中是返回要截取的字符串在源字符串中的位置。instr是一個非常好用的字符串處理函數,幾乎所有的字符串分隔都用到此函數。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Oracle全文索引
原創 Oracle 作者:lhrbest 時間:2017-05-13 19:22:43 953 0
Oracle全文索引

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
一、設置詞法分析器
Oracle實現全文檢索,其機制其實很簡單。即通過Oracle專利的詞法分析器(lexer),將文章中所有的表意單元(Oracle 稱為 term)找出來,記錄在一組 以dr$開頭的表中,同時記下該term出現的位置、次數、hash 值等信息。檢索時,Oracle 從這組表中查找相應的term,并計算其出現頻率,根據某個算法來計算每個文檔的得分(score),即所謂的‘匹配率’。而lexer則是該機制的核心,它決定了全文檢索的效率。Oracle 針對不同的語言提供了不同的 lexer, 而我們通常能用到其中的三個:

n basic_lexer: 針對英語。它能根據空格和標點來將英語單詞從句子中分離,還能自動將一些出現頻率過高已經失去檢索意義的單詞作為‘垃圾’處理,如if , is 等,具有較高的處理效率。但該lexer應用于漢語則有很多問題,由于它只認空格和標點,而漢語的一句話中通常不會有空格,因此,它會把整句話作為一個term,事實上失去檢索能力。以‘中國人民站起來了’這句話為例,basic_lexer 分析的結果只有一個term ,就是‘中國人民站起來了’。此時若檢索‘中國’,將檢索不到內容。
n chinese_vgram_lexer: 專門的漢語分析器,支持所有漢字字符集(ZHS16CGB231280 ZHS16GBK ZHT32EUC ZHT16BIG5 ZHT32TRIS ZHT16MSWIN950 ZHT16HKSCS UTF8 )。該分析器按字為單元來分析漢語句子。‘中國人民站起來了’這句話,會被它分析成如下幾個term: ‘中’,‘中國’,‘國人’,‘人民’,‘民站’,‘站起’,起來’,‘來了’,‘了’。可以看出,這種分析方法,實現算法很簡單,并且能實現‘一網打盡’,但效率則是差強人意。
n chinese_lexer: 這是一個新的漢語分析器,只支持utf8字符集。上面已經看到,chinese vgram lexer這個分析器由于不認識常用的漢語詞匯,因此分析的單元非常機械,像上面的‘民站’,‘站起’在漢語中根本不會單獨出現,因此這種term是沒有意義的,反而影響效率。chinese_lexer的最大改進就是該分析器 能認識大部分常用漢語詞匯,因此能更有效率地分析句子,像以上兩個愚蠢的單元將不會再出現,極大 提高了效率。但是它只支持 utf8, 如果你的數據庫是zhs16gbk字符集,則只能使用笨笨的那個Chinese vgram lexer.
如果不做任何設置,Oracle 缺省使用basic_lexer這個分析器。要指定使用哪一個lexer, 可以這樣操作:
BEGIN
ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer');
END;
/
其中my_lexer是分析器名。

二、建立全文索引
在建立intermedia索引時,指明所用的lexer:

CREATE INDEX myindex ON mytable(mycolumn) indextype is ctxsys.context parameters('lexer my_lexer');
※個人體會:全文索引建立后,用pl/sql developer工具view table,在index這一欄是看不到索引信息的。
而本人在刪除全文索引時遇到過一下報錯:
SQL> drop index searchkeytbl_key;
drop index searchkeytbl_key
ORA-29868: cannot issue DDL on a domain index marked as LOADING
解決方法:
ORA-29868: cannot issue DDL on a domain index marked as LOADING
說明:在創建索引的時候斷開、重啟等導致索引中斷沒有執行成功,之后再drop或者rebuild等操作的時候都會報此錯誤
解決:只能drop index ind_name force強行刪除,然后再重建

三、索引同步維護
用以下的兩個job來完成(該job要建在和表同一個用戶下) :
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''index_name'');',
SYSDATE, 'SYSDATE + (1/24/4)');
commit;
END; //同步

VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''myindex'',''FULL'');',
SYSDATE, 'SYSDATE + 1');
commit; //優化
建完后手動運行下:
exec dbms_job.run(jobno);
※個人體會:運行job可能會有問題,此時可以單獨運行索引,嘗試一下
exec ctx_ddl.sync_index('index_name');
如果單獨運行沒有問題,則檢查job是否寫錯或者當前操作的oracle數據庫用戶有無運行存儲過程的權限
SQL> exec dbms_job.run(190);
begin dbms_job.run(190); end;
ORA-12011: execution of 1 jobs failed
ORA-06512: at "SYS.DBMS_IJOB", line 406
ORA-06512: at "SYS.DBMS_JOB", line 272
ORA-06512: at line 1
以上報錯就是用戶沒有運行任何存儲過程造成的,此時需要對用戶加上這個權限:
SQL> grant execute any procedure to oracle_username;
再看一下job的情況
select * from user_jobs;

四、測試
關聯查詢: select * from table_name where contains (column_name,'keyword') >0;
SQL> select * from searchkeytbl where type='城市' and contains (key,'楊浦') >0;
USERNAME TYPE KEY
-------------------- ---------------------------------------- --------------------------------------------------------------------------------
mujian80 城市 上海市楊浦區

五、問題
加全文索引遇到的問題(不斷更新)
SQL> create index gh_ghname_idx on gh(ghname) indextype is ctxsys.context parameters('lexer gh_ghname_lexer');
create index gh_ghname_idx on gh(ghname) indextype is ctxsys.context parameters('lexer gh_ghname_lexer')
ORA-24795: Illegal COMMIT attempt made
ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
DRG-50857: oracle error in drvddl.IndexCreate
ORA-20000: Oracle Text error:
DRG-50857: oracle error in drvdml.MaintainKTab
ORA-24795: Illegal COMMIT attempt made
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 364


To avoid the error, please use one of the following solutions
1. Don't use a 32k-blocksized tablespace to store the internal index objects
- or -
2. Download Patch 5596325 from Metalink and apply it as described in the README file.

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
通過案例學調優之--Oracle 全文索引
全文檢索(oracle text)
Oracle Text使Oracle9i具備了強大的文本檢索能力和智能化的文本管理能力,Oracle Text 是 Oracle9i 采用的新名稱,在 oracle8/8i 中被稱為 oracle intermedia text,oracle8 以前是 oracle context cartridge。Oracle Text 的索引和查找功能并不局限于存儲在數據庫中的數據。 它可以對存儲于文件系統中的文檔進行檢索和查找,并可檢索超過 150 種文檔類型,包括 Microsoft Word、PDF和XML。Oracle Text查找功能包括模糊查找、詞干查找(搜索mice 和查找 mouse)、通配符、相近性等查找方式,以及結果分級和關鍵詞突出顯示等。你甚至 可以增加一個詞典,以查找搭配詞,并找出包含該搭配詞的文檔。
Oracle text 需要為可檢索的數據項建立索引,用戶才能夠通過搜索查找內容,索引進 程是根據管道建模的,在這個管道中,數據經過一系列的轉換后,將其關鍵字會添加到索引 中。該索引進程分為多個階段,如下圖

?

1.數據檢索(Datastore):只是將數據從數據存儲(例如 web 頁面、數據庫大型對象或本 地文件系統)中取出,然后作為數據流傳送到下一個階段。
2. 過濾(Filter):過濾器負責將各種文件格式的數據轉換為純文本格式,索引管道中的其 他組件只能處理純文本數據,不能識別 Ms word 或 excel 等文件格式。
3. 分段(Sectioner):分段器添加關于原始數據項結構的元數據。
4. 詞法分析(Lexer):根據數據項的語言將字符流分為幾個字詞。 5. 索引(Index):最后一個階段將關鍵字添加到實際索引中。
全文檢索和普通檢索的區別
不使用Oracle text功能,當然也有很多方法可以在Oracle數據庫中搜索文本,比如INSTR函數和LIKE操作:
1 、SELECT *FROM mytext WHERE INSTR (thetext, 'Oracle') > 0;
2 、SELECT * FROM mytext WHERE thetext LIKE '%Oracle%';
有很多時候,使用instr和like是很理想的, 特別是搜索僅跨越很小的表的時候。然而通過這些文本定位的方法將導致全表掃描,對資源來說消耗比較昂貴,而且實現的搜索功能也非常有限,因此對海量的文本數據進行搜索時,建議使用oralce提供的全文檢索功能。
附:這里順帶記錄一下INSTR和LIKE:
Oracle中,可以使用 Instr 函數對某個字符串進行判斷,判斷其是否含有指定的字符。其語法為:Instr(string, substring, position, occurrence)。
string:代表源字符串(寫入字段則表示此字段的內容)。
substring:代表想從源字符串中查找的子串。
position:代表查找的開始位置,該參數可選的,默認為1。
occurrence:代表想從源字符中查找出第幾次出現的substring,該參數也是可選的,默認為1。
position 的值為負數,那么代表從右往左進行查找。
instr和like的性能比較
其實從效率角度來看,誰能用到索引,誰的查詢速度就會快。
like有時可以用到索引,例如:name like ‘李%’,而當下面的情況時索引會失效:name like ‘%李’。所以一般我們查找中文類似于‘%字符%’時,索引都會失效。與其他數據庫不同的是,oracle支持函數索引。例如在name字段上建個instr索引,查詢速度就比較快了,這也是為什么instr會比like效率高的原因。
注:instr(title,’手冊’)>0 相當于like‘%手冊%’
instr(title,’手冊’)=0 相當于not like‘%手冊%’
Oracle Text 索引原理
Oracle text 索引將文本中所有的字符轉化成記號(token),如 www.taobao.com 會轉化 成 www,taobao,com 這樣的記號。
Oracle10g 里面支持四種類型的索引:
context、ctxcat、ctxrule、ctxxpath

?

CONTEXT
用于對含有大量連續文本數據進行檢索。支持 word、html、xml、text 等很多數據格式。支持范圍(range)分區,支持并行創建索引(Parallel indexing)的索引類型。支持類型:VARCHAR2, CLOB, BLOB, CHAR, BFILE, XMLType, and URIType.
DML 操作后,需要 CTX_DDL.SYNC_INDEX 手工同步索引 如果有查詢包含多個詞語,直接用空格隔開(如 oracle itpub)
案例分析:
設置全文檢索
步驟步驟一:檢查和設置數據庫角色
首先檢查數據庫中是否有CTXSYS用戶和CTXAPP腳色。如果沒有這個用戶和角色,意味著你的數據庫創建時未安裝intermedia功能(10G默認安裝都有此用戶和角色)。你必須修改數據庫以安裝這項功能。默認安裝情況下,ctxsys用戶是被鎖定的,因此要先啟用ctxsys的用戶。
11:53:13 SYS@ prod >select username,account_status from dba_users where username like 'CTX%';
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
CTXSYS EXPIRED & LOCKED

11:54:17 SYS@ prod >alter user ctxsys identified by oracle account unlock;
User altered.

11:55:07 SYS@ prod >select username,account_status from dba_users where username like 'CTX%';
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
CTXSYS OPEN

12:00:13 SYS@ prod >select role from dba_roles
12:00:23 2 where role like 'CTX%';
ROLE
------------------------------
CTXAPP
步驟二:賦權
在ctxsys用戶下,授予測試用戶scott以下權限:
[oracle@RH6 ~]$ cat t.sql
GRANT resource, CONNECT, ctxapp TO scott;
GRANT EXECUTE ON ctxsys.ctx_cls TO scott;
GRANT EXECUTE ON ctxsys.ctx_ddl TO scott;
GRANT EXECUTE ON ctxsys.ctx_doc TO scott;
GRANT EXECUTE ON ctxsys.ctx_output TO scott;
GRANT EXECUTE ON ctxsys.ctx_query TO scott;
GRANT EXECUTE ON ctxsys.ctx_report TO scott;
GRANT EXECUTE ON ctxsys.ctx_thes TO scott;
GRANT EXECUTE ON ctxsys.ctx_ulexer TO scott;

11:58:04 SYS@ prod >@/home/oracle/t.sql
Grant succeeded.
Elapsed: 00:00:00.15
Grant succeeded.
Elapsed: 00:00:00.21
Grant succeeded.
Elapsed: 00:00:00.09
Grant succeeded.
Elapsed: 00:00:00.09
Grant succeeded.
Elapsed: 00:00:00.13
Grant succeeded.
Elapsed: 00:00:00.07
Grant succeeded.
Elapsed: 00:00:00.09
Grant succeeded.
Elapsed: 00:00:00.10
Grant succeeded.
Elapsed: 00:00:00.07
步驟三:設置詞法分析器(lexer)
Oracle實現全文檢索,其機制其實很簡單。即通過Oracle專利的詞法分析器(lexer),將文章中所有的表意單元(Oracle 稱為 term)找出來,記錄在一組以dr$開頭的表中,同時記下該term出現的位置、次數、hash值等信息。檢索時,Oracle從這組表中查找相應的term,并計算其出現頻率,根據某個算法來計算每個文檔的得分(score),即所謂的‘匹配率’。而lexer則是該機制的核心,它決定了全文檢索的效率。Oracle針對不同的語言提供了不同的lexer,而我們通常能用到其中的三個:
[cpp] view plain copy
print?
basic_lexer:
針對英語。它能根據空格和標點來將英語單詞從句子中分離,還能自動將一些出現頻率過高已經失去檢索意義的單詞作為‘垃圾’處理,如if,is等,具有較高的處理效率。但該lexer應用于漢語則有很多問題,由于它只認空格和標點,而漢語的一句話中通常不會有空格,因此,它會把整句話作為一個term,事實上失去檢索能力。以‘中國人民站起來了’這句話為例,basic_lexer分析的結果只有一個term,就是‘中國人民站起來了’。此時若檢索‘中國’,將檢索不到內容。

chinese_vgram_lexer:
專門的漢語分析器,支持所有漢字字符集(ZHS16CGB231280 ZHS16GBK ZHT32EUC ZHT16BIG5 ZHT32TRIS ZHT16MSWIN950 ZHT16HKSCS UTF8 )。該分析器按字為單元來分析漢語句子。‘中國人民站起來了’這句話,會被它分析成如下幾個term:‘中’,‘中國’,‘國人’,‘人民’,‘民站’,‘站起’,起來’,‘來了’,‘了’。可以看出,這種分析方法,實現算法很簡單,并且能實現‘一網打盡’,但效率則是差強人意。

chinese_lexer:
這是一個新的漢語分析器,只支持utf8字符集。上面已經看到,chinese vgram lexer這個分析器由于不認識常用的漢語詞匯,因此分析的單元非常機械,像上面的‘民站’,‘站起’在漢語中根本不會單獨出現,因此這種term是沒有意義的,反而影響效率。chinese_lexer的最大改進就是該分析器能認識大部分常用漢語詞匯,因此能更有效率地分析句子,像以上兩個愚蠢的單元將不會再出現,極大提高了效率。但是它只支持utf8,如果你的數據庫是zhs16gbk字符集,則只能使用笨笨的那個Chinese vgram lexer。如果不做任何設置,Oracle缺省使用basic_lexer這個分析器。
[java] view plain copy
print?
12:05:01 SYS@ prod >select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK

12:08:05 SCOTT@ prod >desc ctx_ddl
PROCEDURE CREATE_PREFERENCE
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
PREFERENCE_NAME VARCHAR2 IN
OBJECT_NAME VARCHAR2 IN

12:12:25 SCOTT@ prod >EXEC ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer');
PL/SQL procedure successfully completed.

創建表
12:13:15 SCOTT@ prod >CREATE TABLE textdemo(
12:15:47 2 id NUMBER NOT NULL PRIMARY KEY,
12:15:47 3 book_author varchar2(100),--作者
12:15:47 4 publish_time DATE,--發布日期
12:15:47 5 title varchar2(400),--標題
12:15:47 6 book_abstract varchar2(2000),--摘要
12:15:47 7 path varchar2(200)--路徑
12:15:47 8 );
Table created.
插入數據
14:53:20 SCOTT@ prod >insert into textdemo values (10,'luyao',sysdate,'pingfan de world','zhen shi de gushi','/home/1.txt');
1 row created.

14:54:32 SCOTT@ prod >commit;
步驟四:在book_abstract字段建立索引使用剛剛設置的ORATEXT_LEXER :chinese_vgram_lexer作為分析器。
12:16:15 SCOTT@ prod >CREATE INDEX demo_abstract ON textdemo(book_abstract) indextype IS ctxsys.context parameters('lexer my_LEXER');

之后如上所述多出很多dr$開頭的表和索引,系統會創建四個相關的表:
DR$DEMO_ABSTRACT$I(分詞后的TOKEN表)
DR$DEMO_ABSTRACT$K
DR$DEMO_ABSTRACT$N
DR$DEMO_ABSTRACT$R
14:56:16 SCOTT@ prod >select * from tab;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BONUS TABLE
DEPT TABLE
DR$DEMO_ABSTRACT$I TABLE
DR$DEMO_ABSTRACT$K TABLE
DR$DEMO_ABSTRACT$N TABLE
DR$DEMO_ABSTRACT$R TABLE
EMP TABLE
SALGRADE TABLE
TEXTDEMO TABLE

9 rows selected.
14:56:36 SCOTT@ prod >desc DR$DEMO_ABSTRACT$I
Name Null? Type
----------------------------------------------------------------- -------- --------------------------------------------
TOKEN_TEXT NOT NULL VARCHAR2(64)
TOKEN_TYPE NOT NULL NUMBER(3)
TOKEN_FIRST NOT NULL NUMBER(10)
TOKEN_LAST NOT NULL NUMBER(10)
TOKEN_COUNT NOT NULL NUMBER(10)
TOKEN_INFO BLOB

14:57:45 SCOTT@ prod >desc DR$DEMO_ABSTRACT$K
Name Null? Type
----------------------------------------------------------------- -------- --------------------------------------------
DOCID NUMBER(38)
TEXTKEY NOT NULL ROWID

14:57:57 SCOTT@ prod >desc DR$DEMO_ABSTRACT$N
Name Null? Type
----------------------------------------------------------------- -------- --------------------------------------------
NLT_DOCID NOT NULL NUMBER(38)
NLT_MARK NOT NULL CHAR(1)

14:58:11 SCOTT@ prod >desc DR$DEMO_ABSTRACT$R
Name Null? Type
----------------------------------------------------------------- -------- --------------------------------------------
ROW_NO NUMBER(3)
DATA BLOB

14:58:26 SCOTT@ prod >select index_name,index_type,table_name from user_indexes;

INDEX_NAME INDEX_TYPE TABLE_NAME
------------------------------ --------------------------- ------------------------------
DEMO_ABSTRACT DOMAIN TEXTDEMO
SYS_C0013418 NORMAL TEXTDEMO
PK_EMP NORMAL EMP
SYS_IL0000076525C00002$$ LOB DR$DEMO_ABSTRACT$R
SYS_IOT_TOP_76528 IOT - TOP DR$DEMO_ABSTRACT$N
SYS_IOT_TOP_76523 IOT - TOP DR$DEMO_ABSTRACT$K
SYS_IL0000076520C00006$$ LOB DR$DEMO_ABSTRACT$I
DR$DEMO_ABSTRACT$X NORMAL DR$DEMO_ABSTRACT$I
PK_DEPT NORMAL DEPT

9 rows selected.
下面的語句可以查看索引創建過程中是否發生了錯誤:
[cpp] view plain copy
print?
SELECT * FROM ctx_USER_index_errors

附:對于建立索引的類型(例如ctxsys.context),包括四種:context,ctxcat,ctxrule,ctxxpath。
CONTEXT用于對含有大量連續文本數據進行檢索。支持word、html、xml、text等很多數據格式。支持范圍(range)分區,支持并行創建索引(Parallel indexing)的索引類型。
支持類型:VARCHAR2, CLOB, BLOB, CHAR, BFILE, XMLType, and URIType.DML。操作后,需要CTX_DDL.SYNC_INDEX手工同步索引如果有查詢包含多個詞語,直接用空格隔開(如 oracle itpub)。

查詢標識符CONTAINS
CTXCAT適用于混合查詢語句(如查詢條件包括產品id,價格,描述等)。適合于查詢較小的具有一定結構的文本段。具有事務性。DML 操作后,索引會自動進行同步。
操作符:and,or,>,;<, =,between,in
查詢標識符CATSEARCH
CTXRULE查詢標識符MATCHES。
CTXXPATH(這兩個索引沒有去更多搜索相關內容)
一般來說我們建立CONTEXT類型的索引(CONTAINS來查詢)。
步驟五:查詢測試
查看執行計劃
15:04:36 SCOTT@ prod >r
1* select * from textdemo where contains(book_abstract,'gushi')>0

Elapsed: 00:00:00.02

Execution Plan
----------------------------------------------------------
Plan hash value: 2570915478

---------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 1392 | 4 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| TEXTDEMO | 1 | 1392 | 4 (0)| 00:00:01 |
|* 2 | DOMAIN INDEX | DEMO_ABSTRACT | | | 4 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - access("CTXSYS"."CONTAINS"("BOOK_ABSTRACT",'gushi')>0)

Note
-----
- dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
29 recursive calls
0 db block gets
33 consistent gets
0 physical reads
0 redo size
796 bytes sent via SQL*Net to client
415 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed

15:04:37 SCOTT@ prod >

通過sql trace查看詳細計劃(部分內容)

SQL ID: 2rsr1z6zkp24p
Plan Hash: 2570915478
select *
from
textdemo where contains(book_abstract,:"SYS_B_0")>:"SYS_B_1"

call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.01 0.01 0 250 0 0
Fetch 2 0.00 0.00 0 2 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 4 0.01 0.01 0 252 0 1
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 101

Rows Row Source Operation
------- ---------------------------------------------------
1 TABLE ACCESS BY INDEX ROWID TEXTDEMO (cr=12 pr=0 pw=0 time=0 us cost=4 size=1392 card=1)
1 DOMAIN INDEX DEMO_ABSTRACT (cr=11 pr=0 pw=0 time=0 us cost=4 size=0 card=0)

declare
cost sys.ODCICost := sys.ODCICost(NULL, NULL, NULL, NULL);
arg0 VARCHAR2(1) := null;

begin
:1 := "CTXSYS"."TEXTOPTSTATS".ODCIStatsFunctionCost(
sys.ODCIFuncInfo('CTXSYS',
'CTX_CONTAINS',
'TEXTCONTAINS',
2),
cost,
sys.ODCIARGDESCLIST(sys.ODCIARGDESC(2, 'TEXTDEMO', 'SCOTT', '"BOOK_ABSTRACT"', NULL, NULL, NULL), sys.ODCIARG
DESC(1, NULL, NULL, NULL, NULL, NULL, NULL))
, arg0, :5,
sys.ODCIENV(:6,:7,:8,:9));
if cost.CPUCost IS NULL then
:2 := -1.0;
else
:2 := cost.CPUCost;
end if;
if cost.IOCost IS NULL then
:3 := -1.0;
else
:3 := cost.IOCost;
end if;
if cost.NetworkCost IS NULL then
:4 := -1.0;
else
:4 := cost.NetworkCost;
end if;
exception
when others then
raise;
end;

call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 2 0.00 0.00 0 0 0 0
Execute 2 0.00 0.00 0 18 0 2
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 4 0.00 0.00 0 18 0 2

Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: 101 (recursive depth: 1)
全文索引和DML操作
Insert 操作:
15:19:21 SCOTT@ prod >insert into textdemo values (20,'huoda',sysdate,'musilin de zangli','meili de rensheng','/home/2.txt');
1 row created.
15:20:10 SCOTT@ prod >commit;

15:21:35 SCOTT@ prod >select id,BOOK_ABSTRACT from textdemo where BOOK_ABSTRACT like '%rensheng%'
ID BOOK_ABSTRACT
---------- --------------------------------------------------
20 meili de rensheng

15:23:12 SCOTT@ prod >set autotrace on
15:23:38 SCOTT@ prod >select id,BOOK_ABSTRACT from textdemo where contains(BOOK_ABSTRACT,'rensheng')>0
no rows selected
Execution Plan
----------------------------------------------------------
Plan hash value: 2570915478
---------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 1027 | 4 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| TEXTDEMO | 1 | 1027 | 4 (0)| 00:00:01 |
|* 2 | DOMAIN INDEX | DEMO_ABSTRACT | | | 4 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("CTXSYS"."CONTAINS"("BOOK_ABSTRACT",'rensheng')>0)
Note
-----
- dynamic sampling used for this statement (level=2)
Statistics
----------------------------------------------------------
23 recursive calls
0 db block gets
33 consistent gets
0 physical reads
0 redo size
349 bytes sent via SQL*Net to client
404 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
15:26:40 SYS@ prod >select * from ctxsys.dr$pending;
PND_CID PND_PID PND_ROWID PND_TIMES P
---------- ---------- ------------------ --------- -
1082 0 AAASrlAAEAAAAI1AAB 21-NOV-14 N
15:26:26 SCOTT@ prod >alter index demo_abstract rebuild parameters('sync');
Index altered.
15:30:10 SCOTT@ prod >select id,BOOK_ABSTRACT from textdemo where contains(BOOK_ABSTRACT,'rensheng')>0;
ID BOOK_ABSTRACT
---------- --------------------------------------------------
20 meili de rensheng
在做Insert操作時,Oracle會把一條信息放入到CTXSYS.DR$PENDING表里,必須手工進行同步才能更新全文索引。

Delete 操作:

15:30:37 SCOTT@ prod >delete from textdemo where id=20;
1 row deleted.

15:33:06 SCOTT@ prod >select id,BOOK_ABSTRACT from textdemo;
ID BOOK_ABSTRACT
---------- --------------------------------------------------
10 zhen shi de gushi

15:33:39 SCOTT@ prod >rollback;
Rollback complete.

15:33:50 SCOTT@ prod >select id,BOOK_ABSTRACT from textdemo;
ID BOOK_ABSTRACT
---------- --------------------------------------------------
10 zhen shi de gushi
20 meili de rensheng
Delete 操作后,索引會立刻更新。
Update 操作:
15:38:14 SCOTT@ prod >update textdemo set BOOK_ABSTRACT='meili de gushi' where id=20;
1 row updated.

15:39:48 SYS@ prod >select * from ctxsys.dr$delete;
no rows selected

15:39:59 SYS@ prod >select * from ctxsys.dr$pending;
no rows selected

15:43:03 SCOTT@ prod >select id,BOOK_ABSTRACT from textdemo where contains(BOOK_ABSTRACT,'gushi')>0;
ID BOOK_ABSTRACT
---------- --------------------------------------------------
10 zhen shi de gushi

15:43:14 SCOTT@ prod >alter index demo_abstract rebuild parameters('sync');
Index altered.

15:43:39 SCOTT@ prod >select id,BOOK_ABSTRACT from textdemo where contains(BOOK_ABSTRACT,'gushi')>0;
ID BOOK_ABSTRACT
---------- --------------------------------------------------
10 zhen shi de gushi
20 meili de gushi
對于update操作,應該是包含了Delete和Insert的操作,需要手工同步后才能更新索引。
對多字段建立全文索引
很多時候需要從多個文本字段中查詢滿足條件的記錄,這時就需要建立針對多個字段的全文索引,例如需要從pmhsubjects(專題表)的 subjectname(專題名稱)和briefintro(簡介)上進行全文檢索,則需要按以下步驟進行操作:
建立多字段索引的preference,以ctxsys登錄,并執行:
BEGIN
ctx_ddl.create_preference('ctx_demo_abstract_title','MULTI_COLUMN_DATASTORE');
END;
建立preference對應的字段值(以ctxsys登錄) 對應title path book_abstract三個字段建立索引:

BEGIN
ctx_ddl.set_attribute('ctx_demo_abstract_title ','columns','title,path');
END;
建立全文索引:
CREATE INDEX demo_abstract_title ON textdemo(book_abstract) indextype IS ctxsys.context parameters(' DATASTORE ctxsys. ctx_demo_ abstract_title lexer ORATEXT_LEXER');
commit;
測試
SELECT score(20),t.* FROM textdemo t WHERE contains(book_abstract,'移動城堡 or 俄羅斯',20)>0;
對大字段進行檢索測試
CREATE TABLE mytable(id NUMBER PRIMARY KEY, docs CLOB);
INSERT INTO mytable VALUES(111555,'this text will be indexed');
INSERT INTO mytable VALUES(111556,'this is a direct_datastore example');
Commit;

CREATE INDEX myindex ON mytable(docs)
indextype IS ctxsys.context
parameters ('datastore ctxsys.default_datastore');

SELECT * FROM mytable WHERE contains(docs, 'text') > 0;

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
1. 創建數據存儲定義(Datastore),使用多列數據存儲在多列上創建全文索引
BEGIN
CTX_DDL.CREATE_PREFERENCE('INFOGRID_COM_DATASTORE','MULTI_COLUMN_DATASTORE');
CTX_DDL.SET_ATTRIBUTE('INFOGRID_COM_DATASTORE','columns','NAME,ADDRESS,BUSINESS_ZONE,FAREN,FUND,INTRODUCTION');
END;

2.創建詞法分析器(Lexer)
BEGIN
CTX_DDL.CREATE_PREFERENCE('INFOGRID_LEXER', 'CHINESE_LEXER');
END;

3.創建全文索引(索引在DML提交后自動同步更新)
CREATE INDEX INFOGRID_COM_FULL_IDX ON g2b_com(NAME)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS (
'LEXER INFOGRID_LEXER
DATASTORE INFOGRID_COM_DATASTORE
SYNC (ON COMMIT)' --使用實時同步(DML提交時同步全文索引)
)
--手工同步索引(如果使用自動同步,這步可省略)
begin
ctx_ddl.sync_index('INFOGRID_COM_FULL_IDX');
end;

4.使用全文索引查詢(按照出現頻率排序)
select score(0),t.* from g2b_com t where contains(NAME,'條件一,條件二',0)>0 order by score(0) desc

5.刪除全文索引(刪除詞法分析器,刪除數據存儲定義,刪除索引)
begin
ctx_ddl.drop_preference('INFOGRID_COM_DATASTORE');--刪除數據儲存定義DataStore
ctx_ddl.drop_preference('INFOGRID_LEXER');--刪除詞法分析器
end;
drop index INFOGRID_COM_FULL_IDX;--刪除索引


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

ORA-06553: PLS-907: cannot load library unit XDB.XDB_FUNCIMPL during export

文檔 ID: 785728.1 類型: PROBLEM Modified Date: 25-FEB-2009 狀態: REVIEWED
In this Document
Symptoms
Cause
Solution
References
--------------------------------------------------------------------------------


Applies to:Oracle Server Enterprise Edition - Version: 10.1.0.2 to 10.2.0.4
This problem can occur on any platform.
SymptomsExport is failing with below errors:

EXP-00056: ORACLE error 29900 encountered
ORA-29900: operator binding does not exist
ORA-06540: PL/SQL: compilation error
ORA-06553: PLS-907: cannot load library unit XDB.XDB_FUNCIMPL (referenced by XDB.UNDER_PATH)
EXP-00000: Export terminated unsuccessfullyCause
It seems you have some invalid objects in XDB schema or XDB installation is INVALID.
Solution-- check DBA Registry for status of installed components

set pages 1000
column comp_id format A10
column version like comp_id
column comp_name format A35
col status for a15
select comp_id, status, version, comp_name from dba_registry order by 1;

-- check for invalid XDB objects

col owner for a15
col object_name for a30
col object_type for a30

select owner,object_name,object_type from dba_objects
where status != 'VALID'
and wner = 'XDB'
/
You can try to recompile all invalid objects using:

SQL> connect / as sysdba
SQL> @?/rdbms/admin/utlrp.sql

Then check the invalid XDB objects again. If there are no invalid XDB objects then try the export again.
If you still have invalid XDB objects which cannot be compiled then you may have to re-install XDB as described in the note specified below:

Note 243554.1 - How to Deinstall and Reinstall XML Database (XDB)
ReferencesNote 243554.1 - How to Deinstall and Reinstall XML Database (XDB)

轉載于:https://www.cnblogs.com/buffercache/p/10684894.html

總結

以上是生活随笔為你收集整理的Oracle建立全文索引详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久兔费看a级 | 人人爽人人爽 | 91精品系列 | 国产日韩精品在线观看 | 在线99视频 | 精品国产一区二区三区久久久蜜臀 | 国产福利免费看 | 日日夜夜精品视频天天综合网 | 人成在线免费视频 | 日本护士三级少妇三级999 | 久草视频在线资源站 | 爱爱av网 | 久久综合99 | av中文字幕网站 | 在线看的av网站 | 久久97久久| 波多野结衣亚洲一区二区 | 成人理论在线观看 | 好看的国产精品视频 | av成人在线观看 | 色噜噜噜噜 | 玖玖爱在线观看 | 日韩精品无码一区二区三区 | 很黄很色很污的网站 | 国产在线观看中文字幕 | 91麻豆文化传媒在线观看 | 粉嫩一区二区三区粉嫩91 | 免费久久久 | 国产美腿白丝袜足在线av | 国产区精品 | 中文字幕亚洲欧美日韩2019 | 日韩欧美高清不卡 | 成人久久亚洲 | 精品一区二区三区在线播放 | 国产中文字幕免费 | 亚洲国产欧美一区二区三区丁香婷 | 激情六月婷婷久久 | 特级黄色视频毛片 | 亚洲国产中文在线观看 | 国产最新在线视频 | 91亚洲精品乱码久久久久久蜜桃 | 亚洲精品国偷拍自产在线观看蜜桃 | 九九久久免费视频 | 91刺激视频 | 97手机电影网 | 日韩av一区二区在线影视 | 91精品国自产在线偷拍蜜桃 | 成年人电影毛片 | 精品一区二区视频 | 欧美成人影音 | 在线国产黄色 | 久久在线观看视频 | 天天综合精品 | 97理论电影| 五月婷婷婷婷婷 | 乱男乱女www7788 | 在线播放日韩av | 2023国产精品自产拍在线观看 | 人人超碰97 | 欧美日韩91| 欧美精品在线观看免费 | 国产精选视频 | 久久乐九色婷婷综合色狠狠182 | 激情综合色图 | 久久精品国产一区二区三区 | 深夜福利视频在线观看 | 一区二区三区电影大全 | 午夜精品区 | 国产九九精品视频 | 中文字幕电影网 | 国产精品一区二区在线播放 | av电影久久| 91精彩在线视频 | 久久国产精品一国产精品 | 探花视频免费观看 | 中文字幕在线观看日本 | 国产网站色 | 91看片在线观看 | av片在线观看免费 | 探花视频免费观看高清视频 | 午夜视频久久久 | av电影一区 | 欧美日韩一区久久 | 国产美女网 | 久久午夜免费视频 | 日韩精品一区二区在线 | 一级特黄av | 国产小视频在线免费观看视频 | 中文字幕久久久精品 | 四虎在线免费观看视频 | 视频在线观看91 | 国内丰满少妇猛烈精品播放 | 一区二区av| 91视频在线自拍 | 欧美激情第一页xxx 午夜性福利 | 干狠狠 | 精品五月天 | 欧美一性一交一乱 | 欧美极度另类性三渗透 | 中文字幕在线不卡国产视频 | 天天曰天天 | 亚洲精品在线免费 | 日韩资源在线观看 | 亚洲人人射 | 国产粉嫩在线 | 天天躁日日躁狠狠躁av麻豆 | 乱男乱女www7788 | 国产剧情一区二区在线观看 | 欧美日韩国产精品一区 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 国产精品欧美一区二区 | 日日摸日日添日日躁av | 久久久久久久免费观看 | 久久免费黄色大片 | 国产精品美女久久久久久 | 天天射网站 | 婷婷在线网站 | 精品伊人久久久 | 特黄免费av| 国产欧美久久久精品影院 | 黄色电影小说 | 天天操天天干天天玩 | 91精品久久久久久久99蜜桃 | 中文字幕精品一区二区三区电影 | 婷婷在线不卡 | 免费在线91 | 久久国内免费视频 | 在线免费观看黄网站 | 一区二区三区三区在线 | 久久这里只有精品9 | 精品9999| 精品一区二区在线免费观看 | 久久精品视频一 | 国产精品1区2区3区在线观看 | 久久久 精品 | 超碰97人人在线 | 在线视频久 | 欧美性色xo影院 | 欧美亚洲三级 | 免费看的黄色小视频 | 91插插插免费视频 | 99看视频在线观看 | 国产麻豆精品在线观看 | 国产黄免费 | 成人av动漫在线 | 黄色大片免费播放 | 久草久草视频 | 亚洲视频电影在线 | 亚洲欧美999| 毛片视频电影 | 国产视频精品在线 | 日韩最新av在线 | 亚洲一区黄色 | 午夜精品av在线 | 久久综合电影 | 国产精品一区二区三区免费看 | 欧美精品二 | 色成人亚洲网 | 欧美日韩视频免费看 | 日韩精品免费一区二区 | 欧美一区二区三区特黄 | 一区二区三区在线影院 | 美女视频黄是免费的 | 狠狠色狠狠色综合系列 | 亚洲aⅴ乱码精品成人区 | 91人网站| 亚洲最大成人网4388xx | 久久九九影视 | 91色网址 | 中文字幕久久精品亚洲乱码 | 免费精品在线 | 亚洲国产一区在线观看 | 成人在线观看日韩 | 中文字幕人成乱码在线观看 | 精品视频久久久久久 | 狠狠操在线 | 香蕉视频色| 日韩视频一区二区 | 亚洲欧洲精品久久 | 亚洲国产黄色片 | 不卡的av中文字幕 | 欧洲精品二区 | 伊人影院av | 久久69精品| 国产免费av一区二区三区 | 日日天天av | 久久久综合| 伊人在线视频 | 亚洲天天综合 | 色婷婷综合久久久中文字幕 | 99精品黄色片免费大全 | 狠狠操导航 | 色婷婷在线播放 | 国产精品久久久久久超碰 | 狠狠操狠狠干天天操 | 日韩毛片在线一区二区毛片 | 国产看片 色 | 亚洲va综合va国产va中文 | 中文字幕av全部资源www中文字幕在线观看 | av免费在线观看1 | 亚洲黄色免费观看 | 色婷婷国产精品 | 久久综合九色99 | av成人动漫 | 久久伦理电影网 | 亚洲精品永久免费视频 | 国产精品电影在线 | 成人a在线 | 久久精品视频国产 | 高清久久久久久 | 9999在线观看 | 日日干天天插 | 国产精品美女在线观看 | 97超碰人人澡人人 | 日韩欧美一区二区三区在线观看 | а中文在线天堂 | 亚洲精品成人 | 91片黄在线观| 97久久精品午夜一区二区 | 91在线公开视频 | 99视频免费观看 | 午夜天使 | 色综合久 | 天堂av影院 | 亚洲欧美成人在线 | 免费看av片网站 | 狠狠伊人 | 亚洲精品乱码久久久久 | 国产一区免费视频 | 国产高清亚洲 | 婷婷久久一区二区三区 | 欧美男女爱爱视频 | 精品国产aⅴ一区二区三区 在线直播av | 日日夜夜狠狠干 | 亚州av网站| 久久老司机精品视频 | 欧美久久影院 | 国产免费三级在线观看 | 国内精品久久久久久久影视麻豆 | 日韩| 97人人超碰在线 | 成人免费一级 | 国产最新视频在线观看 | 精品影院一区二区久久久 | 国产精品第十页 | 久热免费在线观看 | 亚洲精品久久久久久久蜜桃 | 黄色免费看片网站 | 香蕉视频免费看 | www亚洲国产 | 亚洲国内精品 | 蜜臀精品久久久久久蜜臀 | 精品人人人| 五月婷婷综合网 | 91精品一区在线观看 | 国产黄色av网站 | 久久夜视频 | 91桃色免费观看 | 在线观看国产一区 | 日本99久久 | 亚洲欧美日韩一二三区 | 操操操天天操 | 五月开心六月婷婷 | 亚洲在线成人精品 | 在线免费黄色av | 在线 影视 一区 | 亚洲丝袜一区二区 | 亚洲一区二区精品视频 | 成x99人av在线www | 国产成人av在线影院 | 欧美日韩亚洲第一页 | 亚洲在线视频免费 | 久草视频免费在线观看 | 精品五月天 | 一区二区三区在线电影 | 国内偷拍精品视频 | 国产美女黄网站免费 | 日韩一二三区不卡 | 日韩一级黄色大片 | 日本久久精 | 国产精品永久在线 | 99热亚洲精品 | 国产专区一 | 日日碰狠狠添天天爽超碰97久久 | 色欧美88888久久久久久影院 | 黄色软件视频网站 | 久久久久久久福利 | 97视频久久久| 香蕉国产91 | 亚洲精品视频久久 | 日韩av在线一区二区 | 国产黄色精品在线 | 不卡国产在线 | 国产视频在线观看一区二区 | 欧美永久视频 | 99在线看 | 人人草在线视频 | 精品夜夜嗨av一区二区三区 | 在线免费黄色av | 一级片色播影院 | 欧美日韩xxxxx| 国产精品资源网 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 国产福利在线 | 在线观看视频精品 | avwww在线观看 | 黄色成人免费电影 | 欧洲亚洲女同hd | 中文字幕在线播放av | 午夜10000| 在线观看一级 | 欧美日韩免费在线观看视频 | 日日骑| 精品在线你懂的 | 成人国产网站 | 午夜日b视频 | 天天射色综合 | 成年在线观看 | 国产拍揄自揄精品视频麻豆 | 五月宗合网| 在线电影 一区 | 日韩欧美精品一区二区 | 99精品视频在线免费观看 | 国产在线第三页 | 天天躁日日 | 不卡的av在线播放 | 18国产精品福利片久久婷 | 国产在线播放一区二区三区 | 免费看国产曰批40分钟 | 国产精品原创在线 | 精品天堂av | 正在播放国产一区二区 | 综合激情久久 | 少妇bbb搡bbbb搡bbbb | 久久久免费看片 | 在线观看韩国av | 91在线在线观看 | 国产精品福利在线播放 | 国产在线精品观看 | 黄色网址a | 国产精品久久久久久久久久久久午夜片 | 欧美在线日韩在线 | 六月丁香社区 | 四虎永久免费在线观看 | 日日麻批40分钟视频免费观看 | 免费不卡中文字幕视频 | 人人舔人人干 | 免费黄色网址大全 | 婷婷激情五月 | 九九热免费在线视频 | 国产精品久久久久一区二区国产 | 成年美女黄网站色大片免费看 | 麻豆一区二区 | 亚洲成人国产精品 | 黄色三级免费观看 | 丁香在线 | 精品美女国产在线 | 91黄色成人| 久久久久网站 | 国产一卡在线 | 中文不卡视频在线 | 韩国av免费看 | 久日视频| 久久免费公开视频 | 久久久久成人精品亚洲国产 | 97国产小视频 | 丁香色综合 | 午夜性盈盈 | 97精品国产97久久久久久 | av资源免费观看 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 东方av在线免费观看 | 91亚洲国产成人久久精品网站 | 欧美日韩网站 | 亚洲热视频 | 亚洲国产最新 | 亚洲精品一区中文字幕乱码 | 亚洲资源视频 | 99久久久成人国产精品 | 一区二区三区在线看 | 久久免费a | 美女免费视频观看网站 | 97网| 欧美日韩免费观看一区二区三区 | 中文字幕a在线 | 日韩中文在线电影 | 欧美乱码精品一区二区 | 国产成人久久av977小说 | 美女视频黄在线 | 黄网站色成年免费观看 | 又紧又大又爽精品一区二区 | 国产精品久久久久久a | 激情婷婷在线观看 | 日韩va在线观看 | 久久黄色片子 | av在线播放快速免费阴 | 激情久久伊人 | 国产一级二级av | 日韩免费成人av | 九九色在线观看 | 久久久久99999 | 九色视频网址 | 久草视频一区 | 97精品国产91久久久久久久 | 美女视频免费精品 | 欧美日韩在线视频一区 | a午夜在线 | 国产成人精品久久 | 国产高清一级 | 91视频亚洲 | 久久综合色播五月 | 色视频网站免费观看 | caobi视频| 99热最新网址 | 中文字幕av电影下载 | 四虎永久免费网站 | 国产精品久久久久婷婷二区次 | 麻豆视频在线免费观看 | 免费观看日韩av | 国产黄色播放 | 夜夜骑天天操 | 久久人人爽人人爽人人 | 日韩av手机在线看 | 亚洲视频在线免费看 | 在线观看视频中文字幕 | 午夜精品av | 国产区高清在线 | 五月婷婷视频在线观看 | 亚洲一区二区精品在线 | 色婷婷在线播放 | 久操视频在线观看 | 久艹在线播放 | 干干日日 | 亚洲天天| 欧美日韩国产一二三区 | 日韩一区二区免费在线观看 | 精品自拍av| 日韩在线激情 | 最近日本韩国中文字幕 | 国产999精品久久久影片官网 | 欧美一区二区三区免费看 | 夜夜骑天天操 | 久久最新网址 | 福利视频网址 | 欧美日韩国产免费视频 | 96久久欧美麻豆网站 | 色综合久久久久综合 | 久久国产亚洲视频 | 色国产精品一区在线观看 | 奇米先锋 | 天天玩天天操天天射 | 久久综合九色综合久久久精品综合 | 一区二区亚洲精品 | 96精品视频 | 奇米影视四色8888 | www.五月天激情| 欧美日韩精品影院 | 黄色av免费 | 在线免费观看涩涩 | 少妇bbb搡bbbb搡bbbb′ | 99精品视频免费看 | 欧美日韩久久久 | 欧美一区二区三区免费观看 | 黄色一级片视频 | 欧美日韩亚洲在线观看 | www.夜夜| 在线成人免费电影 | 国产精品video爽爽爽爽 | 精品国产电影一区 | 在线观看一区 | 在线观看免费色 | 蜜臀av性久久久久蜜臀av | 婷婷丁香在线视频 | 在线黄色毛片 | 欧产日产国产69 | 免费色婷婷 | 久久精品视频观看 | 国产在线污 | 日本三级大片 | 国产福利91精品一区 | 超碰97人人在线 | 激情开心站 | 久久久久女人精品毛片 | 2023国产精品自产拍在线观看 | 96看片| 国产视频不卡 | 91精品久久久久久久久久久久久 | 国产精品99久久久久久宅男 | 久久国产精品二国产精品中国洋人 | 国产男女爽爽爽免费视频 | www黄色com | 精品久久片 | 色久综合| 粉嫩av一区二区三区四区 | 91福利影院在线观看 | 在线岛国av | www操操操 | 最新av网址在线 | 国产成人区| 丁香色婷 | 亚洲影院色 | 国产精品99久久久久 | 欧美成人黄色片 | 国产一线二线三线性视频 | 欧美另类性 | 亚洲欧美在线观看视频 | 国产精品久久久久久久久久妇女 | 日韩免费一区二区 | 成人网在线免费视频 | 欧美成亚洲 | 美女福利视频网 | 国产高清福利在线 | 久久久久久久久爱 | 中文字幕在线观看视频免费 | 在线视频a | 最新的av网站 | 一区二区三区电影 | 久久综合九色综合欧美就去吻 | 天天色影院 | 黄av免费在线观看 | 免费在线激情电影 | 久久,天天综合 | 国产精品国产自产拍高清av | 亚av在线| 色噜噜在线观看 | 中文字幕一区二区三区在线播放 | 亚洲精品免费在线观看 | 日本特黄一级片 | 99久久精品免费视频 | 97超碰精品| 超碰97久久 | 九九在线视频 | 丁香花在线观看免费完整版视频 | 中文字幕一区在线观看视频 | 天天玩天天干 | 久久久久国产精品午夜一区 | 色综合久久88 | 国产一区二区在线播放视频 | 日韩 国产 | 伊人伊成久久人综合网站 | 成人一区二区在线观看 | 久久av网 | 97国产在线视频 | 日韩午夜大片 | 91天天视频 | 欧美精品少妇xxxxx喷水 | 亚洲精品在线一区二区 | av电影中文| 中文字幕乱码日本亚洲一区二区 | 米奇狠狠狠888| 五月婷婷婷婷婷 | 最近高清中文在线字幕在线观看 | 最近日本韩国中文字幕 | 午夜在线观看一区 | 日韩午夜一级片 | 午夜精品视频一区 | 天天干中文字幕 | 黄色毛片一级片 | 午夜精品一区二区三区在线 | 免费观看不卡av | 五月婷婷在线观看视频 | 久草在线免费在线观看 | www99久久| 国产精品精品久久久久久 | 天天爱天天射天天干天天 | 天天干天天射天天插 | 99精品视频在线观看播放 | 超碰免费在线公开 | 欧美韩日精品 | 久久精品中文视频 | 91亚洲精品国偷拍自产在线观看 | 在线 精品 国产 | 久青草电影 | 97人人澡人人爽人人模亚洲 | 97超碰在线资源 | 国产精品久久久久久久久久不蜜月 | 国产精品嫩草影院9 | 美女免费视频网站 | 欧美一区二区三区在线观看 | 99性视频 | 久产久精国产品 | 欧美 激情 国产 91 在线 | 91黄视频在线观看 | 99国产在线| 成人免费网站视频 | 国产精品成人免费一区久久羞羞 | 中文有码在线视频 | 日本女人b | 草樱av | 99免费精品视频 | 97超碰国产精品女人人人爽 | 成人免费观看视频网站 | 91视视频在线直接观看在线看网页在线看 | 8090yy亚洲精品久久 | 91网在线| 黄色三级免费片 | 国产一级在线观看视频 | av.com在线| 美女视频久久黄 | 亚洲综合色网站 | 99视频精品视频高清免费 | 字幕网资源站中文字幕 | 欧美黄色免费 | 国产成人a v电影 | 免费在线观看成人小视频 | 国产一区二区在线免费播放 | 91完整版观看 | 国产亚洲视频在线观看 | 三级av在线| www黄| 亚洲高清91 | 五月婷婷激情网 | 国产精品麻豆果冻传媒在线播放 | 丁香花在线观看免费完整版视频 | 一区二区三区在线免费观看视频 | 色婷婷视频网 | 国产精品青草综合久久久久99 | 中文乱幕日产无线码1区 | 色综合网在线 | 色成人亚洲 | 成年人精品 | 久久好看免费视频 | 久久高清免费视频 | 日本在线成人 | 国产精品久久久久av福利动漫 | www免费视频com| 草久草久 | 色久网| 91网免费看 | 最新国产中文字幕 | 国产麻豆精品免费视频 | 婷婷亚洲激情 | 五月天婷婷免费视频 | 狠狠色狠狠色终合网 | 五月婷婷久草 | 日日干夜夜草 | 香蕉久久国产 | 91精品国产99久久久久久红楼 | 日韩三级视频 | 日韩一区二区三区免费视频 | 天天操天天摸天天射 | 精品亚洲国产视频 | 国产小视频在线看 | 亚洲成人资源 | 丰满少妇麻豆av | 五月天色综合 | 国产精品日韩久久久久 | 91av播放| 欧美电影黄色 | 在线观看成人网 | 二区视频在线 | 久久久麻豆 | 激情黄色av | 中文字幕 91 | 99这里精品 | 午夜久久 | 香蕉视频最新网址 | 日韩av一区二区在线影视 | 看v片| 色av男人的天堂免费在线 | 9免费视频 | 最近乱久中文字幕 | 成人一级影视 | 亚洲欧美日韩在线一区二区 | 亚洲一区二区三区在线看 | 国产精品99久久久 | 婷婷丁香六月 | 91最新视频在线观看 | 免费观看成人网 | 少妇av片| 在线观看网站你懂的 | 伊人久久国产 | 狠狠的操狠狠的干 | 天天鲁一鲁摸一摸爽一爽 | av中文字幕亚洲 | 免费看久久久 | 亚州精品国产 | 欧美精品久久久久a | 国产精品成人在线观看 | 综合色婷婷 | 国产亚洲综合性久久久影院 | www.色婷婷.com | 人人澡澡人人 | 五月婷婷视频在线 | 中文字幕免费高清在线 | 亚洲欧美经典 | 热re99久久精品国产66热 | 久久avav| 日韩中文字幕在线不卡 | 五月天久久久久 | 中文字幕电影高清在线观看 | 丰满少妇久久久 | 国产成人61精品免费看片 | www.91国产 | 久久99视频| 免费看黄色毛片 | 日韩在线高清视频 | 天天人人 | 在线免费黄 | 色婷婷视频在线观看 | 狠狠干夜夜爽 | 精品成人久久 | 色婷婷一区 | 欧美aaa一级 | 国产成人精品一区二区 | 欧美日韩亚洲在线 | 99久久精品国产一区 | 久色 网 | 日日天天狠狠 | 国产亚洲精品电影 | 亚洲免费a | 三级黄色网络 | 欧美日韩激情网 | 国产一区二区影院 | 狠狠操.com | 成年人免费看av | 热久在线 | 在线观看91av | 日韩av三区 | 91视频-88av | 激情丁香月 | 成人91在线 | 国产午夜视频在线观看 | 亚洲国产影院 | 中文字幕制服丝袜av久久 | 亚洲欧美观看 | 成年人在线免费看片 | 免费在线观看av | 香蕉视频18 | 黄色资源在线观看 | 久草视频视频在线播放 | 在线观看mv的中文字幕网站 | 波多野结衣一区二区三区中文字幕 | 97超碰在线久草超碰在线观看 | 成人毛片网 | 国产精品久久久久久久毛片 | 超碰97人人射妻 | 亚洲成av人影片在线观看 | 欧美日韩亚洲一 | 国产一区二区三区黄 | 久久成人国产精品入口 | 一级免费黄色 | 黄色一级片视频 | 91精品国| 成人资源网 | 国产69精品久久99的直播节目 | 国产系列 在线观看 | 久久久久久美女 | 天天天色综合a | 国产69熟| 久久精品艹 | 最新国产精品拍自在线播放 | 日p视频在线观看 | 国产精品国产毛片 | 国产裸体永久免费视频网站 | 99国产精品一区二区 | 国产日韩欧美在线一区 | 久久久亚洲麻豆日韩精品一区三区 | 精品婷婷 | 午夜精品久久久久久99热明星 | 国产 日韩 在线 亚洲 字幕 中文 | 91视频在线 | 欧美在线一 | 国产91粉嫩白浆在线观看 | 精品久久久久亚洲 | 国产一区二区三区免费视频 | 天天天色| 免费福利视频网站 | 久久综合色影院 | 中文字幕免费观看全部电影 | 五月天色丁香 | 免费看片日韩 | 国产美腿白丝袜足在线av | 中文字幕观看av | 日韩在线看片 | 日韩在线免费观看视频 | 国产精品wwwwww| 欧美激情精品久久久久久免费印度 | 精品国内自产拍在线观看视频 | 国产又粗又猛又黄 | 午夜色性片 | 精品一二三四五区 | 婷婷在线精品视频 | 四季av综合网站 | 日本三级久久 | 蜜臀av性久久久久蜜臀av | 国产精品一区二区视频 | 日韩精品首页 | 在线观看成人毛片 | 色婷婷色| 九色porny真实丨国产18 | 黄色毛片视频免费观看中文 | 久久不见久久见免费影院 | 亚洲视频观看 | 久久久久久草 | 中文字幕观看视频 | 国产精品99爱 | 欧美色插 | 在线看国产日韩 | 国产精品成人国产乱一区 | 97人人澡人人爽人人模亚洲 | 在线免费视频你懂的 | 日韩av在线高清 | 国产一二区视频 | 96久久| 精品久久久久免费极品大片 | 亚洲a在线观看 | 亚洲欧洲一区二区在线观看 | 日韩爱爱片 | a级成人毛片| 中文国产字幕在线观看 | www.看片网站| 午夜手机看片 | 日韩精品电影在线播放 | 碰天天操天天 | 国产一级视频在线 | 超碰人人做 | 国产精品一区二区三区在线看 | 日韩av中文| 成年人免费电影在线观看 | 日韩免费三区 | 婷婷精品国产一区二区三区日韩 | 97视频久久久 | 欧美在线观看小视频 | 久久久免费看片 | 中文字幕视频网 | 日韩欧美有码在线 | 国产精品99久久久久久有的能看 | 欧美 日韩精品 | 999久久久久久久久6666 | 欧美天天干 | 狠狠干夜夜操天天爽 | 日韩av看片| 日韩精品在线观看av | 欧美久久电影 | 天天操天天操天天操天天 | 成人影视免费 | 久久97超碰| 国产色资源 | 免费视频二区 | 狠狠狠狠干 | 亚洲精品午夜aaa久久久 | 一区二区中文字幕在线观看 | 天天草天天操 | 亚洲va在线va天堂va偷拍 | av在线之家电影网站 | 国产精品中文字幕在线观看 | 免费a v在线 | 国产成人精品女人久久久 | 精品视频一区在线 | 久久亚洲二区 | 91精品国产91久久久久久三级 | 狠狠色丁香婷婷综合最新地址 | 中文在线字幕免费观 | 国产一级淫片在线观看 | 国产精品黄网站在线观看 | 久久久久 免费视频 | 毛片基地黄久久久久久天堂 | 国产无套一区二区三区久久 | 丁香伊人网 | 97天堂| 久草香蕉在线视频 | 国产福利午夜 | 久久久久99精品国产片 | 999成人精品 | 国产精品高清免费在线观看 | 国产专区在线播放 | 青青河边草免费观看完整版高清 | 中文伊人| 蜜臀久久99精品久久久无需会员 | 青青河边草免费直播 | 久在线观看 | 在线观看视频中文字幕 | 鲁一鲁影院 | 精品国产成人在线影院 | 麻豆免费在线播放 | 日本99干网 | 九九在线播放 | 四季av综合网站 | 午夜精品一区二区三区视频免费看 | 免费在线观看国产黄 | www色| 亚洲一级电影视频 | 日日夜夜爱| 亚洲精品在线二区 | 国产精品精 | 国产精品第7页 | avv天堂| 亚洲成av人片在线观看无 | 一区二区欧美日韩 | 亚洲精品乱码久久久久久按摩 | 欧美一级片免费播放 | 狠狠色丁婷婷日日 | 国产日韩中文在线 | 一本一本久久a久久精品综合小说 | 国产精品视频你懂的 | 青青草国产精品视频 | 国产精品毛片一区二区三区 | 九九精品视频在线观看 | 国产女人40精品一区毛片视频 | 国产又粗又猛又黄又爽的视频 | av在线免费观看网站 | 天天爽夜夜操 | 亚洲欧美日韩国产 | 日韩免费av在线 | 国内精品美女在线观看 | 激情综合电影网 | 日日精品| 精品视频国产 | 91在线看网站 | 狠狠久久 | 中文字幕资源网 国产 | 亚洲影视九九影院在线观看 | 成人黄色国产 | 日韩小视频 | 国产一区二区三区视频在线 | 超碰在线人人97 | 久草在在线视频 | 日本精品视频网站 | 亚洲精品黄色 | 91热爆在线观看 | 久久成人国产精品免费软件 | 伊在线视频 | 高清精品视频 | 国产黑丝一区二区 | 久久精品久久国产 | 国产精品久久久久久久午夜 | 日韩电影一区二区在线观看 | 超碰人在线 | 91麻豆看国产在线紧急地址 | 亚洲国产成人久久综合 | 欧美日韩中文字幕在线视频 | 国产成人亚洲在线观看 | 一区二区激情 | 中文字幕在线观看完整版电影 | 三级a毛片| 国产黄a三级 | 精品免费一区二区三区 | 欧美黄色免费 | 日韩中文在线字幕 | 久久成人免费 | 日韩专区中文字幕 | 成人中心免费视频 | 欧美精品999 | 欧美精品乱码久久久久久 | a天堂免费| 婷婷激情小说网 | 狠狠干网址 | av先锋影音少妇 | 黄色在线观看免费网站 | 97在线观 | 夜夜高潮夜夜爽国产伦精品 | 久久视频这里有久久精品视频11 | 久久久网页 | 久久久精品小视频 | 日本中文字幕视频 | 欧美成人影音 | 国产精品免费久久久久久 | 久久免费的精品国产v∧ | 国产视频在线看 | 成人国产精品电影 | 激情综合电影网 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 欧美日本中文字幕 | 日日夜夜爱 | 久久久国产精品网站 | 美女激情影院 | 一区在线免费观看 | 在线观看亚洲专区 | 女人18精品一区二区三区 | 97狠狠操 | 国产乱老熟视频网88av | 狠狠色伊人亚洲综合成人 | 亚洲最大激情中文字幕 | 亚洲精品国产综合久久 | 久久久免费看片 | 国产成人av电影在线 | 伊人狠狠色丁香婷婷综合 | 菠萝菠萝在线精品视频 | 在线看福利av | 又爽又黄在线观看 | 伊人小视频 | 国产精品免费视频久久久 | 一级黄色大片在线观看 | 一本一本久久aa综合精品 | 午夜久久精品 | 亚洲精品乱码久久久久久蜜桃不爽 | 久久国产美女视频 | 一区二区高清在线 | 18做爰免费视频网站 | 日韩美女久久 | 国产精品亚洲成人 | 麻豆精品视频在线观看免费 | 欧美aaaxxxx做受视频 | 国产精品国产三级国产专区53 | 97超碰免费 | www色网站| 久久精品美女 |