LIKE索引,以及全文检索索引

有空再翻译

通常、Oracle Databaseからデータを検索する際に、文章の途中の文言を検索条件にする場合には、LIKEキーワードを条件指定しているかと思います。

(例) Like 検索
SQL> select * from doc where text like '%東京購%' ;

Like検索での中間一致・後方一致の場合(%で始まる条件の時)は索引(INDEX)は使われません。
データ(文章)を頭から読み込んで、条件に一致するかをすべて照らし合わせて(マッチング)結果を求めます。
一般的に、データベースから大量のデータの検索を高速にするために、索引(INDEX)を使います。
そのため、Like検索ではデータ量が多くなればなるほど、処理にかかる時間がかかることになります。

それに対して、Oracle Databaseには「Oracle Text」という標準の全文検索の機能があります。
Oracle Textでは、文章の途中に有る(中間一致)データに対しても、索引が使われます。
下の例に有るように、SQL文で処理できるので特別な作りこみは必要ありません。

(例) Oracle Textでの全文検索
SQL> select * from doc where contains(text,'東京購') > 0;

Oracle Textの使い方

0.以下のようなテーブルにデータが入っているとします。

1.利用するユーザに権限(ctxapp)を与えます。

SQL> connect / as sysdba
SQL> grant ctxapp to <ユーザ名>;

2.プリファレンス(全文検索対象のデータがどんなものかを示す指定)を作成します。

SQL> connect <ユーザ名>/<パスワード>
SQL> begin
2 ctx_ddl.create_preference('<プリファレンス名>',
3 'JAPANESE_VGRAM_LEXER');
4 end;
5 /

3.全文検索用の索引を作成します。CONTENT索引タイプを指定します。

SQL> create index <索引名> on <表名>(<列名:>)
2 indextype is ctxsys.context
3 parameters ('lexer <プリファレンス名> ');

索引が作成されました。

4.全文検索を実行します。where句にCONTAINSという演算子を使用します。

SQL> select <列名> from <表名>
2 where contains (<列名>,'<検索文字列>')>0;


このように、SQL文のみで設定~実行までが可能です。
Oracle Databaseのみで使える機能なので、追加のアプリケーションを導入したり、作りこむ必要が無いのです。

转自:https://blogs.oracle.com/oracle4engineer/entry/oracleoracle_text

猜你喜欢

转载自ahuzl007.iteye.com/blog/2256876