今回はデータベースに格納されたデータをクロールして検索する方法を紹介します。

データベースから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などの開発に従事。