公開日 2022年04月20日
更新日 2026年08月27日
検索を高速に行うため、検索対象の記事本文や添付ファイルのテキストを事前に一定の粒度に分解し、検索インデックスを作成します。
分解方法には、主に、形態素解析とN-gramの2つの方法があります。
形態素解析
テキストを単語(形態素)に分解し、検索インデックスを作成します。
検索対象のテキストを形態素に分解する処理を形態素解析と呼びます。
形態素解析は辞書を利用して単語に分解するため、利用する辞書によって結果が異なることがあります。
検索を実行する際は、検索キーワードを形態素解析し、分解した形態素で検索インデックスを検索します。
検索の結果は、検索キーワードを形態素に分解した結果と、検索インデックスに格納されている形態素の集合体との相互の関係で決まります。

検索キーワードが複数の形態素に分解された場合、それぞれの形態素をすべて含む記事を探します。
それぞれの形態素が検索キーワードと同じ並びでない場合も、検索にヒットします。

検索キーワードと完全に同じ単語のみを検索したい場合は、"東京都"のように、キーワードの前後に"(ダブルクォーテーション)をつけて、完全一致の条件で検索してください。
形態素解析には、下記のようなメリットとデメリットがあります。
- メリット
- 無関係なページがヒットしにくい(検索ノイズが少ない)
- N-gramと比べると検索インデックスのサイズが小さい
- デメリット
- 形態素解析誤りの影響などで検索漏れが発生しやすい
- 未知語、複合語に弱く、辞書に依存する
N-gram
テキストをN文字ずつ分解し、検索インデックスを作成します。
検索対象のテキストをN文字ずつ分解する処理をN-gramと呼びます。
1~3文字の範囲で分解することが一般的で、JoruriSearchでは2文字ずつ分解します(N=2のことをバイグラムと呼びます)。
検索を実行する際は、検索キーワードを分解し、分解した文字で検索インデックスを検索します。
検索の結果は、検索キーワードを分解した結果と、検索インデックスに格納されている文字の集合体との相互の関係で決まります。


N-gramには、下記のようなメリットとデメリットがあります。
- メリット
- 検索漏れが少ない
- 未知語、複合語について辞書がなくてもヒットする
- デメリット
- 無関係なページがヒットしやすい(検索ノイズが大きい)
- 形態素解析と比べると検索インデックスのサイズが大きい
形態素解析とN-gramの併用
形態素解析とN-gramには、各々、メリットとデメリットがあります。
両手法を併用することで、検索漏れと検索ノイズの軽減を実現できます。
JoruriSearchでは、両手法を併用した検索を利用しています。
例えば、形態素解析は、形態素解析誤りの影響を受けるため、ヒットしないことがあります。
※形態素解析誤りについては、形態素解析誤りの影響、を参照ください。
N-gramを併用することで、ヒットするようになります。

また、N-gramは検索漏れが少ない一方、無関係なページが検索結果の上位に表示されやすいですが、
形態素解析を併用することで、このような検索ノイズを軽減できます。

併用することによるデメリットとしては、検索インデックスのサイズが大きくなることです。