第15章 全文検索

第15章
全文検索
15.
全文検索
この章では全文検索の実施手順についてBLOBデータを中心に解説していきます。
15.1.
検索対象データを格納するテーブルの作成
15.1.1. テーブル作成の SQL を実行し、BLOB データ列を含むテーブルを作成
します。
例:
create table ASC_BLOB (
ID integer,
NAME char(18),
DOCUMENT blob default filter ASCTEXT2TEXT
※
);
※ 列 DOCUMENT を BLOB 型として指定しますが、その際に使用するフィルタのデフォ
ルト値を設定します(ここでは ASCII テキスト)。(Linter 既定のものも含めフィルタの
情報はすべて$$$FILTER テーブルに格納されています。)
15.2.
インデックスの付与
15.2.1. インデックス付与の SQL を実行し、検索対象となる DOCUMENT 列に
対してインデックスを作成します。
例:
create phrase deferred index DOCUMENT on ASC_BLOB;
※ DEFERRED句はREBUILD PHRASE INDEXコマンドが実行されたときのみインデック
スを更新することを表します。他にはフィールド更新時にインデックスも即時アップデ
ートを行うIMMEDIATEのオプションがありますが、BLOB型のデータにはDEFERRED
のみが指定可能です。
15.3.
データの挿入
15.3.1. 検索対象となるデータを挿入します。
(1) 予め、幾つかテキスト文書を用意しておきます(内容は任意)
(2) INL を起動します
(3) browse コマンドを実施します
Browse;
(4) SELECT 文を実施し、対象テーブルのデータを表示します(ここではすべて選択で
OK)。
例:
select * from ASC_BLOB;
INL browse 画面が表示されます。
(5) Alt + I を押下するとデータの追加画面が表示されます。
(6) ID と NAME の値を入力し、Ctrl + End を押下しデータ追加を実行します(ここではま
だドキュメントは登録できません)。
一度 Esc を押下し、テーブル表示画面に戻ります。入力したデータが反映されてい
ることを確認してください。
(7) DOCUMENT セルまでカーソルを移動し、Alt + L を押下します。
ディレクトリ構造が表示されます。
(8) 登録したいファイルの保管場所まで移動してファイルを選択します。
下図のようなポップアップが表示されます。
ここで入力する値はマニュアルによると現在の Linter のリリースでは重要/意味の
あるものではない(?らしい)ので、とりあえずゼロを入れておきます(他の数値を入
れても影響はないようでした)。
DOCUMENT に BLOB ファイルが登録されると、BLOB データの情報が表示されます。
(詳細については F1 でヘルプを参照してください)
(9) 同様に、データを登録していきます。登録が終了したら Esc キーを押下し INL
browse 画面を終了します。
15.4.
インデックスのアップデート
15.4.1. BLOB 型のデータは DEFERRED 句を指定したので、最新のデータを
対称に検索を行いたい場合は明示的にインデックスの更新を行わなければ
なりません。
例:
REBUILD PHRASE INDEX DOCUMENT ON ASC_BLOB
15.5.
検索の実行
15.5.1. 構文
検索の条件記述の仕様は下記のとおりです:
<full text index predicate>::=
<column name> [ NOT ] CONTAINS [ <modifier> … ] <full text index template>
<modifier>::= SENSITIVE │ PARTIALLY │ AT_BEGIN │ AT_END │ FUZZY
<full text index template>::= string literal
これを応用して、各種検索を行います。
15.5.2. 例
(1) 基本的な構文
select * from ASC_BLOB where DOCUMENT contains 'word';
(2) 大小文字区別
select * from ASC_BLOB where DOCUMENT contains SENSITIVE 'word';
(3) 部分一致
select * from ASC_BLOB where DOCUMENT contains PARTIALLY 'word';
(4) 前方一致
select * from ASC_BLOB where DOCUMENT contains AT_BEGIN 'word';
(5) 後方一致
select * from ASC_BLOB where DOCUMENT contains AT_END 'word';
(6) 組み合わせ
modifier をスペース区切りで複数併記します。
select * from ASC_BLOB where DOCUMENT contains AT_END SENSITIVE 'word';