今回はアクセストークンを使った検索APIの利用方法を紹介します。アクセストークンを用いることで、閲覧権限がある対象だけを検索結果に表示することができます。検索APIについては本連載の第16回を参照してください。

なお、今回はFess 13.16.0を利用して説明します。

アクセストークンの作成

アクセストークンはFessの管理画面で作成します。

管理画面にログインして、左メニューから「システム」→「アクセストークン」を選択し、 画面右上の「新規作成」をクリックします。開かれた「アクセストークン」のページで、以下のようにパーミッションに「{role}fess」と入力して「作成」ボタンを押下すると、アクセストークンが作成されます。

各項目の説明は以下の通りです。

項目 説明
名前 作成するアクセストークンに対する名前
パーミッション パーミッションの設定(「{target}name」形式で、targetはuser、group、roleを指定)
パラメーター名 検索クエリーとしてパーミッションを指定する場合のリクエストパラメータ名を指定
有効期限 アクセストークンの有効期限を指定(空欄の場合は無期限)

作成したアクセストークンは、アクセストークンの一覧ページから作成した設定をクリックすると、「トークン」欄で確認することができます。検索する際に使うので、保存しておいてください。

今回はトークンによって検索結果が異なることを確認するため、「N2SM」という名前のアクセストークンも作成します。パーミッションには、「{role}n2sm」を設定しておいてください。

クロール設定

次に、クロール設定を作成します。

サイトのクロール設定は、管理画面の左メニューから「クローラー」→「ウェブクロール」で設定します。右上の「新規作成」ボタンをクリックし、必要な情報を入力したら「作成」ボタンをクリックして、クロール設定を登録してください。

今回は、それぞれのアクセストークンで検索結果が表示されるように、以下の2つのクロール設定を作成します。なお、パーミッション欄にデフォルトで入力されている「{role}guest」は、削除して登録してください。

Fess N2SM
名前 Fess N2SM
URL https://fess.codelibs.org/ja/ https://www.n2sm.net/
クロール対象とするURL https://fess.codelibs.org/ja/.* https://www.n2sm.net/.*
最大アクセス数 10 10
スレッド数 1 1
間隔 1000 ミリ秒 1000 ミリ秒
パーミッション {role}fess {role}n2sm

全般の設定

検索APIを利用してJSON形式で検索結果を取得する場合は、「全般の設定」でJSONレスポンスが有効になっている必要があります。

管理画面の左メニューから「システム」→「全般」で設定画面を開き、「JSONレスポンス」が有効になっていることを確認してください。もし有効になっていない場合は、チェックボックスにチェックを入れて「更新」ボタンをクリックしてください。

検索

設定が終わったら、検索リクエストにアクセストークンを付けて検索してみましょう。 アクセストークンは Autorization リクエストヘッダーに指定して検索します。

今回はcurlコマンドを使って検索してみます。

curlコマンドの引数で渡している「ACCESSTOKEN」の部分は、管理画面で作成/保存しておいたアクセストークンに置き換えて実行してください。

curl -H "Authorization: ACCESSTOKEN" "localhost:8080/json?q=fess"

パーミッションに「{role}fess」を指定したアクセストークンの検索結果は、以下のようなJSON形式で取得することができます。

