サポート > リポジトリ > Appendix > 全文検索のインデックス

全文検索およびサジェスト機能利用時は、専用のインデックスファイルが生成されます。

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

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アプリケーションを起動します。初期化処理時にインデックスの作成の後、インデックスの最適化が行われます。

運用時の注意R8.0.5

全文検索を有効にしたとき、Wagbyアプリケーション起動時に検索用インデックスファイルを作成するようになります。この処理が終わらないうちに(全文検索を使った)モデルの登録・更新・削除を行うと、検索用インデックスファイルが作成完了するまで待機します。

このような動作のため、全文検索を有効とした場合は Wagby アプリケーションをメンテナンスモードで起動させ、ログ(system.log)に"インデックス作成完了"と出力されるまで待つという運用を推奨します。

具体的にはインデックスファイルの作成が完了すると次のようなログが出力されます。

 [INFO jp.jasminesoft.jfc.textsearch.servlet.MakeTextIndexThread run] (admin@localhost) finished making textsearch index.

このログを確認後、メンテナンスモードを終了させ、一般利用者に解放するとよいでしょう。