全文検索のインデックス
最終更新日: 2021年3月1日
R8 | R9
全文検索のために利用する検索用インデックスファイルは次の場所に格納されます。
設定ファイル application.properties に
実際に変更する場合はカスタマイズフォルダ customize/resources に myapplication.properties ファイルを用意し、上の行を含めるようにしてください。(差分ファイル方式を推奨します。)
インデックスファイルは次のタイミングで変更されます。
全文検索(およびサジェスト)対象の項目の内容を、SQLなどで直接編集した場合、Wagbyはこれを検知することができません。そのためインデックスを更新することができません。この場合は手動でインデックスファイルの再作成を行なってください。
データをインデックスに登録すると、データ1件に使用されるサイズは、登録対象サイズの最大約7.2倍になります。
このことから、1モデルで使用するインデックスサイズは次のように見積りできます。
平均登録対象サイズは、全文検索の対象となる項目に格納される文字列数および添付文書に含まれるテキスト文字列数からおおよその数値を出してください。
インデックスファイルのサイズは、扱うデータのサイズより大きくなります。
特に添付ファイルの全文検索機能を有効にするとインデックスのサイズは巨大になります。
データペース用のディスク領域とあわせてインデックス用のディスク領域も十分確保されているかを確認してください。
全文検索で利用するインデックスファイルと、サジェストで利用するインデックスファイルは別に用意されています。
N-gram インデックス方式を採用しています。N の値は 2 (bigram) を用いています。
例えば "東京都" という文字列の場合「東京」「京都」が検索語になります。具体的な検索動作は次のようになります。
ただし半角アルファベット文字についてはスペース等の区切り文字で分割したものを登録します。
文字列を分割せずにそのまま検索語として登録します。
なお、文字列が 64 文字を超える場合は、先頭から64 文字を登録します。
サジェストの場合は先頭からの一致検索になります。例えば "北九州" という文字列に対して "北" はヒットしますが、"九州" はヒットしません。
インデックスファイルは定期的に最適化処理を行うことで、全文検索の実行速度を常に最良に保つことができます。
Wagbyは次のタイミングで最適化処理を行います。
アプリケーションを無停止で稼働させる場合は、定期的にインデックス最適化ジョブを実行するようにしてください。
何らかの理由でインデックスファイルが破損した場合、次の手順で再作成することができます。
インデックスファイルは検索用のファイルですので、破損してもデータがおかしくなることはありません。
特定モデルのインデックスを最適化する場合、例えばsampleモデルのインデックスを最適化する場合には、次のフォルダを削除します。
またインデックス全体を最適化する場合には次のフォルダ全体を削除します。
全文検索を有効にしたとき、Wagbyアプリケーション起動時に検索用インデックスファイルを作成するようになります。この処理が終わらないうちに(全文検索を使った)モデルの登録・更新・削除を行うと、検索用インデックスファイルが作成完了するまで待機します。また、処理が終わらない状態で検索を行なっても(インデックスファイルへの反映が行われていないため)正しく検索されないこともあります。
具体的にはインデックスファイルの作成が完了すると次のようなログが出力されます。
このログを確認後、メンテナンスモードを終了させ、一般利用者に解放するとよいでしょう。
Wagbyアプリケーション起動時、またはインデックス最適化ジョブ起動時に、ログに次のようなエラーが表示された場合です。
これは別のアプリケーション(または、別の Wagby アプリケーション)が当該ファイルを掴んでしまったままになっている可能性があります。このような場合は次の対応を行ってください。
格納場所
wagbyapp\webapps\wagby\WEB-INF\idxdir\モデル名
格納場所を指定する
wagby.MakeTextIndex.indexDir
を指定することができます。次の例はexportフォルダなどと同じ位置にインデックスフォルダを作成します。
wagby.MakeTextIndex.indexDir=../../idxdir
変更されるタイミング
データベースを直接更新した場合
ファイルサイズ
インデックスサイズ(バイト) = データ件数 × 平均登録対象サイズ × 7.2
注意
生成ルール
全文検索
これは、文字列の先頭から1文字ずつずらしながら、2文字ずつ抜き出したものを検索語として登録するものです。
例えば "orange pineapple banana" の場合、"orange", "pineapple", "banana" に分割し、それぞれを検索語として登録します。このため検索語に "apple" を入力した場合はヒットしませんが、"pine" はヒットします。
サジェスト
最適化処理
手動によるインデックスファイルの再作成
ワンポイント
wagbyapp\webapps\wagby\WEB-INF\idxdir\sample
wagbyapp\webapps\wagby\WEB-INF\idxdir
運用時の注意
[INFO jp.jasminesoft.jfc.textsearch.servlet.MakeTextIndexThread run] (admin@localhost) finished making textsearch index.
トラブルシューティング
全文検索インデックス作成時に "write.lock" エラーが発生する
jp.jasminesoft.jfc.textsearch.IndexerException: Cannot delete $(Wagbyアプリケーションフォルダ)\WEB-INF\idxdir\<モデルID>\write.lock