検索APIはFess 14.8から、OpenAPI仕様に準拠して提供されるようになりました。そのため、従来のJSON形式のAPIと比べて、いくつかの変更が加わっています。OpenAPI準拠の新しい検索APIに関する詳細は、検索APIガイドで確認することができます。

OpenAPIに対応することで、検索APIを利用するクライアント用コードを生成することができるため、Fessの検索と連携するシステムを開発しやすくなります。

今回は、検索APIに関するOpenAPIのYAMLファイルを使用して、JavaScriptのクライアント用コードを生成する方法について紹介します。生成されたクライアント用コードを利用して、検索クエリの送信や検索結果の取得方法を説明します。

クライアント用コードの作成

Fessから取得したJSON形式の検索結果をブラウザ上で表示する簡単な例を用いて説明していきます。JavaScript のクライアント用コードを生成するために、OpenAPI Generator を使用します。

OpenAPI Generatorのインストール

今回は、npmを使用して、OpenAPI Generatorをインストールします。npm以外の方法でインストールする場合は、Installationを参照してください。

次のコマンドを実行して、OpenAPI Generator をインストールします。

$ npm install @openapitools/openapi-generator-cli -g

HTMLファイルの作成

ブラウザ上で表示するために必要なHTMLファイルとJavaScriptファイルを作成します。

まず、作業用のディレクトリを作成して、以下の内容でindex.htmlを作成します。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <script src="bundle.js"></script>
  </head>
  <body>
    <script><!--
fess.search({
    q: 'api', // String | 検索語
    start: 0, // Number | 開始位置
    num: 10, // Number | 表示件数
    sort: 'score', // String | ソート条件
  }, (error, data, response) => {
    if (error) {
      alert(error);
    } else {
      document.getElementById("data").textContent = JSON.stringify(data);
    }
  });//--></script>
    <div id="data"></div>
  </body>
</html>

HTML内から検索条件を渡しています。指定する検索条件については、これから生成するクライアント用コード内のドキュメントを参照してください。

main.jsを以下の内容で作成してください。

const FessUserApi = require('fess_user_api');

module.exports = { "search": function(opts, callback) { let apiInstance = new FessUserApi.SearchApi(); apiInstance.apiClient.basePath = 'http://localhost:8080/api/v1'; apiInstance.searchDocuments(opts, callback); } }

main.js内でクライアント用コードを呼び出します。 クライアント用コードを使用するためのpackage.jsonファイルを以下のコマンドで生成します。

$ npm init -y

クライアント用コードの生成

以下のコマンドで、YAMLファイルをダウンロードします。

$ curl -O https://raw.githubusercontent.com/codelibs/fess/fess-14.8.0/src/main/config/openapi/openapi-user.yaml

今回はFess 14.8.0に接続しますが、利用しているFessのバージョンに合わせて、上記のURLに含まれるバージョンの文字列を変更してください。

OpenAPI Generatorを使用して、ダウンロードしたYAMLファイルからJavaScriptのクライアント用コードを生成します。以下のコマンドを実行して、fess_user_apiモジュールを作成します。 生成されたコードはclientディレクトリに出力されます。

$ openapi-generator-cli generate -i openapi-user.yaml -g javascript -o client

必要に応じて、生成するクライアント用コードをカスタマイズすることもできます。詳しくはOpenAPI Generatorの公式ドキュメントを参照してください。

利用方法等はclientディレクトリにあるREADME.mdを参照してください。

モジュールのインストール 

生成したクライント用コードのモジュールを以下のコマンドでインストールします。

$ npm install ./client

表示用JavaScriptファイルの作成  

今回は、browserifyを使用して、ブラウザ上でfess_user_apiモジュールを利用します。browserifyは以下のコマンドでインストールすることができます。

$ npm install -g browserify

HTMLファイルで使用するJavaScriptファイルを以下のコマンドで生成します。

$ browserify main.js --standalone fess > bundle.js

以上で、表示に必要なファイルが生成できました。

検索結果の表示  

http://localhost:8080/ でFessにアクセスできるようにしてから、index.htmlにアクセスしてください。 取得したJSON形式の検索結果がブラウザ上に表示されます。

index.html内のJavaScriptで、検索語などを指定しているので、必要に応じて、変更してみてください。

* * *

今回は、OpenAPI仕様に準拠したYAMLファイルからJavaScriptで使用するためのクライアント用コードを生成する方法を紹介しました。OpenAPI Generatorを使用することで、検索APIへのアクセスプログラムの作成が容易になりました。ぜひご活用ください。