全文検索システム「Estraier」+「MeCab」の導入

「Estraier」と「ChaSen」の組み合わせでは文字コードがUTF-8の場合利用できないので、代わりに「MeCab」を利用する。
ここでは
/var/www/html/
以下のすべてを検索対象ディレクトリとし、転置インデックスを
/var/www/estraier/
に作成するものとする。
なお、「Apache」の設定は完了済みとする。

「Estraier」のインストール

「libiconv」のインストール

まず、「libiconv」をインストールするが、この時日本語のパッチも適用する。

[root@CentOS ~]# mkdir /usr/local/src/libiconv <= 作業用ディレクトリの作成
[root@CentOS ~]# chmod 777 /usr/local/src/libiconv <= 作業用ディレクトリのパーミッション変更
[root@CentOS ~]# exit <= 一般ユーザになる
[root@CentOS ~]$ cd /usr/local/src/libiconv <= 作業用ディレクトリへ移動
[kaz@CentOS libiconv]$ wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.10.tar.gz
 <= 「libiconv」のソースをダウンロード
[kaz@CentOS libiconv]$ wget http://www2d.biglobe.ne.jp/~msyk/software/libiconv/libiconv-1.10-ja-1.patch.gz
 <= 「libiconv」のパッチをダウンロード
[kaz@CentOS libiconv]$ tar xzf libiconv-1.10.tar.gz <= ダウンロードしたファイルの展開
[kaz@CentOS libiconv]$ cd libiconv-1.10 <= 展開したディレクトリに移動
[kaz@CentOS libiconv-1.10]$ gzip -dc ../libiconv-1.10-ja-1.patch.gz | patch -p1
[kaz@CentOS libiconv-1.10]$ ./configure | tee configure.log 2>&1
[kaz@CentOS libiconv-1.10]$ make | tee make.log 2>&1 <= コンパイル
[kaz@CentOS libiconv-1.10]$ su <= スーパーユーザになる
Password: <= パスワードの入力
[root@CentOS libiconv-1.10]# make install | tee make-install.log 2>&1 <= インストール

「MeCab」のインストール

[root@CentOS ~]# mkdir /usr/local/src/mecab <= 作業用ディレクトリの作成
[root@CentOS ~]# chmod 777 /usr/local/src/mecab <= 作業用ディレクトリのパーミッション変更
[root@CentOS ~]# exit <= 一般ユーザになる
[root@CentOS ~]$ cd /usr/local/src/mecab <= 作業用ディレクトリへ移動
[kaz@CentOS mecab]$ wget http://jaist.dl.sourceforge.net/sourceforge/mecab/mecab-0.90.tar.gz
 <= 「MeCab」のソースをダウンロード
[kaz@CentOS mecab]$ tar xzf mecab-0.90.tar.gz <= ダウンロードしたファイルの展開
[kaz@CentOS mecab]$ cd mecab-0.90 <= 展開したディレクトリに移動
[kaz@CentOS mecab-0.90]$ ./configure --enable-utf8-only | tee configure.log 2>&1
[kaz@CentOS mecab-0.90]$ make | tee make.log 2>&1 <= コンパイル
[kaz@CentOS mecab-0.90]$ su <= スーパーユーザになる
Password: <= パスワードの入力
[root@CentOS mecab-0.90]# make install | tee make-install.log 2>&1 <= インストール

「mecab-ipadic」のインストール

「MeCab」が利用する辞書の「mecab-ipadic」をインストールする。

[kaz@CentOS ~]$ cd /usr/local/src/mecab <= 作業用ディレクトリへ移動
[kaz@CentOS mecab]$ wget http://jaist.dl.sourceforge.net/sourceforge/mecab/mecab-ipadic-2.7.0-20060707.tar.gz
 <= 「mecab-ipadic」のソースをダウンロード
[kaz@CentOS mecab]$ tar xzf mecab-ipadic-2.7.0-20060707.tar.gz <= ダウンロードしたファイルの展開
[kaz@CentOS mecab]$ cd mecab-ipadic-2.7.0-20060707 <= 展開したディレクトリに移動
[kaz@CentOS mecab-ipadic-2.7.0-20060707]$ ./configure --with-charset=utf8 | tee configure.log 2>&1
[kaz@CentOS mecab-ipadic-2.7.0-20060707]$ /usr/local/libexec/mecab/mecab-dict-index -f euc-jp -t utf-8
 <= UTF-8の辞書に再構築
[kaz@CentOS mecab-ipadic-2.7.0-20060707]$ su <= スーパーユーザになる
Password: <= パスワードの入力
[root@CentOS mecab-ipadic-2.7.0-20060707]# make install | tee make-install.log 2>&1 <= インストール

「Estraier」のインストール

