FSCrawlerを使用すると、ElasticsearchにPDFやMS Office形式のドキュメント (参考: サポート形式) を取り込むことができます。
watson-developer-cloudで Watson AssistantをElasticsearchと連携させる際のサンプル手順が公開されています。そこで使用されているFSCrawlerを実際に使ってみましたので、設定に使用するファイルの説明を中心にご紹介します。
注)2024年に試した内容のため、情報が古い可能性があることにご注意ください。
機能
FSCrawlerは、指定されたディレクトリー下に置かれたファイルを、指定されたElasticsearchのindexにインデックスします。取り込み対象のファイルなど、かなり細かい設定ができます。
取り込みたいデータを置いたコンピューター側でFSCrawlerを起動し、リモートのElasicsearchにデータをuploadするイメージです。
前提
FSCrawlerをDocker上で実行する場合
- Visual Studio Code をインストール済みであること
- Rancher Desktop が稼働していること
今回、Windows 11のWSL上で実行しました。WSLのインストールについてはこちらをご参照ください。
インストール
インストールはzipファイルを解凍する方法で行いました。zipファイルを解凍後、以下で説明する設定に関するファイルを編集します。
各ファイルの説明
1) _settings.yaml
ターゲットとなるElasticsearchのアクセス情報を定義します(<== をつけた行)
config/index名/_settings.yaml
---
name: "idx" <== index名
fs:
url: "/tmp/es"
update_rate: "15m"
indexed_chars: 100%
excludes:
- "*/~*"
json_support: false
filename_as_id: false
add_filesize: true
remove_deleted: true
add_as_inner_object: false
store_source: false
index_content: true
attributes_support: false
raw_metadata: false
xml_support: false
index_folders: true
lang_detect: false
continue_on_error: true
ocr:
language: "eng"
enabled: true
pdf_strategy: "ocr_and_text"
follow_symlinks: false
elasticsearch:
nodes:
- url: "https://a.b.c.d:port" <==
username: "" <==
password: "" <==
ssl_verification: false
上の例は、idx という名前のindexの場合の例です。別のindexを作りたい時は、次のようにします。
- config下に
index名のディレクトリーを作成し、_settings.yamlを作成 - _settings.yaml内のnameに
index名を設定
例) idx2を作る場合
- config/idx2 ディレクトリーを作成します。
- config/idx2/_settings.yaml ファイル内、name: "idx2" と設定します。
2) .env
クロールすべきディレクトリーを DOCUMENTS_DIRECTORY (<== をつけた行)に設定します。
FSCRAWLER_VERSION=2.10-SNAPSHOT
FSCRAWLER_PORT=8080
COMPOSE_PROJECT_NAME=fscrawler
DOCUMENTS_DIRECTORY=C:\Users\user01\Downloads\データ <==
3) docker-compose.yaml
FSCrawlerの対象のindexを指定します。 (<== をつけた行)
command fscrawler <対象index名> --restart --rest
---
version: "2.2"
services:
fscrawler:
image: dadoonet/fscrawler:${FSCRAWLER_VERSION}
container_name: fscrawler
restart: always
volumes:
- ${DOCUMENTS_DIRECTORY}:/tmp/es:ro
- C:\Users\user01\Downloads\fscrawler-docker-config\config:/root/.fscrawler
- C:\Users\user01\Downloads\fscrawler-docker-config\logs:/usr/share/fscrawler/logs
ports:
- ${FSCRAWLER_PORT}:8080
command: fscrawler idx --restart --rest <== "idx"を対象とするindex名で置き換えます。
まとめ: 何かを変更したい時、変更すべきファイル
-
index名を変更したい時
- _settings.yaml (その前に
config/index名のディレクトリーを作成します) - docker-compose.yaml
- _settings.yaml (その前に
-
ターゲットのElasticsearchを変更したい時
- _settings.yaml
-
クロールするドキュメントが格納されているディレクトリーを変更したい時
- .env
実行
VS Code で、Terminal > New Terminal をクリックし、右下にターミナルを開きます。fscrawler-docker-config ディレクトリーにいることを確認します。
docker compose upを実行します。バックグラウンドで実行したい場合は -d オプションを指定します。
初回実行時に、FSCrawlerコンテナーイメージがダウンロードされます。
実行イメージ:

参考