TOPサーバ構築・運用> JBossとLuceneを使った検索システムを作る




JBoss EAP+Luceneによる全文検索システム
JBoss EAP+Luceneによる全文検索システム

第2回:検索プログラムを試してみよう!

著者:ロンウイット  関口 宏司   2007/11/1
前のページ  1  2  3  次のページ
検索プログラム

   上記のプログラムを実行してインデックスが作成できたら、次に商品検索を行うJSPを作成する。JSPの主要なコードを以下に示す。
<p><b>Yahoo! オークション 商品検索</b></p>
<form action="search.jsp" method="GET">
   <input type="text" name="q"/><input type="submit" value="検索"/>
</form>

<%
request.setCharacterEncoding( "UTF-8" );
String q = request.getParameter( "q" );
if( q == null || q.length() == 0 ) return;
%>

検索式 = [ <b><%=q%></b> ]<br><br>

<%
QueryParser parser = new QueryParser( FIELD, analyzer );
Query query = parser.parse( q );
Hits hits = searcher.search( query );
int len = hits.length();
%>

ヒット件数 = <b><%=len%></b> 件<br><br>

<%
if( len == 0 ) return;
%>

<table border="1" cellspacing="0" cellpadding="2">
<% for( int i = 0; i < len && i < PAGE_MAX; i++ ){
   Document doc = hits.doc( i );
   float score = hits.score( i );
%>
<tr>
   <td><%= i + 1 %></td>
   <td><%= score %></td>
   <td><%= doc.get( "title" ) %></td>
</tr>
<tr>
   <td colspan="3"><%= getSummary( query, doc.get( FIELD ) ) %></td>
</tr>
<% } %>
</table>

   HTMLのテキストボックスに入力された検索式は、GETパラメータ「q」にセットされてサーバに送られる。サーバは「q」から検索式を取得し、QueryParserクラスのparse()メソッドで検索式を解析してQueryオブジェクトを得る。

   そしてそのQueryオブジェクトをIndexSearcherクラスのsearch()メソッドの引数に渡すと検索が実行され、検索結果としてHitsのオブジェクトが得られる。Hitsから検索にヒットしたDocument(商品データ)やそのスコアを取得してHTMLのテーブル要素として表示している。

   なお、上記リストのgetSummary()は検索結果文書の要約文を取得するためのメソッドで、Luceneのcontribで提供されているHighlighterツールを使用して次のように実装されている。

private String getSummary( Query query, String text ) throws IOException {
 Scorer scorer = new QueryScorer( query, FIELD );
 Highlighter hl = new Highlighter( scorer );
 String fragment = hl.getBestFragment( analyzer, FIELD, text );
 return fragment == null ? "" : fragment;
}

   このJSPを実行した様子を図1に示す。

検索結果の表示
図1:検索結果の表示
(画像をクリックすると別ウィンドウに拡大図を表示します)

   検索結果として、商品のタイトルと検索キーワード(「扇風機」)が強調表示された商品説明の要約文がスコアと共に表示されているのがわかるだろう。

前のページ  1  2  3  次のページ


株式会社ロンウイット 関口 宏司
著者プロフィール
株式会社ロンウイット  関口 宏司
代表取締役社長
数社のITベンダー勤務を経て、2006年5月にロンウイット社を設立。オープンソースの全文検索エンジンLuceneとSolrを企業システムに導入する支援事業を展開している。「Apache Lucene入門」(技術評論社)はじめ著書多数。

ロンウイット:http://www.rondhuit.com/
ブログ:http://lucene.jugem.jp/


INDEX
第2回:検索プログラムを試してみよう!
Yahoo!オークションの商品検索プログラム
  検索プログラム
  「次ページ」「前ページ」リンクの生成について