SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Fessで作るApache Solrベースの全文検索サーバー

Fessで作るApache Solrベースの検索サーバー
~ REST API編

jQueryベースの検索サイトを作ろう!

REST APIを利用した検索サイトの構築

 今回はFessのREST APIを利用したサイトを構築する方法を説明します。FessサーバーとのやりとりにはJSON応答を利用します。今回利用するFessサーバーはFessプロジェクトでデモ用として公開しているFessサーバーを利用しています。もし、独自のFessサーバーを利用したい場合はFess 4.0.0をインストールしてください。Fess 4.0.0以降でJSONPがサポートされています。

JSONとJSONP

 Ajaxの利用時に注意すべきセキュリティモデルとしてSame-Originポリシーがあります。これにより、ブラウザで表示するHTMLを出力するサーバーとFessサーバーが同じドメインに存在する場合はJSONを利用することができますが、異なる場合はJSONPを利用する必要があります。FessのREST APIでは、JSON応答でリクエストパラメータにcallbackキーで値を渡すことでJSONPを利用することができます。

Same-Originポリシー。(b)の場合はFessが返す検索結果(JSON)が別ドメインになるためJSONPを利用する必要があります。
Same-Originポリシー。(b)の場合はFessが返す検索結果(JSON)が別ドメインになるためJSONPを利用する必要があります。

 今回はHTMLが置いてあるサーバーとFessサーバーが異なるドメインにある場合で話を進めます。そのため、JSONPを利用した例になりますが、同じドメインで良い場合はリクエストパラメータからcallbackを取り除いてください。

作成するファイル

 今回はHTML上でJavaScriptを利用して検索処理を実装します。JavaScriptのライブラリとしてjQueryを利用しています。Ajaxなどの処理などもjQueryで簡単に実装することができます。作成するファイルは以下のものになります。

  • 検索フォームと検索結果を表示するHTMLファイル「index.html」
  • Fessサーバーと通信するJSファイル「fess.js」

 今回の構築例では以下の機能を実装しています。

  • 検索ボタンで検索リクエストの送信
  • 検索結果の一覧
  • 検索結果のページング処理

HTMLファイルの作成

 まず、検索フォームと検索結果を表示するHTMLを作成します。今回は理解しやすいようにCSSでデザインを調整などせずにシンプルなタグ構成にしてあります。利用するHTMLファイルは以下のものになります。

index.htmlの内容
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>検索サイト</title>
</head>
<body>
<div id="header">
  <form id="searchForm">
    <input id="searchQuery" type="text" name="query" size="30"/>
    <input id="searchButton" type="submit" value="検索"/>
    <input id="searchStart" type="hidden" name="start" value="0"/>
    <input id="searchNum" type="hidden" name="num" value="20"/>
  </form>
</div>
<div id="subheader"></div>
<div id="result"></div>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript" src="fess.js"></script>
</body>
</html>

 bodyタグ以下を見ていくと、まずはid属性がheaderのdivタグの箇所で、検索入力欄と検索ボタンが配置しています。また、hiddenフォームで表示開始位置(start)と表示件数(num)を保持しています。検索リクエスト送信後にJavaScriptでstartとnumの値は更新されます。ただし、表示件数は1ページあたりの表示件数であり、今回のサンプルコードでは表示件数を変更する機能はないので、numの値は変更されていません。また、検索フォームのサブミットについては、検索リクエストはAjaxで通信されるため、JavaScriptが有効になっている場合はこのフォームがページ遷移が発生する送信はされません。

 次のsubheaderのdivタグの箇所で検索にヒットした件数などの情報が表示されます。resultのdivタグでは検索結果およびページングリンクが表示されます。

 最後にjQueryのJSファイルと今回作成した「fess.js」のJavaScriptを読み込みます。jQueryのJSファイルを「index.html」と同じディレクトリに保存しても構いませんが、今回はGoogleのCDN経由で取得するようにしています。

次のページ
まとめ

この記事は参考になりましたか?

Fessで作るApache Solrベースの全文検索サーバー連載記事一覧

もっと読む

この記事の著者

菅谷 信介(スガヤ シンスケ)

N2SM, Inc.にソフトウェア・アーキテクトとして勤務。Apache Portalsにて、コミッター兼PMCとして活動。その他、Seasar Projectなどのオープンソースプロジェクトでコミッターとしても活動。オープンソース関連の活動をブログTwitterに投稿。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5667 2011/01/12 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー