モデルに全文検索機能を指定することができます。専用の検索インデックスを利用するため、検索速度が大幅に向上します。 R7.2

全文検索機能は、利用するリレーショナルデータベースとは別に検索専用のインデックスファイルを利用します。次のようなアプリケーションに向いています。

  • 大量の文字情報を高速に検索する。
  • 添付ファイルの内容を高速に検索する。

動作例

顧客モデルの「氏名」「備考」項目に全文検索を適用した例です。検索画面は「通常検索」と「全文検索」の二つのタブが用意されます。

図1 通常検索と全文検索

全文検索タブを開いたところを図2に示します。入力欄は1つのみとなります。これでモデル内の(全文検索を指定した)項目を横断的に検索します。

図2 全文検索タブ

検索結果の一覧表示画面を図3に示します。全文検索では一覧表示の方法も異なっています。全文検索の対象とした項目の内容が表示され、かつキーワードの部分は強調(太字)となります。

図3 全文検索の一覧表示

設定方法

項目「氏名」は検索条件に使う、という設定を行っています。
この状態で「モデル項目詳細定義 > 検索制御 > 全文検索」にある「全文検索を行う」を有効にします。

図4 全文検索の設定

全文検索に関するその他の設定は次のとおりです。

検索結果のタイトルに使用する

全文検索に使用する項目のうちいずれか一つに本設定を適用してください。検索結果表示時のタイトルとして利用します。

文字列の一致方法

候補リストの同時表示数

この二つはサジェストの設定で利用します。

ファイルの内容を検索する

次節で説明します。

添付ファイルの内容も全文検索の対象とすることができます。Word, Excel, PowerPoint, PDF といったバイナリファイルおよび TEXT, HTML, RTF, XML といったテキストファイルに対応しています。

PDFファイルに含まれる文字列で検索した例を図5に示します。

図5 PDFファイルの全文検索

画面上の「+」ボタンを押下すると、ファイル内容の詳細が表示されます。ボタンは「-」に変わります。(図6)

図6 PDFファイルの内容(一部)が表示される

項目の設定

ファイル型項目を用意し、検索対象とします。さらに全文検索を有効にすると同時に「ファイルの内容を検索する」を有効にします。

図7 ファイルの内容を検索する設定

「環境 > アプリケーション」タブを開きます。「全文検索 > 文字抽出プログラム」に "Tika" を指定します。

Apache Tika はオープンソースのテキスト文字列抽出ライブラリです。Wagbyに標準で同梱されています。

図8 文字抽出プログラムの設定

データ一件に格納できる最大文字数

「データ一件に格納できる最大文字数」を指定することができます。未指定時は330 万文字となります。 この値を超える文字は、インデックス作成の対象とならないため、検索されません。

あまり大きな文字数を指定すると、インデックス作成に時間がかかり、メモリ不足となる可能性もあります。 業務要件に合わせた数字を設定してください。以下、設定時の目安を示します。

  • 新聞の朝刊がおよそ 40 〜 50 万文字であると言われています。(標準値はおおよそ朝刊 7 日分に相当します。)
  • 繰り返しコンテナにファイル添付ができるようなモデルを定義した場合、複数ファイルの合算文字数の上限となります。

検索キーワードの入力ルール

全文検索タブにおける検索キーワードの入力ルールは次のとおりです。

ルール 説明
AND 検索 複数のキーワードがすべて含まれるデータを検索します。 東京 ニューヨーク ロンドン
OR 検索 いずれかのキーワードがすべて含まれるデータを検索します。先頭に OR と指定します。 OR 東京 ニューヨーク ロンドン
  • 複数キーワードを指定する場合は「半角スペース」または「全角スペース」で区切ります。
  • 全角スペースそのものを検索する場合、二重引用符で括ってください。
  • "OR" は半角文字をお使いください。大文字、小文字は区別しません。
  • キーワードは二文字以上が必要です。一文字のキーワードでは検索できません。

表示順序

全文検索機能を用いた場合は「検索語の一致度の高さ」を基準にして検索結果の一覧が表示されます。 通常の Wagby による一覧表示とは異なり、項目毎の並び替え機能は動作しません。

指定できる項目

全文検索機能の対象となる項目は以下の通りです。