[root@CentOS ~]# mkdir /usr/local/src/estraier <= 作業用ディレクトリの作成
[root@CentOS ~]# chmod 777 /usr/local/src/estraier <= 作業用ディレクトリのパーミッション変更
[root@CentOS ~]# exit <= 一般ユーザになる
[kaz@CentOS ~]$ cd /usr/local/src/estraier <= 作業用ディレクトリへ移動
[kaz@CentOS estraier]$ wget http://estraier.sourceforge.net/estraier-1.2.29.tar.gz
 <= 「Estraier」のソースをダウンロード
[kaz@CentOS estraier]$ tar xzf estraier-1.2.29.tar.gz <= ダウンロードしたファイルの展開
[kaz@CentOS estraier]$ cd estraier-1.2.29 <= 展開したディレクトリに移動
[kaz@CentOS estraier-1.2.29]$ ./configure --enable-regex --enable-dlfilter --enable-mecab | tee configure.log 2>&1
[kaz@CentOS estraier-1.2.29]$ make | tee make.log 2>&1 <= コンパイル
[kaz@CentOS estraier-1.2.29]$ su <= スーパーユーザになる
Password: <= パスワードの入力
[root@CentOS estraier-1.2.29]# make install | tee make-install.log 2>&1 <= インストール
「Estraier」の実行

転置インデックス格納先ディレクトリの作成

[root@CentOS ~]# mkdir /var/www/estraier

「Estraier」の新規実行

「Estraier」を新規に実行する場合は以下のようにする。

[root@CentOS ~]# estindex register /var/www/estraier/crimson-snow /var/www/html <= 転置インデックスの作成
[root@CentOS ~]# estindex relate /var/www/estraier/crimson-snow <= 転置インデックスに関連文書検索用のスコア情報を追加

「Estraier」の実行

ページに更新があった後、「Estraier」を実行する場合は以下のようにする。

[root@CentOS ~]# estindex purge /var/www/estraier/crimson-snow <= サイトから削除された文書を転置インデックスからも削除
[root@CentOS ~]# estindex register /var/www/estraier/crimson-snow /var/www/html <= 転置インデックスの作成
[root@CentOS ~]# estindex optimize /var/www/estraier/crimson-snow <= 転置インデックスの更新で生じた不要な情報を削除
[root@CentOS ~]# estindex relate /var/www/estraier/crimson-snow <= 転置インデックスに関連文書検索用のスコア情報を追加
「Estraier」の設置

設定ファイル等格納先ディレクトリの作成

[root@CentOS ~]# mkdir /var/www/cgi-bin/estraier

各種ファイルのコピー

[root@CentOS ~]# cp /usr/local/libexec/estsearch.cgi /var/www/cgi-bin/estraier/estsearch.cgi
[root@CentOS ~]# cp /usr/local/share/estraier/locale/ja/estsearch.conf /var/www/cgi-bin/estraier/estsearch.conf
[root@CentOS ~]# cp /usr/local/share/estraier/locale/ja/estsearch.tmpl /var/www/cgi-bin/estraier/estsearch.tmpl
[root@CentOS ~]# cp /usr/local/share/estraier/locale/ja/estsearch.top /var/www/cgi-bin/estraier/estsearch.top

「Estraier」の設定

[root@CentOS ~]# vi /var/www/cgi-bin/estraier/estsearch.conf <= 設定ファイルの編集
indexname: casket
↓
indexname: /var/www/estraier/crimson-snow <= 転置インデックスを指定

prefix: ./
↓
#prefix: ./ <= コメントアウト

replace:
↓
replace: /var/www/html/ http://www.crimson-snow.net/ <= 検索対象ディレクトリの置換

ブラウザで
http://サーバのIPアドレス/cgi-bin/estraier/estsearch.cgi
とアクセスする。

サイト内に設置する場合

サイト内に検索用のFORMを設置する場合、設置したい場所に以下の内容を記述。

<FORM method="get" action="/cgi-bin/estraier/estsearch.cgi">
  <DIV>
    <INPUT type="text" name="phrase" value="" size="64" tabindex="1" />
    <INPUT type="submit" value="Search" tabindex="2" />
    <INPUT type="hidden" name="enc" value="UTF-8" />
  </DIV>
</FORM>
転置インデックスの自動作成&不要データ削除
[root@CentOS ~]# vi /root/estraier.sh <= 転置インデックスの自動作成&不要データ削除スクリプト作成
#!/bin/sh

ESTINDEX='/usr/local/bin/estindex'

$ESTINDEX purge /var/www/estraier/crimson-snow > /dev/null 2>&1
$ESTINDEX register /var/www/estraier/crimson-snow /var/www/html > /dev/null 2>&1
$ESTINDEX optimize /var/www/estraier/crimson-snow > /dev/null 2>&1
$ESTINDEX relate /var/www/estraier/crimson-snow > /dev/null 2>&1


[root@CentOS ~]# chmod 744 /root/estraier.sh <= 作成したスクリプトに実行権限付加

スクリプトの自動実行

[root@CentOS ~]# crontab -e <= 設定ファイルの編集
00 03 * * * /root/estraier.sh <= 追加(毎日3:00にスクリプト実行)
▲ページのトップへ