FessとElasticsearchの連携について

お世話になります。
表題のとおり、FessとElasticsearchの連携についての質問です。

<背景>
公式HPのインストール手順に従ってFessとElasticsearchをそれぞれローカルにインストール(zipファイル展開)しました。
参照したページ:インストール
環境は以下のとおりです。

OS:Windows10
fess-13.14.0
elasticsearch-7.14.0

インストール手順にある「elasticsearch.yml」「fess.in.bat」の変更は行っております。
日本語のファイルを対象とした全文検索のシステム構築を想定しており、
自然文検索が可能となるようにkuromojiのプラグインをインストールし、検証を行っております。
インデックス時/検索時どちらもデフォルトでkuromoji_tokenizerを使用した形態素解析を行いたいため、
「…\fess-13.14.0\app\WEB-INF\classes\fess_indices\fess.json」のstandard_analyzer、standard_search_analyzerのtokenizerに
「kuromoji_tokenizer」を設定し、再インデクシングおよび再クロールを行いました。(char_filter, filterは一旦無しに設定)
インデックスにはサンプルとして以下のドキュメントが入っています。
ファイル名:sample03.txt
本文 :本日は良い天気です。<改行>明日は雨になるかもしれません。

<問題点>
上記サンプルファイルを対象としたFess検索画面での検索結果と、コマンドプロンプトから検索APIを実行したときの検索結果が異なってしまいます。

コマンドプロンプトからの検索API:
「明日は雨」→sample03.txtがヒット
「明日は雨かもしれせん」→sample03.txtがヒット

Fess検索画面での検索:
「明日は雨」→sample03.txtがヒット
「明日は雨かもしれません」→検索結果なし

Webでの検索API (http://localhost:8080/json/?q=検索語) も試しましたが、Fessでの検索と同様の結果です。

インデックス時と検索時の形態素解析について、コマンドプロンプトからAPIで確認した限りでは正常に動作しているように見えます。

インデックス時
{
“tokens” : [
{
“token” : “明日”,
“start_offset” : 0,
“end_offset” : 2,
“type” : “word”,
“position” : 0
},
{
“token” : “は”,
“start_offset” : 2,
“end_offset” : 3,
“type” : “word”,
“position” : 1
},
{
“token” : “雨”,
“start_offset” : 3,
“end_offset” : 4,
“type” : “word”,
“position” : 2
},
{
“token” : “に”,
“start_offset” : 4,
“end_offset” : 5,
“type” : “word”,
“position” : 3
},
{
“token” : “なる”,
“start_offset” : 5,
“end_offset” : 7,
“type” : “word”,
“position” : 4
},
{
“token” : “かも”,
“start_offset” : 7,
“end_offset” : 9,
“type” : “word”,
“position” : 5
},
{
“token” : “しれ”,
“start_offset” : 9,
“end_offset” : 11,
“type” : “word”,
“position” : 6
},
{
“token” : “ませ”,
“start_offset” : 11,
“end_offset” : 13,
“type” : “word”,
“position” : 7
},
{
“token” : “ん”,
“start_offset” : 13,
“end_offset” : 14,
“type” : “word”,
“position” : 8
}
]
}

検索時
{
“_shards” : {
“total” : 1,
“successful” : 1,
“failed” : 0
},
“valid” : true,
“explanations” : [
{
“index” : “fess.202110071608”,
“valid” : true,
“explanation” : “content:明日 content:は content:雨 content:に content:なる content:かも content:しれ content:ませ content:ん”
}
]
}

<質問>
上記事象より、Fessから検索する際にElasticsearchとの連携が上手くできていないように見受けられるのですが、
インストール手順以外に必要な設定などありますでしょうか?

よろしくお願いいたします。

いくつかの話があると思います。

まず、APIとの差分については過去の質問にもあるように思いますが、accept-languageで優先言語を判定しています。それに合わせた検索クエリーが発行されます。

次に、インデックスの設計思想ですが、bi-gramと各言語用でトークナイズされたインデックスを採用しています。単純にstandard_analyzerを変更するのは推奨しません。

langが適切に設定されることにより、各言語用のインデックスが作られるようにしているので、日本語であれば、jaが設定されるようにして、japanese_analyzerが利用される状態にすることを想定しています。

ご回答ありがとうございます。

日本語の自然文検索を実装するにはkuromojiプラグインをインストールしなければいけない認識だったのですが、accept-languageで日本語を設定し、Fessが日本語と判定できればjapanese_analyazerで解析され、Fess検索画面から自然文検索ができるということでしょうか?

また、過去質問を見るとaccept-languageはリクエストヘッダーにて設定できるものかと思いますが、これはWebクローラー限定のものでファイルクロール(もしくはデータストアクロール)の場合はどこで設定すればよろしいでしょうか?

立て続けの質問で申し訳ございませんが、よろしくお願いいたします。

ハイブリットなインデックスを採用しているので、日本語であれば、形態素解析とbi-gramのインデックスに対して検索が行われます。仮にkuromojiだけのインデックスにした場合、標準の状態より再現率が下がると思います。

言語判定の話は、クロールの話ではなく、検索時の話になります。通常、ブラウザが言語情報をリクエストヘッダーに付加していますが、Fessはそれを利用して、適切な言語で検索クエリーを生成しています。

詳しくはソースコードを読んでいただくか、商用サポートをご利用ください。