全文検索のインデックス

最終更新日: 2021年3月1日
R8 | R9

格納場所

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

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

格納場所を指定する

設定ファイル application.properties に wagby.MakeTextIndex.indexDir を指定することができます。次の例はexportフォルダなどと同じ位置にインデックスフォルダを作成します。

wagby.MakeTextIndex.indexDir=../../idxdir

実際に変更する場合はカスタマイズフォルダ customize/resources に myapplication.properties ファイルを用意し、上の行を含めるようにしてください。(差分ファイル方式を推奨します。

wagbyapp/webapps/<プロジェクト識別子>/WEB-INF/classes/application.properties に反映されます。

変更されるタイミング

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

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

データベースを直接更新した場合

全文検索(およびサジェスト)対象の項目の内容を、SQLなどで直接編集した場合、Wagbyはこれを検知することができません。そのためインデックスを更新することができません。この場合は手動でインデックスファイルの再作成を行なってください。

ファイルサイズ

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

運用時の注意

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

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

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

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

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

トラブルシューティング

全文検索インデックス作成時に "write.lock" エラーが発生する

Wagbyアプリケーション起動時、またはインデックス最適化ジョブ起動時に、ログに次のようなエラーが表示された場合です。

jp.jasminesoft.jfc.textsearch.IndexerException: Cannot delete $(Wagbyアプリケーションフォルダ)\WEB-INF\idxdir\<モデルID>\write.lock

これは別のアプリケーション(または、別の Wagby アプリケーション)が当該ファイルを掴んでしまったままになっている可能性があります。このような場合は次の対応を行ってください。

  • Wagbyアプリケーションが複数、起動していないかどうかを確認する。その場合はいったんすべて停止させ、再起動する。
  • PC を再起動する。これによってロックが解除される。