この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
今回は全文検索をセットアップしてみました。
ColdFusionに付属するVerityとSolrは使わずにNamazuを使います。
セットアップした環境は以下の通りです。
プロダクト名 | バージョン | インストールディレクトリ |
---|---|---|
ColdFusion | version 9 | C:\ColdFusion9 |
Windows7 | Enterprise Edition | - |
kakasi | version 2.3.4 | C:\kakasi |
Active Perl | version 5.8.9 | C:\Perl |
Namazu | version 2.0.21 | C:\namazu |
まずは検索結果で使うnamazuのテンプレート(NMZ.result.normal.ja)を変更します。この変更は特に強制ではありませんが、自分にあったテンプレートに変更しています。
<dt>${namazu::counter}. <strong><a href="${uri}">${title}</a></strong> (スコア: ${namazu::score})</dt>
<dd>${summary}</dd>
<dd><a href="${uri}">${uri}</a> (${size} bytes)<br><br></dd>
次に検索結果で使うnamazuのテンプレート(NMZ.head.ja)を変更します。<head>の下に以下の一行を追加しました。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=Shift-JIS"> ←追加した行
<!-- LINK-REV-MADE -->
<title>Namazu: a Full-Text Search Engine</title>
・
・
・
次に検索結果で使うnamazuのテンプレート(NMZ.foot.ja)を変更します。</body>の上に一行を追加しました。
<dd><a href="../search.html">検索へ戻る</a></dd> ←追加した行
</body>
</html>
今回作ったアプリケーションはOfficeファイルをアップロードし、アップロードされたファイルをPDFに変換、更にPDFからTEXTだけを抽出して、そのTEXTファイルにてNamazuのインデックスファイルを作成する。という流れのWebアプリケーションを作っていますが、その一部のNamazuの部分だけを抜き出して記事にしています。
キーワード入力用のサンプルhtml(namazu.html)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang=ja>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
</head>
<body>
<form action="search_document.cfm" name="form1" method="post">
全文検索ワード<input type="text" name="keywordinput">
<input type="submit">
</form>
</body>
</html>
アクションページ側のサンプルcfml(search_document.cfm)IPアドレス(xxx.xxx.xxx.xxx)は適宜読み替えてください。
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Galleriffic | Thumbnail rollover effects and slideshow crossfades</title>
<link rel="stylesheet" href="css/basic.css" type="text/css" />
</head>
<body>
<cfset dic ="C:\namazu\var\namazu\index\cm">
<cfset out_file = "c:\temp\sample_result.html">
<cfset opt ="-h -U -o " & #out_file#>
<cfif not IsDefined("form.keywordinput")>
<cflocation url="http://xxx.xxx.xxx.xxx/sample/namazu.html">
</cfif>
<!--- 検索コマンド発行 --->
<cfexecute name="C:\namazu\bin\namazu.exe" arguments="#opt# #form.keywordinput# #dic#"></cfexecute>
<!--- 処理が早すぎてNamazu検索結果ファイル生成前にコマンドが発行されるので、スリープを150msで設定する --->
<cfset thread = CreateObject("java", "java.lang.Thread") />
<cfset thread.sleep(150) />
<!--- 吐き出されたHTMLを加工する --->
<cffile action="read" file="#out_file#" charset="shift_jis" variable="result_contents">
<!--- Namazuで吐き出された検索結果リストのURLをhttp://に置き換える --->
<cfset trance_result = replace("#result_contents#","/C|/inetpub/wwwroot/sample/text","http://xxx.xxx.xxx.xxx/sample/upload","All")>
<!--- 拡張子txtをpdfに置き換える --->
<cfset trance_result2 = replace("#trance_result#",".txt",".pdf","All")>
<cffile action = "write" attributes="normal" file ="C:\inetpub\wwwroot\sample\temp\sample_result.html" output ="#trance_result2#" charset="shift_jis">
<cflocation url="http://xxx.xxx.xxx.xxx/sample/temp/sample_result.html">
</body>
</html>
※mknmzrcの $MAX_FIELD_LENGTH の値を200から1024に設定変更しています。($MAX_FIELD_LENGTH = 1024;)
実行画面のスクリーンショット(キーワードを『検証』として検索)