Full Scanを速くしちゃう~Oracle Text編~その3

投稿日: 2010年11月24日

<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は全文検索エンジンとしてなんの問題
もなく利用できる。一度試して頂きたい。