🔍

Fessでエクセル設計書の中を検索しよう!~Fess基本編~

2024/02/23に公開

概要

この記事では、全文検索サーバーFessを利用するための方法を説明します。
導入方法については前記事である導入編を参考にしてください。
導入編では「サーバーの設定」から「初期ユーザーでのログイン」までの説明をしています。
https://zenn.dev/0_0/articles/49df0adb83fb66

タイトルではエクセル設計書をあげていますが、通常のテキストファイルや他のオフィス文書ファイル、そしてPDFなど扱える内容は多いのでエクセル設計書に限らずにお読みください。

経緯

導入編が長くなりすぎたため記事を分割しました。

ターゲット

  • エクセルなどのオフィス文書やPDFなどの文書ファイルから検索をしたい人
  • Google検索のような検索エンジンを作りたい人

ゴール

全体のゴール

  • エクセルの中も検索できるようにする

今回記事のゴール

  • 自分のパソコンに保存されているファイルを検索できるようにする

特定のフォルダを検索できるようにする

さっそくですが、特定のフォルダを検索するための設定を行っていきましょう。

Fessで検索をするために必要な設定は次の通りです

  • 検索対象、方法を決める
  • 検索のインデックスを作成するためのルールを設定をする
  • ジョブを作成する
  • ジョブを実行する

検索対象、方法を決める

今回はFessの基本を理解してもらうため、方法は「Fessをインストールしているパソコンの中の特定のフォルダ」を対象とします。

今回は検索できることが確かめれば十分なので、D:\targetフォルダを検索対象として説明をしようと思います。

今回の記事では下記のサイトでエクセルファイルを作成しました。
個人情報が入ったエクセルを検索できるようにするというのはなかなかセキュリティ的にどうなのだという事案ですが、これをエクセル設計書と見立てて進めていきましょう。
https://testdata.userlocal.jp

作成したファイルはすべて同じD:\targetフォルダ直下に入れました。
実際は子フォルダまでファイルチェックが行われるため、運用に近いフォルダ構造で試してみるのもよいでしょう。

検索のインデックスを作成するためのルールを設定をする(ファイルのクロールを設定)

検索対象のフォルダをFessに登録してみましょう。

画面の右上のユーザー名を押下するとメニューが開くので、「管理」を開きましょう。

ダッシュボードが開くので左のメニューから「クローラー」→「ファイルシステム」を開きます。

ファイルのクロール画面が開きます。
クロールとは、ソフトウェアが情報収集をするために対象を巡回する処理をいいます。
Webの界隈では「ロボット」や「巡回ロボット」と呼ばれているアプリケーションのことですね。

右上の「新規作成」からクロールを登録しましょう。

設定画面が開いたらパスとパーミッションの設定を変更します。

項目名 設定値
パス file:/D:/target
パーミッション {role}guest
{role}admin

パスは今回検索対象とするフォルダのパス。file:/プロトコルを頭につけ、パスの区切り文字を円記号(バックスラッシュ)\ではなく、スラッシュ/に変更しましょう。

パーミッションは先ほどの検索画面でクローラの情報を利用できる範囲を指定します。改行で複数を指定するができます。
とりあえず今回はテストなので、ログインの有無にかかわらず利用できるように{role}guest{role}adminを区切って入れておきましょう。

他の設定を今回は変更する必要はありません。
入力ができたら「作成」を押下してください。

作成したクロール設定が表示されていることを確認しましょう。

ジョブを作成する

作成したクロール設定をクリックすると、設定の詳細が表示されます。

設定の一番下までスクロールすると「新しいジョブの作成」ボタンがあるので、押下します。

ジョブ画面が開きます。
この画面ではクロールを定期的に実行するかなどの設定をすることができますが、今回は詳細を設定する必要はありません。
名前だけわかりやすいものに変更し、一番下までスクロールして「作成」を押下します。

ジョブスケジューラ画面に遷移し、一覧には作成したジョブが表示されています。

クロールを実行する

作成したジョブをクリックすると、ジョブの詳細が表示されます。

「今すぐ開始」を押下して最初に登録したクロールを実行します。
開始するとジョブスケジューラ画面に戻るのですが、メッセージが出る割に「OK」とだけ表示されています。

実際のところは更新(F5)すると処理が実行されている最中であるのがわかると思います。

これが再び「OK」になるとクロール処理が完了、検索ができる状態になりました。

先に本当に登録されているのか確認してみましょう。
左のメニューから「システム情報」→「クロール情報」を開きます。

一覧にはクロールした結果が登録されているので、一覧をクリックして詳細を開きます。

ここに記載されている「クロールの実行時間」はミリ秒なので、38秒かかったのがわかると思います。
遅いようにも思えますが、一度に処理する時間を絞っているのでここはあとでクロール設定を変更してみましょう。

セッションIDのリンクを押下すると、クロールで検出したファイルが表示されます。

読み込めていますね。
エクセルの中身も表示されているので、Fessに読み込まれたことがわかります。

検索して確かめてみる

さあいよいよ、検索してみましょう。
画面右上のメモ帳みたいなマークを押下すると、検索画面に戻れます。

適当に「田中」と検索してみます。

ヒットしました。

今回の検索ではエクセルに限りましたが、ワードなどのオフィスファイルやPDFも検索してくれます。

実行結果が「失敗」になる場合は?

さてここに記載するに、私はあたりいろいろ設定をミスしてきました。
そのため、「システム情報」→「ジョブログ」を確認すると多くの「失敗」ログが出力されています。

この画面では一覧をクリックすると選択したログの結果まで詳細に表示されるはずなのですが、多くの場合「Crawler Process terminated.(クローラの処理が終わらされました)」と表示されます。

この場合、クローラの実行ログを確認するしかありません。
左のメニューから「システム情報」→「ログファイル」を開き、「fess.log」を開いてみましょう。
エラーになった原因がJava流のスタックトレースで確認できます。

あるいはサーバーを開くことができるのであれば、Fessのインストールフォルダ内のlogsフォルダにfess.logが出力されているので、そちらを確認しましょう。

Cannot run program "java"

ありえそうなエラーとして「Cannot run program "java"」が見つかる場合があります。

Caused by: java.io.IOException: Cannot run program "java" (in directory "D:\service\fess\fess-14.11.1\app"): CreateProcess error=2, 指定されたファイルが見つかりません。
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[?:?]
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[?:?]
	at org.codelibs.fess.helper.ProcessHelper.startProcess(ProcessHelper.java:69) ~[classes/:?]

これは環境変数PATHにJavaのパスが登録されていないことが原因です。
導入編で詳しく解説していますので、そちらをご確認してみてください。
https://zenn.dev/0_0/articles/49df0adb83fb66

ここまで検索ができるようになるまでの手順の解説をしてきました。

実際の運用を考えるとこれだけではまだまだ不十分ですが、まず設計書の中を開けるようにするという第一段階の目標は達成し、活用するためのきっかけになったではないかと思います。

また近いうちにFessを深堀して、いろいろな設定をして紹介したいと思います。
ではまた。

Discussion