Samba共有で、Elasticsearch + fs2es-indexerを使用して MacからSpotlight検索をかけたら一部のファイルがヒットしない。対策をGeminiに聞いてみた。

MacからLinux上のSamba共有に対してSpotlight検索(Elasticsearch連携)を行っている際に、一部のファイルがヒットしないというのは非常にもどかしい問題ですね。

この構成では、Mac(mdsync)→ Samba(vfs_fruit)→ Elasticsearch という複雑な経路を通るため、いくつかの箇所で「同期漏れ」や「インデックスの不備」が発生しがちです。

解決のために、以下のステップを順に確認してみてください。


1. Elasticsearch のインデックス状況を確認する

まずは、そもそもデータがElasticsearch側に正しく登録されているかを確認します。Linux側で以下のコマンドを叩き、ドキュメント数が想定通りか見てみましょう。

curl -X GET "localhost:9200/_cat/indices?v"

もし、特定の単語でヒットしない場合は、直接Elasticsearchに対してクエリを投げてみて、インデックス側の問題か、Samba側の問題かを切り分けます。

2. fs2es-indexer のスキャン漏れを疑う

fs2es-indexer はファイルシステムの変更を監視していますが、何らかの理由でクロールが止まっていたり、特定のディレクトリがスキップされている可能性があります。

  • フルスキャンの再実行: 一度インデックスを削除(またはクリア)し、最初からフルスキャンをやり直してみてください。
  • ログの確認: /var/log/syslogfs2es-indexer のログを確認し、権限エラー(Permission Denied)などで読み飛ばされているファイルがないかチェックします。

3. Samba の vfs_fruit 設定を見直す

Macとの互換性を保つための vfs_fruit モジュール設定が重要です。smb.conf[global] または共有セクションに以下が含まれているか確認してください。

vfs objects = catia fruit streams_xattr
fruit:aapl = yes
fruit:metadata = netatalk
fruit:model = MacSamba
# Elasticsearchとの連携設定
spotlight = yes

注意: vfs objects の順番は非常に重要です。必ず fruitstreams_xattr より前に記述してください。

4. Mac側の「検索インデックス」をリセットする

サーバー側が正常でも、Mac側がネットワークドライブのインデックスを古い状態(キャッシュ)で保持していることがあります。

  1. Macの「システム設定」>「 SiriとSpotlight」>「Spotlightのプライバシー」を開きます。
  2. Sambaの共有フォルダを一度リストに追加(インデックス対象外に)します。
  3. 数秒待ってから、リストから削除します。
  4. これにより、Macが強制的にサーバーへ新しいインデックス情報を問い合わせるようになります。

5. Elasticsearch の「アナライザー」設定(日本語の場合)

もしヒットしない文字が日本語の場合、Elasticsearchのデフォルト設定では「単語の区切り」を正しく認識できていない可能性があります。

  • Kuromoji などの形態素解析プラグインを導入していますか?
  • インデックス作成時のマッピングで、日本語用のアナライザーが指定されていないと、部分一致検索(n-gramなど)が効かず、検索漏れが発生します。

次に試すべきこと

まずは原因を特定するために、「特定のファイル名(英語)で検索してもヒットしないのか」、それとも「ファイルの中身(日本語など)がヒットしないのか」を切り分けていただけますか?

もし特定の拡張子や日本語のみがダメな場合は、fs2es-indexer の設定ファイル(YAML)や Elasticsearch のマッピング設定を詳しく確認するお手伝いができます。

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

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

コメント