管理用APIとは

管理用APIはFessが提供する管理操作用のRESTful APIのことで、Fessの設定をHTTPリクエスト経由で行うことができます。

クローラ設定や辞書設定など、Fessの管理画面で設定できるものはほとんどが管理用APIからも設定することができます。外部のアプリケーションからFessの設定を変更したい場合などに便利です。

今回はクロールとスケジューラの設定を作成しながら管理用APIについて紹介します。

Fessの管理機能自体の説明は管理者ガイドを参照してください。HTTPリクエストで送るパラメータの説明や、今回紹介していない設定項目についてはI/Fガイドの/api/admin/などを参照してください。

以降の説明では、Fessの環境が構築済みであるものとして説明します。

管理用APIを使うための準備

管理用APIを使うためには、まずFessの管理画面でアクセストークンを作成します。

Fessの管理画面の「システム」>「アクセストークン」から右上の「新規作成」をクリックして、 以下のように設定してアクセストークンを発行します。

項目名 設定値
名前 Test
パーミッション  {role}admin-api

アクセストークンの設定

名前は任意の値で問題ありませんが、管理用APIにアクセスするためには admin-api ロールが必要になります。

生成されたアクセストークンを確認するためには、アクセストークンの一覧ページから作成した設定をクリックして「トークン」の欄に表示されている値を保存しておきます。

アクセストークン

ここで取得したアクセストークンを使用すれば、管理者としてログインしなくても設定を変更できてしまうため、アクセストークンの管理には注意してください。

今回は取得したアクセストークンの値が access_token であると仮定します。

クローラ設定

クローラ設定ではクロールを実行するための設定を登録できます。

ここでは例としてFessの公式サイトをクロールする設定を登録します。

まずはウェブクロール設定をJSON形式で以下のように記述します。I/Fガイドのannotations欄でRequiredとあるものは必ずHTTPリクエストのボディ部分に含める必要があります。

json
{
   "name":"Fess : https://fess.codelibs.org/",
   "description":"Enterprise Search Server: Fess",
   "urls":"https://fess.codelibs.org/",
   "included_urls":"https://fess.codelibs.org/.*",
   "user_agent":"Mozilla/5.0",
   "num_of_thread":1,
   "interval_time":10000,
   "boost":1.0,
   "available":true,
   "sort_order":0
}

次にPUTメソッドで上記のJSONを管理用APIでFessに送信します。

アクセストークンはAutorizationリクエストヘッダーで指定します。curlコマンド内の access_token は管理画面で取得したアクセストークンに置き換えて実行してください。

$ curl -H "Authorization: access_token" -XPUT "http://localhost:8080/api/admin/webconfig/setting" -d '{"name":"Fess : https://fess.codelibs.org/","description":"Enterprise Search Server: Fess","urls":"https://fess.codelibs.org/","included_urls":"https://fess.codelibs.org/.*","user_agent":"Mozilla/5.0","num_of_thread":1,"interval_time":10000,"boost":1,"available":true,"sort_order":0}'

以下のようなJSONレスポンスが返却されます。

{"response":{"id":"webconfig_id","created":true,"version":"13.1","status":0}}

created フィールドがtrue、status フィールドが0(0は正常終了)となっていれば、登録に成功しています。id フィールドの文字列がこのクローラ設定のIDとなります。ここでは webconfig_id に置き換えています。

ウェブクロール設定のAPI以外にファイルクロール設定のAPIデータストアクロール設定のAPIなども用意されています。

各種設定情報の登録は上記と同様な方法で操作できます。

スケジューラ

スケジューラではクローラなどの各種ジョブの実行スケジュールを管理できます。

以下のコマンドでスケジューラに登録されているジョブの一覧を取得します。

$ curl -H "Authorization: access_token" -XGET "http://localhost:8080/api/admin/scheduler/settings"

以下のようなJSONレスポンスが返却されます。

json
{
   "response":{
      "settings":[
         {
            "running":false,
            "id":"default_crawler",
            "version_no":-1,
            "name":"Default Crawler",
            "target":"all",
            "cron_expression":"0 0 * * *",
            "script_type":"groovy",
            "script_data":"return container.getComponent(\"crawlJob\").logLevel(\"info\").execute(executor);",
            "crawler":"true",
            "job_logging":"true",
            "available":"true",
            "sort_order":0
         },
         ...(省略)...
      ],
      "total":10,
      "version":"13.1",
      "status":0
   }
}

settings には現在、登録されているジョブの情報が含まれます。標準で登録されているジョブを確認することができます。

次にスケジューラAPIを利用して、さきほど登録したウェブクロール設定のジョブを登録します。

登録するジョブの設定はJSON形式で以下のように記述します。ここではクロールジョブを実行する時刻を毎日12時とし、ジョブに登録するウェブクロール設定のIDは webconfig_id であるものとします。

json
{
   "name":"Fess : https://fess.codelibs.org/",
   "target":"all",
   "cron_expression":"0 12 * * *",
   "script_type":"groovy",
   "script_data":"return container.getComponent(\"crawlJob\").logLevel(\"info\").sessionId(\"webconfig_id\").webConfigIds([\"webconfig_id\"] as String[]).fileConfigIds([] as String[]).dataConfigIds([] as String[]).jobExecutor(executor).execute();",
   "sort_order":0,
   "crawler":true,
   "job_logging":true,
   "available":true
}

作成したJSONテキストをPUTメソッドで送信して、スケジューラにジョブを作成します。

$ curl -H "Authorization: access_token" -XPUT "http://localhost:8080/api/admin/scheduler/setting" -d '{"name":"Fess : https://fess.codelibs.org/","target":"all","cron_expression":"0 12 * * *","script_type":"groovy","script_data":"return container.getComponent(\"crawlJob\").logLevel(\"info\").sessionId(\"webconfig_id\").webConfigIds([\"webconfig_id\"] as String[]).fileConfigIds([] as String[]).dataConfigIds([] as String[]).jobExecutor(executor).execute();","sort_order":0,"crawler":true,"job_logging":true,"available":true}'

以下のようなJSONレスポンスが返ってくれば成功です。

json
{"response":{"id":"(作成したジョブのID)","created":true,"version":"13.1","status":0}}
ここでは作成(PUT)する例を示しましたが、取得(GET)編集(POST)削除(DELETE)も同様に操作できます。

また、特定のジョブをすぐに実行したい場合には、

$ curl -H "Authorization: access_token" -XPOST "http://localhost:8080/api/admin/scheduler/(ジョブのID)/start"

とします。

*  *  *

今回はFessが提供する管理用APIについての具体的な使用例を紹介しました。今回紹介していない管理用APIを利用する際にも参考になると思います。

Fessを組み込みたい場合などに、管理APIを利用することで、Fessの機能を組み込んだシステムを構築することも可能です。

著者紹介

菅谷 信介 (Shinsuke Sugaya)

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