搜尋引數是用在 CONTAINS、NO_OF_MATCHES、RANK 及 HANDLE_LIST 中。 本節使用 CONTAINS 函數來顯示搜尋引數在 DB2 Text Extender 函數中的各種不同範例。
在搜尋引數中可有一個以上的術語。其中一種結合數個搜尋術語的方法是用逗號將它們連接在一起,如:
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, '("compress", "compiler", "pack", "zip", "compact")') = 1
此形式的搜尋引數會找到含有任一搜尋術語的文字。在邏輯術語中, 搜尋術語是用 OR 運算子相連接。
(請參閱用布林運算子 NOT 來搜尋。)
使用布林運算子 "&" (AND) 與 "!" (OR), 可以將多個搜尋術語結合起來。 例如:
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, '"compress" | "compiler"') = 1
使用布林運算子,可將數個術語結合在一起:
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, '"compress" | "compiler" & "DB2"') = 1
如果您使用一個以上的布林運算子,DB2 Text Extender 的評估原則是由左至右, 但邏輯 AND 運算子 (&) 優先於邏輯 OR 運算子 (!)。例如,如果未含括弧,
"DB2" & "compiler" | "support" & "compress"
評定為:
("DB2" & "compiler") | ("support" & "compress")
所以在下例中,您必須放入括弧:
"DB2" & ("compiler" | "support") & "compress"
如果您用逗號分隔字元將布林運算子與搜尋術語串連在一起, 如:
("compress", "compiler") & "DB2"
則會將逗號解譯成布林 OR 運算子,如:
("compress" | "compiler") & "DB2"
如果使用的是精確索引, 則 DB2 Text Extender 會搜尋與您所鍵入之術語完全相同的術語。 例如, 術語 media 只會找到含有 media 的文字。而找不到含有單數形 medium 的文字。
如果使用的是語言索引,則 DB2 Text Extender 會搜尋術語的變形 (如名詞的複數)或不同時態的動詞。
例如,drive 這個術語會尋找含有 "drive"、"drives"、 "driving"、"drove" 及 "driven" 的文字。
遮罩字元(或稱為「萬用字元」)提供方法讓搜尋更具彈性。它們代表搜尋術語前面、 中間或結尾的選用字元。且可增加搜尋所找到的文字文件數。
要訣 |
---|
如果使用遮罩字元,就不能使用 SYNONYM FORM OF 關鍵字。 |
如果有的是精確索引,則遮罩字元對尋找術語的變體特別有用。如果有的是語言索引, 則仍會找到使用遮罩字元所找到的大部份變體。
請注意,不能將字詞片斷(用萬用字元遮罩的字詞)還原成基本形式。 所以,如果搜尋 passe%, 則會找不到 passes 或 passed 字詞, 因為在索引中它們已還原成基本形式 pass。若要找到它們,您必須搜尋 pass%。
DB2 Text Extender 使用兩個遮罩字元:百分比 (%) 和底線 (_):
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, '"%name"') = 1
此搜尋術語會尋找含有 "username"、"file_name" 及 "table-name" 的文字文件。
% 也可代表整個字詞: 下例中會找到含有如 graphic function 及 query function 之類的詞組的文字文件。
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, '"% function"') = 1
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, '"_LOB"') = 1
如果想要搜尋含有 % 字元或 _ 字元的術語, 您必須在字元前面加上跳出字元, 然後再使用 ESCAPE 關鍵字來識別跳出字元。
例如,若要搜尋 10% interest,請執行下列步驟:
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, '"10!% interest" ESCAPE "!"') = 1
此範例中的跳出字元是 "!"。
如果如下例所示搜尋 hard disk,則無論所使用的索引類型為何, 只有在它們是鄰近且順序相同時,才會找到這兩個術語。
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, '"hard disk"') = 1
若要搜尋任意順序的術語(如 data disks and hard drives), 請使用逗號來隔開術語:
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, '("hard", "disk")') = 1
此處是搜尋引數的範例,可找到搜尋術語出現在相同句子中的文字文件:
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, '"compress" IN SAME SENTENCE AS "decompress"') = 1
您也可搜尋同時出現的二個以上的字詞。在下個範例中, 會搜尋出現在相同段落中的數個字詞:
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, '"compress" IN SAME PARAGRAPH AS "decompress" AND "encryption"') = 1
這是個搜尋引數的範例,它可找到結構文件中 play 區段裡的 author 次區段裡文字內搜尋術語 Williams。 文件結構由文件模型檔中的模型 play 所指定。 相關資訊,請參閱使用結構化文件 (區段支援)。
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, 'MODEL play SECTIONS (play/author) "williams"') = 1
透過語言索引,您可以執行更有彈性的搜尋,除了搜尋您所指定的術語之外, 更可以搜尋意義類似的文字。 例如,搜尋字詞 book 時, 同時搜尋其同義字可能是有用的。若要做這樣的處理,請指定:
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, 'sYNONYM FORM OF "book"') = 1
使用 SYNONYM FORM OF 時,會假設是用邏輯 OR 運算子來連接術語的同義字, 亦即,會將搜尋引數解譯為:
"book" | "article" | "volume" | "manual"
同義字是位在 DB2 Text Extender 所提供的字典中。 同義字的預設字典一律是 US_ENGLISH,而不是文字架構設定中所指定的語言。
指定不同的語言,可變更特殊查詢的字典。此處為範例:
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, 'sYNONYM FORM OF UK_ENGLISH "programme"') = 1
要訣 |
---|
如果搜尋術語中有遮罩字元,或將 NOT 與搜尋引數搭配使用, 則不能使用 SYNONYM 關鍵字。 |
DB2 Text Extender 可對依據所指定之搜尋術語來搜尋, 以提供功能強大的語言處理。 語言函數適用於語言索引。 語言函數會在語言和精確索引的語言處理中予以說明。
此範例搜尋的是複數形式(如 utilities), 以及尋找 utility。搜尋開始前,會先用英文字典將它還原為基本形式 utility。
然而,英文字典中並不含有將其它語言之術語變體還原為基本形式的資訊。若要搜尋不同語言的複數形式, 您必須使用那個語言的字典。
例如,如果您指定 GERMAN,則可搜尋 geflogen (flown), 且找到其基本形式 fliegen (fly) 的所有變體: 不只是 geflogen,還包括 fliege、fliegt,以此類推。
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, 'sTEMMED FORM OF GERMAN "geflogen"') = 1
要訣 |
---|
在非美式英語的文件中搜尋時,不管預設語言為何, 都請在搜尋引數中指定語言。 |
如果一律指定的是搜尋術語的基本形式,而不是它的變體, 則不需要指定語言。
若要瞭解原因,請考慮為您資料庫中的文字編製索引時會發生什麼事。 如果您使用語言索引,則術語儲存於索引之前, 所有的術語變體都會回歸到基本形式。 這表示在 DB2TX.SAMPLE 表格中,雖然術語 decompress 是出現在 COMMENT 直欄的第一個登錄中,而 decompression 是出現在第二個登錄,但此索引只能含有基本形式 "decompress",且將此術語 (或其變體) 識別為這兩個登錄中的項目。
稍後,若您搜尋基本形式 "decompress",您將會找到所有的變體。 然而,如果搜尋 decompression 之類的變體, 則無法直接找到它。您必須為此搜尋指定適當的字典, 這樣才會先將變體轉換成其基本形式。
您可使用布林運算子 NOT,將特殊文字文件從搜尋中排除。例如:
("compress", "compiler") & NOT "DB2"
在搜尋 compress 或 compiler 時,會排除含有術語 DB2 的任何文字文件。
與搜尋相同句子或段落中的術語所述之 IN SAME SENTENCE AS 或 IN SAME PARAGRAPH AS 結合時, 您不能使用 NOT 運算子,也不能將它與搜尋術語的同義字中所述的 SYNONYM FORM OF 搭配使用。
您只能將 NOT 運算子與純搜尋搭配使用,亦即, 不能任意地結合 &、| 及 NOT 運算子(請參閱搜尋引數語法)。
不容許使用 NOT 的範例:
NOT("compress" & "compiler")
容許的範例為:
NOT("compress" , "compiler")
「智慧型」搜尋會搜尋與搜尋術語拼法類似的字詞。 Ngram 索引有此功能。
例如:
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, 'FUZZY FORM OF 2 "compress"') = 1
此搜尋可找到一個拼錯的字詞 conpress。
範例 2 中的符合層次會指定正確性層級。 支援的五個層次, 其中層次 1 的符合度最小,大約是百分之 20, 而層次 5 的符合度最高,大約是百分之 90。 文件中會有拼字錯誤時,請使用智慧型搜尋; 通常是在使用「光學字元辨識 (OCR)」裝置或注音輸入時最容易發生。
韓文中已開發「界限」搜尋。它會確定 DB2 Text Extender 會在搜尋期間注意到字詞界限。 例如:
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, 'BOUND "korean-expression"') = 1
「聲音」搜尋會找到發音與搜尋引數類似的字詞。 在文件中含有發音類似,但拼法不同的文件時, 這個功能十分有用。 例如,發音為 my-er 的德語名稱,有數種拼法:
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, 'sOUNDS LIKE "Meyer"') = 1
此搜尋可找到 Meyer、Mayer 及 Maier。
詞典搜尋是 DB2 Text Extender 另一個功能強大的搜尋術語展開函數。 搜尋的附加術語是從您自行建置的詞典中取得, 所以您可直接控制它們。 例如,搜尋 database,可能會找到 repository 及 DB2 之類的術語。
此類型的搜尋主要是針對您經常搜尋的特定感興趣區域; 是為了產生更有效率的搜尋結果,而值得花時間去研究以建置詞典的區域。
請參閱詞典概念,以取得相關資訊及如何建置詞典的說明。圖 16中的範例是從詞典中取出與資料庫有關的一小部份。 用在下例中,可舉例說明使用詞典展開的語法。
此範例會取出術語 object relational database management system 並展開它, 方法是新增在詞典 myterms 中所找到的此術語的所有案例。 此處,會將 DB2 新增到搜尋中。
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, 'THESAURUS "myterms" EXPAND "INST" TERM OF "object relational database management system"') = 1
此範例會取出術語 document management system 並展開它, 方法是新增它的所有同義字。它有一個同義字 library。
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, 'THESAURUS "myterms" EXPAND "SYN" TERM OF "document management system"') = 1
「純文字搜尋」是會將搜尋術語以純文字形式表示的搜尋方式。詞組或句子用自然語言說明要搜尋的主旨。在純文字查詢中,字詞順序並沒有關係。因此, 支援字彙關係。 在擷取中,這些是純文字查詢術語及文件集中所發生的特定字詞配對, 其含有特定的最小頻率及特定最小距離。 英文文件的距離是五個字詞。
請注意,純文字引數中的搜尋字串不支援字元或字詞遮罩。
例如:
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, 'IS ABOUT "everything related to AIX installation"') = 1
雜混搜尋是布林搜尋及純文字搜尋的結合。 例如:
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, '"DB2" & IS ABOUT "everything related to AIX installation"') = 1