Confluenceでは日本語環境向けの検索インデックス言語としてCJK、カスタム日本語を選択することが可能です。
https://ja.confluence.atlassian.com/doc/configuring-indexing-language-150130.html
本記事では、CJKとカスタム日本語における検索の方法の違い、サーバ版のConfluenceにてカスタム日本語を使用した際の検索精度を上げる方法、そして参考情報として設定をお選び頂く際の判断基準についてご説明します。
CJKとカスタム日本語の違い
CJKを選択した場合、検索文字列を2文字ずつ分割したうえで検索します。
一方で、カスタム日本語を利用すると、Kuromojiという形態素解析ライブラリを用いて、検索文字列を既知の語彙に基づき分割したうえで検索します。
例えば、「東京都に住んでいます」という文章があった場合、
のように分割され、そのうえでキーワードと照らし合わされるような挙動となります。
(*)カスタム日本語の場合は辞書中の語彙にも依存しますので、実際には異なる形で分割される可能性があります。
カスタム日本語にて、ユーザー辞書を使って検索精度を向上させる方法(サーバ/DC版のみ)
カスタム日本語を使用した場合は、上記のように日本語の文法に沿って検索ができるものの、検索できる単語が辞書に含まれる語彙に限られてしまうというデメリットがあります。
例えば「東京特許許可局」のような検索対象文字列を分割するためには、「東京」や「特許」というキーワードをConfluenceが知っている必要があります。少なくとも筆者が本記事の記載時点のサーバ版最新バージョン(6.15.7)で確認する限り、「東京」「特許」というキーワードでは上記のような文字列はヒットさせられません。
もしサーバ版のConfluenceをご利用の場合は、上記のようなケースの検索精度を上げるために、Kuromojiで使用するためのユーザ辞書を用意することで、長い語彙を分割して検索することが可能です。
Confluence で Lucene を利用している場合 (デフォルト)
設定方法は以下の通りです。
- インデックス作成言語を「カスタム日本語」に設定します。
- user_dict_ja.txt ファイルを以下のフォーマット(カンマ区切り)で作成します。
東京,特許,許可
- 上記ファイルを /shared-home/config/ に配置します。
- コンテンツインデックス再作成を行います。
上記の設定により、「東京」「特許」「許可」といったキーワードで「東京特許許可局」のような内容もヒットするようになります。
Confluence で OpenSearch を利用している場合
セルフホスト(あるいは AWS以外)の OpenSearch の場合
設定方法は以下の通りです。
- 次のガイドに従って、OpenSearchに "analysis-kuromoji"プラグインをインストールして下さい: Installing plugins
- インデックス作成言語を「カスタム日本語」に設定します。
- user_dict_ja.txt ファイルを以下のフォーマット(カンマ区切り)で作成します。
東京,特許,許可
- 上記ファイルを /config/ に配置します。
- 次のプロパティを confluence.cfg.xml に追加します:
<property name="opensearch.custom.dictionary.path">user_dict_ja.txt</property>
あるいは system property に追加します:
-Dopensearch.custom.dictionary.path=user_dict_ja.txt
- Confluence ノードを再起動します。
- コンテンツインデックス再作成を行います。
Service の場合
設定方法は以下の通りです。
- インデックス作成言語を「カスタム日本語」に設定します。
- user_dict_ja.txt ファイルを以下のフォーマット(カンマ区切り)で作成します。
東京,特許,許可
- S3 バケットにファイルをアップロードし OpenSearch ドメインにインポートします。こちらのガイドを参照下さい。: Custom packages for Amazon OpenSearch Service - Amazon OpenSearch Service. ※ 次の手順で インポートした パッケージのID を利用しますのでメモして下さい。
- 次のプロパティをconfluence.cfg.xml に追加します。:
<property name="opensearch.custom.dictionary.path">analyzers/<package-id></property>
あるいは system property に追加します:
-Dopensearch.custom.dictionary.path=analyzers/<package-id>
- Confluence ノードを再起動します。
- コンテンツインデックス再作成を行います。
インデックス言語設定の選択基準について
最後に参考として、製品の種類ごとに筆者がお薦めするインデックス言語設定をまとめます。ただ、以下は主観も含みますので、各設定での挙動をご理解の上、運用方法に向いた設定をお選びください。
サーバ版のConfluenceをご利用の場合
CJKは冒頭の例で「京都」がヒットするなど偽陽性が高くなる可能性がありますが、辞書中の語彙に依存せずに検索することができます。そのため、多くの場合CJKをご設定頂くことをお薦めします。
一方で、もしConfluenceのナレッジベースで特定の固有名詞等での検索が重要であり、かつ、辞書ファイルのメンテナンスが運用上可能であれば、カスタム日本語の設定もお薦めします。
クラウド版のConfluenceをご利用の場合
クラウド版ではカスタム日本語での辞書登録を行うことができないので、CJKをご利用頂くことをお薦めします。
本記事のコメントにある通り、クラウド版でも、お客様の管理者の方ご自身でインデックス変更が可能になりました。[Confluence Cloud Admins] 検索言語を再インデックスしましょう! (全エディション) でご設定いただけます。
トラブルシューティング
もしもサーバ版にて検索結果が想定通りとならない場合は、以下の方法でインデックスを再構築することで改善できる可能性もありますので、こちらもお試しください。
https://ja.confluence.atlassian.com/confkb/how-to-rebuild-the-content-indexes-from-scratch-on-confluence-server-110035351.html
関連リンク
上記のユーザ辞書の機能は、以下の機能要望チケットにより実現されました。
https://jira.atlassian.com/browse/CONFSERVER-33368