Fessの辞書APIで同義語を改行区切りで登録する

Fessの管理APIで同義語を登録するとき、"inputs": "検索,サーチ"のようにカンマで語を並べると登録できません。1語ずつ改行で区切ったJSON文字列を送ります。15.9向けの文書訂正と、形式違反をHTTP 500ではなく400として返す修正を紹介します。

管理APIと辞書を使える環境を用意する

管理APIのapi.admin.access.permissionsの初期値はRadmin-apiです。標準設定では管理画面のアクセストークンに{role}admin-apiを設定し、Authorizationヘッダーで送ります。この権限は管理API全体へアクセスするもので、同義語だけに限定されません。

辞書APIは検索エンジンのCodeLibsプラグインを必要とします。プラグインなしのvanilla構成向けではありません。DICT_IDは自分の環境の同義語辞書IDへ、YOUR_TOKENは発行したトークンへ置き換えます。辞書IDや項目IDに共通の初期値はありません。

JSON内では改行を\nで表す

次の例はローカル環境へ同義語の項目を登録するリクエストです。

curl -X POST 'http://localhost:8080/api/admin/dict/synonym/setting/DICT_ID' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"inputs":"検索\nサーチ","outputs":"検索\nサーチ\nリサーチ"}'

JSON文字列の\nは、サーバーで文字列として読み取られた後に改行になります。JSONのバックスラッシュを二重にエスケープして文字通りの「\n」を送るのではなく、利用するHTTPクライアントで改行入りの文字列をJSONへ変換してください。

inputsとoutputsの各語にはカンマや=>を含められません。辞書ファイルで語やルールを区切る記号として使われるためです。mapping辞書のinputsも1語1行で指定し、カンマや=>を含む入力は拒否されます。辞書の種類ごとにフィールド構造が異なるので、同義語の例をほかの辞書へそのまま送らないでください。

入力違反を再試行で解決しない

修正を含む版では、同義語またはmappingの対象形式違反はHTTP 400、response.status=1と、問題の語を示すメッセージになります。修正前は同じ入力がHTTP 500、status=2になる場合がありました。POSTとPUTが対象です。

400になったら入力を直して送信します。同じカンマ区切りのデータを繰り返し送る方法では登録できません。正常時のstatus=0を確認したうえで、取得APIや管理画面で改行ごとの語が保存されたかを確認します。辞書の保存成功と、検索に解析設定が反映されたことは分けて確認してください。

関連PR

Fessのdeb更新で設定ファイルを保護する変更と移行時の注意点

Fessのdebパッケージで、/etc/fess内の設定ファイルをdpkgのconffilesとして扱う変更がマージされました。ローカルで編集した設定を、更新や再インストールで上書きされにくくする改善です。追加修正では、15.8からの初回移行で未編集の設定を新版へ置き換えます。編集済み設定の選択と無人更新の方針は、引き続き確認が必要です。

保護対象と更新時の動作

対象はfess_config.properties、logging.properties、tomcat_config.properties、tika.xmlと、chunk・crawler・suggest・thumbnail・web用の5つのfess_env_*.propertiesです。

従来はこれらが通常のパッケージファイルとして扱われ、編集した内容が確認なしで上書きされる場合がありました。修正後はconffilesとなり、ローカルとパッケージの双方で変更があればdpkgが選択を求めます。採用しなかった内容は状況に応じて.dpkg-oldや.dpkg-distに残ります。

初回移行と無人更新

追加修正#3627を含むパッケージでは、15.9より前からの更新時に、旧パッケージの記録したMD5と一致する未編集の/etc/fessファイルを新版へ置き換えます。この場合は確認を求めません。編集済みファイルは保持し、dpkgの通常の設定選択に従います。--force-confoldなら編集を残して新版を.dpkg-distへ、Yまたは--force-confnewなら新版を採用して旧編集を.dpkg-oldへ保存します。

