Confluenceでは日本語環境向けの検索インデックス言語としてCJK、カスタム日本語を選択することが可能です。
https://ja.confluence.atlassian.com/doc/configuring-indexing-language-150130.html
本記事では、CJKとカスタム日本語における検索の方法の違い、サーバ版のConfluenceにてカスタム日本語を使用した際の検索精度を上げる方法、そして参考情報として設定をお選び頂く際の判断基準についてご説明します。
CJKを選択した場合、検索文字列を2文字ずつ分割したうえで検索します。
一方で、カスタム日本語を利用すると、Kuromojiという形態素解析ライブラリを用いて、検索文字列を既知の語彙に基づき分割したうえで検索します。
例えば、「東京都に住んでいます」という文章があった場合、
CJKでは「東京」「京都」「都に」「に住」「住ん」「んで」「でい」「いま」「ます」
カスタム日本語では「東京都」「に」「住んで」「います」(*)
のように分割され、そのうえでキーワードと照らし合わされるような挙動となります。
(*)カスタム日本語の場合は辞書中の語彙にも依存しますので、実際には異なる形で分割される可能性があります。
カスタム日本語を使用した場合は、上記のように日本語の文法に沿って検索ができるものの、検索できる単語が辞書に含まれる語彙に限られてしまうというデメリットがあります。
例えば「東京特許許可局」のような検索対象文字列を分割するためには、「東京」や「特許」というキーワードをConfluenceが知っている必要があります。少なくとも筆者が本記事の記載時点のサーバ版最新バージョン(6.15.7)で確認する限り、「東京」「特許」というキーワードでは上記のような文字列はヒットさせられません。
もしサーバ版のConfluenceをご利用の場合は、上記のようなケースの検索精度を上げるために、Kuromojiで使用するためのユーザ辞書を用意することで、長い語彙を分割して検索することが可能です。
設定方法は以下の通りです。
上記の設定により、「東京」「特許」「許可」といったキーワードで「東京特許許可局」のような内容もヒットするようになります。
設定方法は以下の通りです。
<property name="opensearch.custom.dictionary.path">user_dict_ja.txt</property>
-Dopensearch.custom.dictionary.path=user_dict_ja.txt
設定方法は以下の通りです。
<property name="opensearch.custom.dictionary.path">analyzers/<package-id></property>
-Dopensearch.custom.dictionary.path=analyzers/<package-id>
最後に参考として、製品の種類ごとに筆者がお薦めするインデックス言語設定をまとめます。ただ、以下は主観も含みますので、各設定での挙動をご理解の上、運用方法に向いた設定をお選びください。
CJKは冒頭の例で「京都」がヒットするなど偽陽性が高くなる可能性がありますが、辞書中の語彙に依存せずに検索することができます。そのため、多くの場合CJKをご設定頂くことをお薦めします。
一方で、もしConfluenceのナレッジベースで特定の固有名詞等での検索が重要であり、かつ、辞書ファイルのメンテナンスが運用上可能であれば、カスタム日本語の設定もお薦めします。
クラウド版ではカスタム日本語での辞書登録を行うことができないので、CJKをご利用頂くことをお薦めします。
本記事のコメントにある通り、クラウド版でも、お客様の管理者の方ご自身でインデックス変更が可能になりました。[Confluence Cloud Admins] 検索言語を再インデックスしましょう! (全エディション) でご設定いただけます。
もしもサーバ版にて検索結果が想定通りとならない場合は、以下の方法でインデックスを再構築することで改善できる可能性もありますので、こちらもお試しください。
上記のユーザ辞書の機能は、以下の機能要望チケットにより実現されました。
Nobuyuki Mukai
Enterprise Technical Architect
Atlassian
Japan
7 accepted answers
4 comments