Full Scanを速くしちゃう~Oracle Text編~その3
<Full Scanを速くしちゃう~Oracle Text編~その3>
ペンネーム: グリーンぺぺ
全文検索エンジンであるOracle Textは応用的な検索も可能である。
今回は曖昧検索とシソーラス検索を紹介する。
■環境
Oracle 11.2.0.2 64bit on RHEL5.4
■その1:曖昧検索とは?
fuzzy演算子を使用すると、問合せ入力がかな(カナ)である場合に
曖昧検索ができる。たとえば「バイオリン」と「ヴァイオリン」や
「四谷」と「四ッ谷」を検索する場合に類似検索が可能となる。
早速試してみよう。
--lyric列に格納されている語句どおりで検索 SQL> select TITLE,ARTIST from ranking where contains(lyric,'デジャヴをリプレイ')>0; TITLE ARTIST -------------------- -------------------- おやすみパラドックス やくしまるえつこ ※普通に検索ができます。 --lyric列に格納されている語句の類似語句で検索 SQL> select TITLE,ARTIST from ranking where contains(lyric,'デヂャブをリプレイ')>0; レコードが選択されませんでした。 --fuzzy演算子を使用して類似検索 SQL> select TITLE,ARTIST from ranking where contains(lyric,'fuzzy(デヂャブをリプレイ,,,n)')>0; TITLE ARTIST -------------------- -------------------- おやすみパラドックス やくしまるえつこ
文法など使い方は↓を参照頂きたい。
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/text.102/B19214-01/cqoper.htm#i997330
■その2:シソーラス検索とは?
synonym演算子を使用するとシソーラス(類語)検索が可能となる。
シソーラス辞書をユーザで作成し、指定すると検索可能となる。
–任意に作成したシソーラス辞書”my_thes.txt”を登録
$ cat my_thes.txt 本当 SYN 実際 SYN ホント $ ctxload -user scott/tiger -thes -name my_thes -file my_thes.txt Connecting... Creating thesaurus my_thes... Thesaurus my_thes created... Processing... 3 lines processed successfully Beginning insert...3 lines inserted successfully Disconnected
--シソーラス辞書を利用して検索 SQL> select TITLE,ARTIST from ranking where contains(lyric,'syn(実際,my_thes)')>0; TITLE ARTIST ------------------------- -------------------- VOICE Perfume Re:birth Acid Black Cherry 本当は怖い愛とロマンス 桑田佳祐
シソーラス検索はユーザ登録した任意の類語にまで検索範囲を広げて検索が可能となる。
よって上記の検索をlike演算子を利用した検索にしてもヒットしない。
SQL> select TITLE,ARTIST from ranking where lyric like '%実際%'; レコードが選択されませんでした。
登録したシソーラス辞書はctxloadコマンドを利用してエクスポートできる
–シソーラス辞書のエクスポート
$ ctxload -user scott/tiger -thesdump -name my_thes -file my_thes.out Connecting... Writing thesaurus my_thes to file my_thes.out 10 lines processed successfully Disconnected $ cat my_thes.out ホント UF 本当 UF 実際 実際 UF 本当 UF ホント 本当 UF 実際 UF ホント
登録したシソーラス辞書の直積結果が格納されていることが確認できた。
シソーラス辞書を充実させていけば以下のような検索も可能になる。
□外国語の等価語句が含まれるように問合せを拡張する
–シソーラス定義の確認
cat my_thes.txt 本当 ENGLISH: truth SYN 実際 SYN ホント
–任意に作成したシソーラス辞書”my_thes.txt”を登録
$ ctxload -user scott/tiger -thes -name my_thes -file my_thes.txt
–“本当”と同意の”truth”が含まれるlyric列を検索
SQL> select TITLE,ARTIST,lyric from ranking where contains(lyric,’tr(本当,english,my_thes)’)>0;
TITLE ARTIST lyric
————————- ————————- ————————-
Do You Crash? Bonnie Pink …Tell me the truth,…
VOICE Perfume …本当のキミが…
本当は怖い愛とロマンス 桑田佳祐 …本当は怖い愛と…
–“本当”と同意の”truth”と類語の”実際”,”ホント”が含まれるlyric列を検索
SQL> select TITLE,ARTIST,lyric from ranking where contains(lyric,’trsyn(本当,english,my_thes)’)>0;
TITLE ARTIST lyric
————————- ————————- ————————-
Do You Crash? Bonnie Pink …Tell me the truth,…
モノノケダンス 電気グルーヴ …何も実際…
VOICE Perfume …本当のキミが…
Re:birth Acid Black Cherry …ホントはね…
本当は怖い愛とロマンス 桑田佳祐 …本当は怖い愛と…
[/sql]
■まとめ
Oracle Textを使うならシソーラス検索まで視野に入れた要件定義の
必要があるケースが多いのではないか。全文検索をするとなると言葉に
はゆらぎがあるので(例:”にんじん”と”人参”とか)検索アプリにて吸収
する必要がある。Oracle Textは全文検索エンジンとしてなんの問題
もなく利用できる。一度試して頂きたい。