Elasticsearchにおける「形態素解析(けいたいそかいせき)」とは。「Kuromoji」とは?(Gemini)

Elasticsearchにおける**「形態素解析(けいたいそかいせき)」とは、人間が書いた文章を、検索エンジンが理解しやすいように「意味のある最小単位(単語)」に分割する作業**のことです。

英語の場合は「単語がスペースで区切られている」ので分割が簡単ですが、日本語は単語が繋がっているため、専用の辞書(プラグイン)がないと正しく検索できません。


なぜ「Kuromoji」が必要なのか?

例えば、**「東京都現代美術館」**という言葉を検索したい場合、Elasticsearchに標準の(日本語を知らない)設定で読み込ませると、文字をバラバラにしてしまいます。

  • 標準(1文字ずつ): 「東」「京」「都」「現」「代」…
  • Kuromoji(形態素解析): 「東京」「都」「現代」「美術館」

このように、意味のある単語として認識させることで、検索精度が劇的に上がります。

Kuromojiがないと起こる問題

  1. ノイズが多い: 「すもももももも」を検索しようとすると、「も」という1文字が含まれるすべてのファイルがヒットしてしまい、関係ないものばかり出てくる。
  2. 検索漏れ: 単語の区切りを無視して検索するため、Macから特定のキーワードで検索しても、Elasticsearch側が「それは単語ではない」と判断して結果を返さない。

Kuromojiを導入する手順(Linux側)

Elasticsearchが動いているLinuxサーバーで以下の操作を行います。

1. プラグインのインストール

Elasticsearchのバージョンに合わせた analysis-kuromoji をインストールします。

Bash

# Elasticsearchのインストールディレクトリにあるbin/elasticsearch-pluginを使用
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji

2. サービスの再起動

インストール後は必ず再起動が必要です。

Bash

sudo systemctl restart elasticsearch

3. インデックス設定の変更

ここが少し厄介なのですが、プラグインを入れただけでは、既存のインデックス(すでにスキャン済みのデータ)には適用されません。

fs2es-indexer の設定ファイルや、Elasticsearchのインデックス作成時の設定(マッピング)で、analyzer: kuromoji を使用するように指定する必要があります。


導入のポイント:N-gram(文字分割)との違い

「文字が入っているのにヒットしない」問題を解決する手法には、大きく2つあります。

手法特徴メリット
Kuromoji (形態素解析)辞書を使って「単語」で分ける精度が高い(正しい単語でヒットする)
N-gram (文字分割)2文字ずつなど、機械的に分ける辞書にない造語や型番、略語でも必ずヒットする

もし、あなたの扱うファイルが**「一般的な日本語の文章」であれば Kuromoji がおすすめですが、「特殊な型番や製品名、略称」**が多い場合は N-gram 設定の方が「検索漏れ」はなくなります。

現在、fs2es-indexer でどのような設定(YAMLファイルなど)を使用されていますか?もし可能であれば、設定の一部を教えていただければ、どこを修正すべきかアドバイスできます。

Linux、Netatalk、Samba、NFSを使用したファイルサーバーについて研究・運用しています。

fsをフォローする
手順課題ログ

コメント