Fessがクローリングして検索できるようになるまで、内部ではElasticsearchやLuceneが動いています。
どの部分がFessで、どの部分がElasticsearchやLuceneの役割なのかを簡単に記述します。
#Luceneの役割
倒置Indexを作成できる全文検索エンジンです。全文検索の機能や構文解析機の機能はこのレイヤーで持っています。自分で独自の構文解析機(アナライザー)を作成しようと思ったらこのレイヤーで作成します。
#Elasticsearchの役割
Luceneを上のレイヤーからラッピングして動いています。Luceneのインデックス作成や検索機能、アナライザーの設定を扱い易いAPI形式で提供しています。プラグイン機能を経由してLuceneのアナライザーをElasticsearchのレイヤーで設定する事ができます。プラグインでない独自のアナライザーを作ろうと思ったらLuceneのレイヤーを理解する必要があります。
#Fessの役割
クローリングをしてHTMLを解析する他、Elasticsearchで作成するIndexの定義をしています。検索結果(Elasticsearchにクエリーを投げた結果)をHTML形式でユーザーに表示するのもFessの役割です。検索クエリーはFessではほぼ加工せずElasticsearchAPIをそのままFessが呼び出す形で実行しています。
##おわりに
読んでいただきありがとうございます。
仕事でFessで社内リソースを検索するシステムを作り、その際に検索精度が弱かったために解析器まわりをいじる必要があったのですが、その際に内部構造が分からず苦戦しました。
調べていたらそこそこ理解が深まったので、詳しく知りたい方は連絡いただければ説明出来る事もあると思います。