初めてのシステムと日記

システムも日記も初めてです。

全文検索

OracleTextを用いて全文検索を行う方法。OracleTextを用いれば、

 ・スペースの有無
 ・「・」の有無
 ・全角、半角の違い

なども考慮されて検索されます。


OracleTextの使用方法は

 1.プリファレンス作成 2.索引の作成 3.検索

を行う。



■プリファレンス作成

OracleTextでは検索対象をトークン(短い文字列)に分解して索引を格納。
検索対象をトークンに分解するものをレクサと呼びます。
レクサにはいくつか種類があってどれを使うかをプリファレンスで指定します。

PARAMETERS('プリファレンス・クラス プリファレンス名')

例) 
SQL> BEGIN
  2> ctx_ddl.create_preference('japanese_lexer', 'JAPANESE_LEXER');
  3> END;
  4> /

例ではJAPANESE_LEXERというレクサを指定。これ以外にもJAPANESE_VGRAM_LEXERというのがあります。

違いは以下の通り。


・JAPANESE_LEXER
日本語を単語に基づいてトークンを生成


・JAPANESE_VGRAM_LEXER
日本語を主に2文字ずつに区切ってトークを生成




■索引作成

索引の作成は以下の通り。

SQL> CREATE INDEX [index_name] ON [table_name]([column_name])
  2> INDEXTYPE IS ctxsys.context
  3> PARAMETERS('lexer japanese_lexer');

[index_name]には任意のindexの名前を指定。
[table_name]には検索対象のテーブルを指定。
[column_name]には検索対象のカラムを指定。



また、索引の再作成はリビルドを行うことで可能です。

SQL> ALTER INDEX [index_name] REBUILD;


■検索

検索にはSELECT文にCONTAINSを用います。

SQL> SELECT * FROM [table_name]
  2> WHERE CONTAINS ([column_name], [search_keyword]) > 0;

[search_keyword]に検索したい単語を指定すれば、

その単語が含まれるレコードが取得できます。



参照URL
http://www.okisoft.co.jp/esc/ora.html
http://otndnld.oracle.co.jp/products/iserver/oracle9i/htdocs/o9i_920_otpf_10_1928.html