概要
データベースコネクタは、JDBC対応のリレーショナルデータベースからデータを取得して Fess のインデックスに登録する機能を提供します。
この機能には fess-ds-db プラグインが必要です。
対応データベース
JDBC対応のすべてのデータベースに対応しています。主な例:
MySQL / MariaDB
PostgreSQL
Oracle Database
Microsoft SQL Server
SQLite
H2 Database
前提条件
JDBCドライバーが必要です
データベースへの読み取りアクセス権が必要です
大量のデータを取得する場合、適切なクエリ設計が重要です
JDBCドライバーのインストール
JDBCドライバーを lib/ ディレクトリに配置します:
# 例: MySQLドライバー
cp mysql-connector-java-8.0.33.jar /path/to/fess/lib/
Fess を再起動してドライバーを読み込みます。
設定方法
管理画面から「クローラー」→「データストア」→「新規作成」で設定します。
基本設定
| 項目 | 設定例 |
|---|---|
| 名前 | Products Database |
| ハンドラ名 | DatabaseDataStore |
| 有効 | オン |
パラメーター設定
MySQL/MariaDBの例:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC
username=fess_user
password=your_password
sql=SELECT id, title, content, url, updated_at FROM articles WHERE deleted = 0
PostgreSQLの例:
driver=org.postgresql.Driver
url=jdbc:postgresql://localhost:5432/mydb
username=fess_user
password=your_password
sql=SELECT id, title, content, url, updated_at FROM articles WHERE deleted = false
パラメーター一覧
| パラメーター | 必須 | 説明 |
|---|---|---|
driver | はい | JDBCドライバーのクラス名 |
fetch_size | いいえ | JDBCフェッチサイズ。MySQLのストリーミング結果セットには MIN_VALUE を指定 |
url | はい | JDBC接続URL |
username | いいえ | データベースユーザー名 |
password | いいえ | データベースパスワード |
sql | はい | データ取得用のSQLクエリ |
default_mimetype | いいえ | BLOB抽出時のデフォルトMIMEタイプ |
info.* | いいえ | 追加のJDBC接続プロパティ(例: info.ssl=true) |
column_label.* | いいえ | BLOB抽出時のカラムメタデータマッピング(例: column_label.mimetype=content_type でMIMEタイプ列を指定) |
readInterval | いいえ | 行間の処理遅延(ミリ秒)。デフォルト: 0 |
script_type | いいえ | スクリプトエンジンの種類。デフォルト: groovy |
スクリプト設定
SQLの列名をインデックスフィールドにマッピングします:
url="https://example.com/articles/" + id
title=title
content=content
lastModified=updated_at
利用可能なフィールド:
<column_name>- SQLクエリの結果列(カラムラベル名でアクセス)
SQLクエリの設計
効率的なクエリ
大量のデータを扱う場合、クエリのパフォーマンスが重要です。 SQLはそのままデータベースに送信されます(パラメーターバインドは行われません):
SELECT id, title, content, url, updated_at
FROM articles
WHERE updated_at >= '2024-01-01 00:00:00'
ORDER BY id
差分クロール
更新されたレコードのみを取得する方法:
# 更新日時でフィルタリング
sql=SELECT * FROM articles WHERE updated_at >= '2024-01-01 00:00:00'
# IDによる範囲指定
sql=SELECT * FROM articles WHERE id > 10000
URLの生成
ドキュメントのURLはスクリプトで生成します:
# 固定パターン
url="https://example.com/article/" + id
# 複数フィールドの組み合わせ
url="https://example.com/" + category + "/" + slug
# データベースに格納されたURLを使用
url=url
マルチバイト文字対応
日本語などのマルチバイト文字を含むデータを扱う場合:
MySQL
url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8
PostgreSQL
PostgreSQLは通常UTF-8がデフォルトです。必要に応じて:
url=jdbc:postgresql://localhost:5432/mydb?charSet=UTF-8
セキュリティ
データベース認証情報の保護
警告
パスワードを設定ファイルに直接記述することはセキュリティリスクがあります。
推奨される方法:
環境変数を使用
Fess の暗号化機能を使用
読み取り専用ユーザーを使用
最小権限の原則
データベースユーザーには必要最小限の権限のみを付与します:
-- MySQLの例
CREATE USER 'fess_user'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT ON mydb.articles TO 'fess_user'@'localhost';
使用例
製品カタログの検索
パラメーター:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/shop
username=fess_user
password=password
sql=SELECT p.id, p.name, p.description, p.price, c.name as category, p.updated_at FROM products p JOIN categories c ON p.category_id = c.id WHERE p.active = 1
スクリプト:
url="https://shop.example.com/product/" + id
title=name
content=description + " カテゴリ: " + category + " 価格: " + price + "円"
lastModified=updated_at
ナレッジベース記事
パラメーター:
driver=org.postgresql.Driver
url=jdbc:postgresql://localhost:5432/knowledge
username=fess_user
password=password
sql=SELECT id, title, body, tags, author, created_at, updated_at FROM articles WHERE published = true ORDER BY id
スクリプト:
url="https://kb.example.com/article/" + id
title=title
content=body
digest=tags
author=author
created=created_at
lastModified=updated_at
トラブルシューティング
JDBCドライバーが見つからない
症状: ClassNotFoundException または No suitable driver
解決方法:
JDBCドライバーが
lib/に配置されているか確認ドライバーのクラス名が正しいか確認
Fess を再起動
接続エラー
症状: Connection refused または認証エラー
確認事項:
データベースが起動しているか
ホスト名、ポート番号が正しいか
ユーザー名、パスワードが正しいか
ファイアウォール設定
クエリエラー
症状: SQLException やSQLシンタックスエラー
確認事項:
SQLクエリを直接データベースで実行してテスト
列名が正しいか確認
テーブル名が正しいか確認
参考情報
データストアコネクタの概要 - データストアコネクタ概要
CSVコネクタ - CSVコネクタ
JSONコネクタ - JSONコネクタ
データストアクロール - データストア設定ガイド