Omeka Sの日本語による全文検索の注意点とMroonga searchモジュール
事象
Omeka Sは全文検索機能を提供していますが、残念ながら、デフォルトの設定では日本語検索がうまく機能しません。具体的には、部分一致検索がうまく機能しません。
例えば、以下のように「校異」という文字列がタイトルに含まれるアイテムが複数登録されている場合を想定します。
この時、画面左上部の全文検索フォームに「校異」と入力すると、検索結果は0件になります。
一方、「校異源氏物語」と入力すると、正しく検索結果が得られます。
本記事では、この問題に対する対応方法を紹介します。
標準機能での対応
対応策の一つとして、全文検索機能を使用せず、詳細検索において、「任意のプロパティに対する部分一致検索」を使用することが挙げられます。
具体的には、アイテムやアイテムセット、メディアの詳細検索画面から、以下の「値を検索」項目において、「[任意のプロパティ]」「含む」を選択した上で、検索語を入力します。この方法により、例えば「校異」という検索語による部分一致検索が可能です。
テーマの修正
上記では、管理画面での対応方法について説明しました。一方、公開画面においても全文検索フォームが以下のように提供されています。この全文検索フォームをそのまま提供すると、検索の挙動から利用者に混乱を招く恐れがあります。
対応方法の一つとして、テーマのプログラム修正が挙げられます。具体的には、以下の部分です。
https://github.com/omeka/omeka-s/blob/develop/application/view/common/search-form.phtml#L15-L20
この部分の修正方法として、以下の2点が挙げられます。なお、下記の2点の修正を含むテーマを以下からダウンロードいただけます。プログラムの修正等が難しい方は、以下をダウンロードの上、ご利用ください。
https://github.com/omeka-j/default/releases/tag/v1.6.3
上記のテーマは、テーマ名を「Default (CJK)」として、設定画面に全文検索フォームを表示するか否かのオプションを追加しています。また「表示する」に設定した場合、上述した、デフォルトの全文検索フォームではなく、「任意のプロパティに対する部分一致検索」を行うように修正しています。
以下では、このテーマの改修内容を参考に、プログラムの修正方法を示します。以下、プログラムの修正が必要になるため、発展的な内容になります。
(発展)対策1:全文検索フォームを隠す
例えば、全文検索のフォームの記述を削除することで、以下のように、全文検索フォームを隠すことができます。
具体的には、以下の部分を修正します。以下の例では、テーマの設定画面で表示・非表示を選択できるようにするため、themeSettingという関数を使用していますが、単純に、idがsearchのdivを削除またはコメントアウトすることで、検索フォームが非表示となります。
https://github.com/omeka-j/default/blob/develop/view/layout/layout.phtml#L73-L77
(発展)対策2:全文検索を「任意のプロパティに対する部分一致検索」に置き換える
この方法では、以下のリンク先に示すように、テーマ側でsearch-form.phtmlを用意して、デフォルトの全文検索を行う記述を、「任意のプロパティに対する部分一致検索」を行うように書き換えます。
https://github.com/omeka-j/default/blob/develop/view/common/search-form.phtml
上記の2つの対応は、根本的な解決にはつながりませんが、応急処置の策として参考になりましたら幸いです。
Mroonga searchモジュールのインストール
この問題を根本的に解決する方法として、以下のMroonga searchモジュールをインストールする方法が挙げられます。
上記のREADME.mdに記載があると通り、まずMySQLまたはMariaDBのMroongaプラグインを有効化します。
その上で、Omeka SのMroonga searchモジュールを通常の方法でインストールすることで、本記事で課題としているCJK対応の全文検索が可能になります。この場合、本モジュールを有効化するのみで、テーマの修正等は必要ありません!有益なモジュールを公開してくださっている開発者の方に深く感謝いたします。
一方、上記のリポジトリにも記載がある通り、以下の点に注意が必要です。
We have not heavily tested the Mroonga engine with large-sized data yet.
なお、私も大規模なデータに対する動作検証はできていませんが、私の環境において、本モジュールが正しく動作することを確認済みです。
本モジュールの利用にあたっては、READMEファイルの内容を十分に検討した上でご利用いただくことを推奨します。
まとめ
以上、Omeka Sの日本語による全文検索の注意点とその対応方法をまとめました。今後、標準機能での対応が望まれますが、2022年3月時点での対応策として、本記事が参考になりましたら幸いです。