項目の形態 項目の型
(繰り返しでない)単一項目 文字列、ファイル名
繰り返し項目 文字列
繰り返しコンテナ内の項目 文字列、ファイル名

さらに次の条件を満たす必要があります。

  • 参照権限(条件付き)が設定されていないこと。
  • 一覧表示画面で隠し項目に設定されていないこと。

この条件を満たさない項目は全文検索機能の対象となりません。(「全文検索機能を使用する」を有効にしても無視されます。)

Javaカスタマイズにおける考慮点

全文検索またはサジェスト機能を有効にしたモデルは、生成されるソースコードの形式が大きく変わります。

インデックスファイルの格納場所

全文検索のために利用する検索用インデックスファイルは次の場所に格納されます。

wagbyapp\webapps\wagby\WEB-INF\idxdir\モデル名

インデックスファイルが変更されるタイミング

インデックスファイルは次のタイミングで変更されます。

  • データの変更(新規登録、更新、削除)
  • インポート処理
  • インデックスの最適化処理

インデックスのサイズ

データをインデックスに登録すると、データ1件に使用されるサイズは、登録対象サイズの最大約7.2倍になります。 このことから、1モデルで使用するインデックスサイズは次のように見積りできます。

インデックスサイズ(バイト) = データ件数 × 平均登録対象サイズ × 7.2

平均登録対象サイズは、全文検索の対象となる項目に格納される文字列数および添付文書に含まれるテキスト文字列数からおおよその数値を出してください。

インデックスファイルのサイズは、扱うデータのサイズより大きくなります。 特に添付ファイルの全文検索機能を有効にするとインデックスのサイズは巨大になります。 データペース用のディスク領域とあわせてインデックス用のディスク領域も十分確保されているかを確認してください。

インデックスの生成ルール

全文検索で利用するインデックスファイルと、サジェストで利用するインデックスファイルは別に用意されています。

全文検索

N-gram インデックス方式を採用しています。N の値は 2 (bigram) を用いています。
これは、文字列の先頭から1文字ずつずらしながら、2文字ずつ抜き出したものを検索語として登録するものです。

例えば "東京都" という文字列の場合「東京」「京都」が検索語になります。具体的な検索動作は次のようになります。

  • "東" ではヒットしない。
  • "東京" ではヒットする。
  • "京" ではヒットしない。
  • "京都" ではヒットする。
  • "東京都" ではヒットする。

ただし半角アルファベット文字についてはスペース等の区切り文字で分割したものを登録します。
例えば "orange pineapple banana" の場合、"orange", "pineapple", "banana" に分割し、それぞれを検索語として登録します。このため検索語に "apple" を入力した場合はヒットしませんが、"pine" はヒットします。

サジェスト

文字列を分割せずにそのまま検索語として登録します。 なお、文字列が 64 文字を超える場合は、先頭から64 文字を登録します。

サジェストの場合は先頭からの一致検索になります。例えば "北九州" という文字列に対して "北" はヒットしますが、"九州" はヒットしません。

インデックスの最適化処理

インデックスファイルは定期的に最適化処理を行うことで、検索スピードを一定に保つことができます。 Wagbyは次のタイミングで最適化処理を行います。

アプリケーションを無停止で稼働させる場合は、インデックス最適化ジョブを設定してください。

手動によるインデックスファイルの再作成

何らかの理由でインデックスファイルが破損した場合、次の手順で再作成することができます。

インデックスファイルは検索用のファイルですので、破損してもデータがおかしくなることはありません。
  1. Webアプリケーションを停止します。
  2. インデックスファイルを削除します。

    特定モデルのインデックスを最適化する場合、例えばsampleモデルのインデックスを最適化する場合には、次のフォルダを削除します。

    wagbyapp\webapps\wagby\WEB-INF\idxdir\sample

    またインデックス全体を最適化する場合には次のフォルダ全体を削除します。

    wagbyapp\webapps\wagby\WEB-INF\idxdir
  3. Webアプリケーションを起動します。初期化処理時にインデックスの作成の後、インデックスの最適化が行われます。

全文検索の応用例に「サジェスト検索」があります。詳細は「他モデルの参照 > サジェスト」をお読みください。