#3608だけを含み#3627を含まないビルドでは、未編集のファイルにも確認が発生し、旧初期値を残す場合があります。対象ビルドの修正範囲を確認してください。/etc/default/fess、/etc/init.d/fess、systemdユニットは15.8時点ですでにconffilesで、今回の未編集ファイルの処理対象ではありません。

apt-get install -yだけでは、この設定選択への応答を保証できません。標準入力がない環境では更新処理が止まり、パッケージが未設定状態で残る場合があります。自動更新では既存設定を残すか新しい設定を採用するかを決め、dpkgの--force-confold・--force-confnewなどの方針を明示します。

既存設定を残す方針で、設定待ちの状態を解消する例は次のとおりです。

sudo dpkg --configure -a --force-confold

このコマンドは未設定のパッケージ全体を対象にします。実行前にパッケージ状態と設定のバックアップを確認してください。既存設定を残した場合、新しい初期値が自動で反映されるわけではありません。.dpkg-distなどを比較し、必要な差分を取り込みます。

削除との違い

修正後はdpkg -rで設定ファイルが残ります。dpkg -Pでは設定も削除されます。更新時の保護をバックアップの代わりにせず、設定の保管と差分確認を更新手順に含めてください。

関連PR

FessのWeb認証でホスト・NTLM設定と401応答を確認する

認証が必要なWebサイトをFessでクロールするときは、ユーザー名とパスワードだけでなく、資格情報を適用する範囲を確認する必要があります。15.9開発版に向けた文書整備と、NTLMのワークステーション名・401応答の記録に関する変更を紹介します。

2026年10月15日確認時点では関連する4件のPRはすべてマージ済みです。

資格情報を適用する範囲

管理画面のWeb認証設定には、先に登録したWebクロール設定を指定します。

項目空欄の場合・利用条件
ホスト名選択したクロール設定内の任意のホストに適用。リンクやリダイレクトでたどる別ホストも対象になり得るため、対象ホストを指定する
ポート任意のポートに適用。-1ではなく空欄を使う
レルム任意のレルムに適用。BASIC/DIGESTで指定する場合は大文字小文字も一致させる。NTLMでは使われない

スキーム欄はサーバーが要求する方式を強制する設定ではありません。たとえばDIGESTで登録しても、サーバーがBASICを要求すればBASICで応答します。サーバーの実際の方式に合わせ、HTTPSで利用してください。NTLMとBASIC/DIGESTの資格情報は互いに代わりにはなりません。

NTLMのドメインとworkstation

ユーザー名にはユーザー部分を入力し、パラメーター欄に次のように記述します。

domain=EXAMPLE
workstation=FESSCRAWLER

DOMAIN\userをユーザー名欄に入れても、自動的にドメインとユーザーへ分割されません。domainを省略すると空ドメインになり、指定値は大文字に変換して送信されます。

workstationを省略した場合はFess実行ホストの名前が使われます。PR #221は、明示したworkstationがHttpClient 5に無視され、ローカルホスト名になる問題を修正します。修正を含むクローラーで、NTLM Type 3メッセージに設定値が反映されます。Type 1へworkstationを追加する変更ではありません。

401を障害URLで確認する

PR #3651は、同梱設定の初期値を404,403,410から404,403,410,401へ変更します。資格情報の不一致や更新後の認証失敗を、障害URLとして確認しやすくします。

既存環境でこのプロパティを設定している場合は、自動的に書き換わりません。401を記録する運用を選ぶ場合は、既存のコードを残して設定を見直してください。

crawler.failure.url.status.codes=404,403,410,401

401が返っても、すでにインデックスにある文書は削除されません。障害URLによる後続クロールの除外はfailure.count.thresholdに依存し、初期値の-1では無効です。閾値を設定している環境では、認証情報の訂正だけで再クロールできるとは限りません。認証を要求するページへのリンクがある公開サイトでも401の記録が増える可能性があります。

関連PR