データをExcelで管理したり、利用しているサービス内のデータをCSVファイルとしてダウンロードしたりと、CSVファイルを扱う場面は何かと多いと思います。Fessでは、CSVファイルをデータソースとしてクロール対象にすることが可能です。今回は、CSVファイルのクロール方法について説明します。

はじめに

CSVファイルは各フィールドをカンマ区切りで分けているテキストデータですが、Fessでは区切り文字を指定することでタブ区切りのTSVファイルもCSVファイルと同様に扱うことができます。また、設定を変えることによって、区切り文字以外のさまざまな形式にも対応が可能です。

FessのCSVファイルのクロールでは、各レコードを1つのドキュメントとしてインデックスを作成します。

今回はCSVファイルの内容からインデックスを作成する「CsvDataStore」と、CSVファイルに記述したパスをクロールする「CsvListDataStore」について説明していきます。

なお、解説にあたり、今回はFess-13.4.3を利用します。FessのZIPファイルはダウンロードページから入手してください。

CsvDataStore

まず、CsvDataStoreについて説明します。

CsvDataStoreでは、CSVファイルに記載した内容でインデックスを作成できるので、インデックスされたドキュメントのタイトルやURLなどを自由に設定することが可能です。

今回は、以下の内容のCSVファイルをクロールします。CSVファイルは「/home/taro/csv」ディレクトリに配置し、ファイルのエンコーディングは「Shift_JIS」で保存しています。

1,タイトル 1,テスト1です。
2,タイトル 2,テスト2です。
3,タイトル 3,テスト3です。
4,タイトル 4,テスト4です。
5,タイトル 5,テスト5です。
6,タイトル 6,テスト6です。
7,タイトル 7,テスト7です。
8,タイトル 8,テスト8です。
9,タイトル 9,テスト9です。

CsvDataStoreのクロール設定

Fessの起動後、管理画面にログインし、「クローラ」>「データストア」を開きます。画面右上にある「新規作成」をクリックし、データストアのクロール設定を開きます。今回は以下の4つの項目を設定し、それ以外の項目はデフォルトのまま進めます。

  • 名前
  • ハンドラ名
  • パラメータ
  • スクリプト

名前には任意のクロール設定の名前を入力し、ハンドラ名には「CsvDataStore」を選択してください。また、パラメータは次のように記述します。

directories=/home/taro/csv
fileEncoding=Shift_JIS

上記の通り、パラメータは「キー=値」形式で記述します。パラメータで設定するキーの詳細は、以下の通りです。

キー 説明
directories CSVファイルが含まれるディレクトリ(.csvまたは.tsv)
files CSVファイル(直接指定する場合)
fileEncoding CSVファイルのエンコーディング
separatorCharacter 区切り文字
quoteDisabled 囲い文字の無効化(デフォルトでtrue)
skipLines スキップする行数

「directories」でディレクトリを設定した場合は、ディレクトリ内のすべてのCSVファイル/TSVファイルがクロール対象になります。個別でクロールしたい場合は「files」でCSVファイルを直接指定してください。

「separatorCharacter」では、区切り文字を設定できます。カンマ以外が区切り文字になっている場合は、こちらで指定します。例えば、区切り文字がタブの場合は「separatorCharacter=\t」をパラメータに記述するといった具合です。

「quoteDisabled」は囲み文字を使用するかどうかを設定します。「quoteDisabled=false」とすると、クロール時にCSVファイルのデータ内に囲み文字がある場合それを省略します。囲み文字は、通常、ダブルクォーテーション「”」で表記されます。

「skipLines」では、指定した数までの行をクロール対象から除きます。例えば、「skipLines=1」と指定すると、CSVファイルの1行目がスキップされます。

スクリプトは次のように記述します。

url="http://localhost/" + cell1
host="localhost"
site="localhost"
title=cell2
content=cell3
cache=cell3
digest=cell3
anchor=
content_length=cell3.length()
last_modified=new java.util.Date()

スクリプトもパラメータと同様に「キー=値」形式で記述します。スクリプトで設定するキーの詳細については、以下を参照してください。

