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