今回はデータベースに格納されたデータをクロールして検索する方法を紹介します。
データベースからSQLでデータを取得する際、言語処理が必要な条件で検索するような場合は、Fessを利用することで効率的にデータベース内のデータを検索することが可能です。また、FessはJDBCドライバが提供されているデータベースならばクロールして検索対象とすることができます。
データベースの設定
今回はMySQLのデータベースクロールを例にして紹介していきます。以下の設定のMySQLサーバを用意します。
項目 | 値 |
---|---|
url | mysql://localhost:3306 |
データベース名 | testdb |
ユーザー名 | hoge |
パスワード | fuga |
また、testdbに以下のようなテーブルを用意します。
CREATE TABLE doc (
id BIGINT NOT NULL AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
content VARCHAR(255) NOT NULL
PRIMARY KEY (id)
);
テーブルには以下のようにデータを入れておきます。
INSERT INTO doc (title, content) VALUES ('タイトル 1', 'コンテンツ 1 です.');
INSERT INTO doc (title, content) VALUES ('タイトル 2', 'コンテンツ 2 です.');
INSERT INTO doc (title, content) VALUES ('タイトル 3', 'コンテンツ 3 です.');
INSERT INTO doc (title, content) VALUES ('タイトル 4', 'コンテンツ 4 です.');
INSERT INTO doc (title, content) VALUES ('タイトル 5', 'コンテンツ 5 です.');
Fessの構築
次に、Fessを構築します。今回はFess-13.3.2を利用します。FessのZIPファイルはダウンロードページから入手することができます。
JDBCドライバのインストール
Fessを起動後、「管理画面のシステム」>「プラグイン」で「インストール」を押下して、プラグインのインストール画面を表示します。リモートタブで「mysql-connector-java-8.0.17」を選択し、「インストール」を押下するとMySQLのJDBCドライバがインストールされます。
プラグインのインストール |
一覧にないものをインストールする場合は、ローカルタブからファイルをアップロードしてインストールしてください。
クロール設定
ここからは、MySQLのデータベースクロールの設定を説明します。
Fessの管理画面にログインし、「クロール」>「データストア」で新規作成をします。 設定画面では以下の4項目を設定します。
- 名前
- ハンドラ名
- パラメータ
- スクリプト
名前には任意の文字列を入力してください。ハンドラ名は「DataBaseDataStore」に設定します。
今回のパラメータはデータベースの内容に合わせて、以下のように設定します。
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=UTF-8
username=hoge
password=fuga
sql=select * from doc
パラメータは「キー=値」形式となっています。キーの説明は以下です。
キー | 値 |
---|---|
driver | ドライバクラス名 |
url | データベースサーバのURL |
username | データベースに接続する際のユーザー名 |
password | データベースに接続する際のパスワード |
sql | クロール対象を得るためのSQL文 |
スクリプトは以下のように設定します。
url="http://your_server/" + id
host="localhost"
site="localhost"
title=title
content=content
cache=content
digest=content
anchor=
content_length=content.length()
last_modified=new java.util.Date()
スクリプトもパラメータと同様で「キー=値」形式となっています。各キーの説明は、以下の通りです。
キー | 値 |
---|---|
url | URL(ご利用の環境に合わせて、データにアクセス可能なURLを設定してください) |
host | ホスト名 |
site | サイトパス |
title | タイトル |
content | ドキュメントのコンテンツ(インデックス対象文字列) |
cache | ドキュメントのキャッシュ(インデックス対象ではない) |
digest | 検索結果に表示されるダイジェスト部分 |
anchor | ドキュメントに含まれるリンク(普通は指定する必要はありません) |
content_length | ドキュメントの長さ |
last_modified | ドキュメントの最終更新日 |
値は、Groovyとして処理されます。文字列はダブルクォーテーションで閉じてください。データベースのカラム名を変数として利用することができます。
指定する値は検索用にインデックスされるので要件に合わせて指定してください。
クロールの開始/検索の実行
クロール設定登録後、「システム」>「スケジューラ」>「Default Crawler」から「今すぐ開始」を押下します。クロールが完了するまでしばらく待ちます。
クロールが完了したら「http://localhost:8080/」にアクセスして、検索してみてください。以下のような検索結果が表示されるはずです。
* * *
今回は、Fessのデータベースクロール方法について説明しました。FessではJDBCドライバが提供されているデータベースであれば、MySQL以外のデータベースも同様の設定でクロールすることができます。ぜひ試してみてください。
著者紹介
菅谷 信介 (Shinsuke Sugaya)
Apache PredictionIOにて、コミッター兼PMCとして活動。また、自身でもCodeLibs Projectを立ち上げ、オープンソースの全文検索サーバFessなどの開発に従事。