キー 説明
url URL(検索結果に表示されるリンク)
host ホスト名
site サイトパス
title タイトル
content ドキュメントのコンテンツ(インデックス対象文字列)
cache ドキュメントのキャッシュ(インデックス対象ではない)
digest 検索結果に表示されるダイジェスト部分
anchor ドキュメントに含まれるリンク(普通は指定する必要はありません)
content_length ドキュメントの長さ
last_modified ドキュメントの最終更新日時

スクリプト内の値はGroovyで記述します。文字列はダブルクォーテーションで閉じてください。また、CSVファイル内のデータはcell[数字]で保持しています(数字は1から始まります)。CSVファイルのセルにデータが存在しない場合はnullになる場合があるので注意してください。

クロールの実行

クロール設定登録後、「システム」>「スケジューラ」>「Default Crawler」から「今すぐ開始」をクリックします(クロールが完了するまで少し時間がかかります)。

クロール完了後、http://localhost:8080/にアクセスし、検索してみてください。以下のように検索結果が表示されます。

検索結果が表示される

CsvListDataStore

次に、CsvListDataStoreについて説明します。

CsvListDataStoreは大量のファイルをクロール対象とする場合などで利用できます。更新があったファイルのパスを書き込んだCSVファイルを配置して、指定されたパスだけをクロールさせることで、クロールの実行時間を短縮できるのが特徴です。

パスを記述する際のCSVファイルのフォーマットは以下になります。

[アクション]<区切り文字>[パス]

アクションには、以下のいずれかを指定します。

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

パスはファイルクロールでクロール対象のパスを指定するときと同じ表記でパスを記述します。例えば、「file:/[パス]」、または「smb://[パス]」のように指定します。

今回はローカルファイルをクロールするCSVファイルを以下の内容で作成します。

modify,file:/home/taro/data/testfile1.txt
modify,file:/home/taro/data/testfile2.txt
modify,file:/home/taro/data/testfile3.txt
modify,file:/home/taro/data/testfile4.txt
modify,file:/home/taro/data/testfile5.txt
modify,file:/home/taro/data/testfile6.txt
modify,file:/home/taro/data/testfile7.txt
modify,file:/home/taro/data/testfile8.txt
modify,file:/home/taro/data/testfile9.txt
modify,file:/home/taro/data/testfile10.txt

CsvListDataStoreのクロール設定

管理画面にログインし、「クローラ」>「データストア」を開きます。画面右上にある[「新規作成」をクリックし、データストアのクロール設定を開きます。今回は以下の4つの項目を設定し、それ以外の項目はデフォルトとします。

  • 名前
  • ハンドラ名
  • パラメータ
  • スクリプト

名前には任意のクロール設定の名前を入力し、ハンドラ名は「CsvListDataStore」を選択します。

パラメータは次のように記述します。directoriesに指定するのは、作成したCSVを配置しているパスです。

directories=/opt/fess/csvlist
fileEncoding=Shift_JIS

スクリプトの記述は以下の通りです。

event_type=cell1
url=cell2

クロールの実行

クロール設定の登録後、CsvDataStoreと同様に「システム」>「スケジューラ」>「Default Crawler」から「今すぐ開始」をクリックします。

クロールの完了後、http://localhost:8080/ にアクセスし、検索してみてください。以下のように検索結果が表示されます。

検索結果が表示される

* * *

今回は、CSVファイルのクロール方法について説明しました。CsvDataStoreを利用すると、連携システムにCSVダンプ機能のようなものがあればそれを取り込み、Fessと連携したシステムを構築することができるようになります。

また、CsvListDataStoreはクロール対象が多い場合にNASなどの更新ファイル一覧ログを出力させて、更新ファイルだけをクロールすることで、大規模システムの検索に対応できます。設定次第でさまざまな用途で利用できるはずです。

著者紹介

菅谷 信介 (Shinsuke Sugaya)

Apache PredictionIOにて、コミッター兼PMCとして活動。また、自身でもCodeLibs Projectを立ち上げ、オープンソースの全文検索サーバFessなどの開発に従事。