十数万件規模のファイルクロール方法について

こんにちは。

頭記についてお伺いさせて下さい。

■システム構成
・ファイル検索サーバ:1台(Windows Server 2012上のfess+elasticsearch(非商用))
・検索対象のファイルサーバ:3台

現在、社内でのナレッジ共有を目的とし、上記構成のファイル検索システムを構築中です。検索対象ファイル数 数千程度のテスト運用には成功したのですが、ファイル数 数万~十数万程度の本番規模でクロールをかけたところ、一週間弱待ってもクロールが完了しなかったため、一旦中断させました。

上記への対処について、2点お伺いさせて下さい。

  1. クロールのジョブ分割
    以下の2つのケースについて、クロール時間の総量に差異はありますでしょうか。
    (1) ファイル数1万件のジョブ10個
    (2) ファイル数10万件のジョブ1個
    ファイル数が少ないジョブほど早く完了するということは理解しているのですが、目標のファイル数に対し、ジョブをより細かく分割することによってクロール時間の総量が短縮されたりするのでしょうか。

  2. 更新のあったファイルのみを対象としたクロール
    以下のスライドP.18に、「ファイルサーバの更新ファイル一覧生成機能と連携」という記述がありました。
    https://www.slideshare.net/shinsuke/fess-atsolrmeetup14
    上記について、差分クロールとは異なり、indexingだけでなくクロールの対象範囲自体を絞る方法が存在すると理解しました。この理解が正しければ、初回クロールに何日・何週間とかかることに目を瞑れば、以降はデイリーでクロールをかけても現実的な時間内に処理が完了するように思います。
    しかし、ファイルサーバの「更新ファイル一覧生成機能」というものが具体的にどのようなもので、fessからどう利用できるのかが探し出せませんでした。上記を実現するためのヒントをいただけますでしょうか。

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

(1) ファイル数1万件のジョブ10個
(2) ファイル数10万件のジョブ1個

この程度であれば、大差はないと思います。

商用での提供であれば、クロール対象が数百万ファイル以上あるような場合は、更新ファイル一覧を元にクロールすることで対応しています。この記事にあるようなCsvLisDataStoreを利用します。ただ、数万〜十数万程度であれば、一日の夜間クロールだけで終わるような気もするので、普通にクロールさせて対応してしまうようにも思います。

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

数百万規模でも扱えるのですね、心強いです。今は一塊のフォルダだけをクロール対象に想定していますが、設定がうまくいけば規模を拡大していきたいです。

CsvListDataStoreを利用する場合、以下のアクションとファイルパスをセットでCSVファイルに書き出す必要があるようですが、このCSVファイルを書き出すのは連携システム側(NAS等)の役目と理解しました。

create:ファイルが作成された
modify:ファイルが更新された
delete:ファイルが削除された

ただ、CSVファイルを書き出すために夜間バッチ等の別プロセスを立ててファイルを総なめしてしまったら、結局時間がかかってしまう気がします。その辺りは、かしこく差分抽出をやってくれる機能がNAS自体に備わっている前提ということでしょうか。

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

NASをご利用のお客様でログ吐き出せないというケースは遭遇したことがないですね。Windowsをファイルサーバーとして利用されている場合には、商用提供ではファイル更新イベントから更新一覧を作るソフトウェアを提供して対応しています。更新ファイル一覧はバッチ的に生成されるものではなく、ファイルの更新イベントを元にログ的に作られるものです。数千万ファイルあるようなファイルサーバーでもこの仕組みで、特に問題にはなっていないです。

Windowsをファイルサーバとして利用しています。NASにはそのような機能があるのが普通なのですね、不勉強でした。

更新ファイル一覧はイベントドリブンで少しずつ成長するものとのこと、また、商用では左記のためのS/Wが提供されるとのことで、よく理解できました。

fessの要求フォーマットに合わせて更新ファイル一覧を書き出すS/Wを自製するか、商用を利用させていただくか検討したいと思います。

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