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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值