{
  "response": {
    "version": "13.16",
    "status": 0,
    "q": "fess",
    "query_id": "30f0b70880bd4224ad637b7cd8a966ed",
    "exec_time": 0.06,
    "query_time": 16,
    "page_size": 10,
    "page_number": 1,
    "record_count": 10,
    "record_count_relation": "EQUAL_TO",
    "page_count": 1,
    "highlight_params": "&hq=fess",
    "next_page": false,
    "prev_page": false,
    "start_record_number": 1,
    "end_record_number": 10,
    "page_numbers": [
      "1"
    ],
    ・
    ・
    ・
    "result": [
      {
        "filetype": "html",
        "title": "オープンソース全文検索サーバー Fess",
        "content_title": "オープンソース全文検索サーバー <strong>Fess</strong>",
        "digest": "Docs » オープンソース全文検索サーバー Fess 商用でのご利用はこちら オープンソース全文検索サーバー Fess 概要 Fess (フェス) は「 5 分で簡単に構築可能な全文検索サーバー 」です。 Java 実行環境があれば...",
        "host": "fess.codelibs.org",
        "last_modified": "2021-11-15T02:29:30.000Z",
        "content_length": "23255",
        "timestamp": "2021-11-15T02:29:30.000Z",
        "url_link": "https://fess.codelibs.org/ja/",
        "created": "2021-11-15T09:00:09.313Z",
        "site_path": "fess.codelibs.org/ja/",
        "doc_id": "d6d3085b9b0347b5babdc06513d95b4d",
        "url": "https://fess.codelibs.org/ja/",
        "content_description": "オープンソース全文検索サーバー <strong>Fess</strong> 商用でのご利用はこちら オープンソース全文検索サーバー <strong>Fess</strong> 概要 <strong>Fess</strong> (<strong>フェス</strong>) は「 5...各種サポートサービス <strong>Fess</strong> Site Search CodeLibsプロジェクトでは <strong>Fess</strong> Site Search(<strong>FSS</strong>) を提供しています。...",
        "site": "fess.codelibs.org/ja/",
        "boost": "1.0",
        "mimetype": "text/html",
        "_id": "4e523032ba2dd7bfc69f43b5dac647fafd2ad14f180e1c3d4bffee8dc4f0ea3ff611506dffec93b8508ecf63322412252467e0f0865d5b070c2e5a2f2fa8b0f3"
      },
      ・
      ・
      ・

※ 上記は見やすいように整形済み。

次に、「{role}n2sm」を指定したアクセストークンで検索してみましょう。検索語は同じですが、アクセストークンの指定を変えたので、アクセストークンと紐付くロールのインデックスが返ってきます。

{
  "response": {
    "version": "13.16",
    "status": 0,
    "q": "fess",
    "query_id": "242fb1b6c78c4dddb63c67075d9854eb",
    "exec_time": 0.01,
    "query_time": 3,
    "page_size": 10,
    "page_number": 1,
    "record_count": 5,
    "record_count_relation": "EQUAL_TO",
    "page_count": 1,
    "highlight_params": "&hq=fess",
    "next_page": false,
    "prev_page": false,
    "start_record_number": 1,
    "end_record_number": 5,
    "page_numbers": [
      "1"
    ],
    ・
    ・
    ・
    "result": [
      {
        "filetype": "html",
        "title": "N2 Portal | N2SM, Inc.",
        "content_title": "N2 Portal | N2SM, Inc.",
        "digest": "様々なビジネスニーズに対応可能なオープンソースベースのポータルサーバ",
        "host": "www.n2sm.net",
        "content_length": "22926",
        "timestamp": "2021-11-15T09:00:35.087Z",
        "url_link": "https://www.n2sm.net/products/n2portal.html",
        "created": "2021-11-15T09:00:35.087Z",
        "site_path": "www.n2sm.net/products/n2portal.html",
        "doc_id": "dda8d33af4ec49f58320a9d8f274f520",
        "url": "https://www.n2sm.net/products/n2portal.html",
        "content_description": "BIZMARKS麹町2F 製品 全文検索サーバー<strong>Fess</strong> N2 Search (<strong>Fess</strong>/Elasticsearch) N2 Robot...N2 SSO 製品一覧 全文検索サーバー<strong>Fess</strong> N2 Search (<strong>Fess</strong>/Elasticsearch) N2 Robot...",
        "site": "www.n2sm.net/products/n2portal.html",
        "filename": "n2portal.html",
        "boost": "1.0",
        "mimetype": "text/html",
        "_id": "bc573a14bbbee8e68f24036824dffdf9601efe0ddbe0a181c8bf4bccc75490585c728de3b1ddce6bfbbd8a7c533520424f9651ff560b94419c565d0fc9320bd6"
      },
      ・
      ・
      ・

* * *

第8回で紹介したロールベース検索では、ブラウザ上で検索結果を表示する際、閲覧権限に応じて検索結果を出し分ける方法について紹介しました。

今回はアクセストークンを利用することで、検索APIでロールベース検索を実現してみました。この仕組みを使うと、既存の業務システムと連携して検索結果を表示する、といったこともできるので、Fessの適用範囲が広がるはずです。ぜひ、利用してみてください。