ウェブサーバ - サイト内全文検索 - Site Search - 設置・カスタマイズ

 
1. 基本的な設置
2. apache の設定
3. CGI のカスタマイズ
4. CSS の取り込み
5. index.html の設定
6. 運用

1. 基本的な設置

 一式を置く場所としてウェブサーバにひとつディレクトリを作っておいた方がいいかと思います。  わたしは CGI を直接たたくのでなく、html 越しにたたこうと思ったので以下のような構成にしました。
オリジナル 設置先 パーミッション備考
ajax.search.html index.html 644 -rw-r--r--
index.cgi index.cgi 755 -rwxr-xr-x
init.cgi init.cgi 644 -rw-r--r--
search.cache.cgi search.cache.cgi 777 -rwxrwxrwx
search.log.match.cgi search.log.match.cgi 777 -rwxrwxrwx
search.log.not.match.cgi search.log.not.match.cgi 777 -rwxrwxrwx
sitesearch.js sitesearch.js 644 -rw-r--r--

2. apache の設定

 ここでは apache24 を前提に設定しています。  apache の設定ファイルのうち
/usr/locac/etc/apache24/Include/ファイル名.conf
 で前項のファイル設置場所のディレクトリ定義を行っておきます。

<Directory "/ファイル設置場所のパス">
        Options -Indexes +Followsymlinks +Includes +ExecCGI
        Allowoverride   All
        Require all granted
</Directory>
 2行目の +ExecCGI が必須になります。  3~4行目はサイトの設定に合わせます。  設定が終わったら、ファイルの確認とウェブサーバの再起動を忘れないように。

> service apache24 configtest
> service apache24 restart

3. CGI のカスタマイズ

index.cgi
 をカスタマイズします。  変更するのは前半のわずかな部分のみ

#!/usr/bin/perl

## 京
use Encode;
require './init.cgi';
&_GET;

my(@keys) = split(/ /,$_GET{'q'});

## int
$totime = time();

if((-f $config{'cache'}) && (((stat($config{'cache'}))[9] + 60 * $config{'expiration'})  > $totime)){
	## Load Cache
	@pages = &_LOAD($config{'cache'});
}
else{
	## Create Cache
	push @dirs,$config{'dir'};
	while($cnt < @dirs){
		$dir = $dirs[$cnt];
		opendir DH, $dir or die "$dir:$!";
		while (my $file = readdir DH) {
			next if $file =~ /^\.{1,2}$/;
			$currentpath = $dir . $file;
			if(-d $currentpath && (grep(/^${file}$/,@excluded_dirs_name)) == 0){
				push @dirs, "${currentpath}/";
			}
			elsif((split(/\./,$currentpath))[-1] =~ /htm/si){
				$html = join("",&_LOAD($currentpath));
				$html =~ s/\t//ig;
				$html =~ s/\r//ig;
				$html =~ s/\n//ig;
				my ($tilte,$snippet,$keywords,$contents,$thumbnail);
				if($html =~ /<title>(.*?)<\/title>/si){
					$title = $1;
					if($title =~ /$config{'title_regex'}/){
						$title = $1;
					}
				}
				if($html =~ /<meta.*?name=\"Description\".*?content=\"(.*?)\"/si){
					$snippet = $1;
				}
 まず先頭行は FreeBSD では

#!/usr/local/bin/perl
 と書き直します。  それとこれはわたしだけの事情ですが、本サイトではタイトルを html ファイルの <title> タグからとってこれないので、代わりに <h1>、<h2>、<h3> からとってくるようにします。  35~40行を以下のように書き換えています。

				$title = '';

				if($html =~ /<title>(.*?)<\/title>/si){
					$title = $1;
					if($title =~ /$config{'title_regex'}/){
						$title = $1;
					}
				}

				if ($title eq '')
				{
					if($html =~ /<h1>(.*?)<\/h1>/si){
						$title = $1;
						if($title =~ /$config{'title_regex'}/){
							$title = $1;
						}
					}
				}

				if ($title eq '')
				{
					if($html =~ /<h2>(.*?)<\/h2>/si){
						$title = $1;
						if($title =~ /$config{'title_regex'}/){
							$title = $1;
						}
					}
				}

				if ($title eq '')
				{
					if($html =~ /<h3>(.*?)<\/h3>/si){
						$title = $1;
						if($title =~ /$config{'title_regex'}/){
							$title = $1;
						}
					}
				}
 次に
init.cgi
 をカスタマイズします。  これは詳細に関しては、マニュアルに詳しく書かれていますので省略します。

4. CSS の取り込み

 CSS ファイルは
sitesearch.css
 というものが用意されていますが、ファイルを多くしたくないので、もともと設置してある SCSS ファイルの中にすべて取り込みました。

5. index.html の設定

 用意されている
ajax.search.html
 を
index.html
 にファイル名変更してオリジナルの

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<meta http-equiv="Content-Script-Type" content="text/javascript" />
		<meta http-equiv="Content-Style-Type" content="text/css" />
		<title>サイト内検索Ajaxモードサンプル</title>
		<link rel="stylesheet" href="sitesearch.css" type="text/css" />
		<script type="text/javascript" src="sitesearch.js"></script>
	</head>
	<body>
		<form class="sitesearch" method="get" action="index.cgi" onsubmit="return sitesearch(this);">
			<input type="text" name="q" value="" /> <input type="submit" value="サイト内検索" />
		</form>
		<!--検索結果が出力されるオブジェクトのIDはsearch_resultで固定-->
		<div id="search_result">

		</div>
	</body>
</html>
 の特にヘッダ部分を書き換えました。

6. 運用

 でまぁ、設置したのが「検索」のページです。  出来栄えは、どうぞ、ご確認ください。