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

全文検索システムとしては「Namazu」が有名であるが、その他にもいくつかあり、 ここでは「Namazu」にも劣らない「Estraier」を導入する。
また、分かち書きには「ChaSen」を利用する。
ここでは
/var/apache2/htdocs/
以下のすべてを検索対象ディレクトリとし、転置インデックスを
/var/apache2/estraier/
に作成するものとする。
なお、「Apache」の設定は完了済みとする。

「Estraier」のインストール

「Darts」のインストール

まず、「ChaSen」を導入するが、「ChaSen」の導入に必要な「Darts」をインストールする。

Solaris# mkdir /usr/local/src/darts <= 作業用ディレクトリの作成
Solaris# chmod 777 /usr/local/src/darts <= 作業用ディレクトリのパーミッション変更
Solaris# exit <= 一般ユーザになる
Solaris% cd /usr/local/src/darts <= 作業用ディレクトリへ移動
Solaris% wget http://www.chasen.org/~taku/software/darts/src/darts-0.3.tar.gz
 <= 「Darts」のソースをダウンロード
Solaris% gunzip -c darts-0.3.tar.gz | tar xf - <= ダウンロードしたファイルの展開
Solaris% cd darts-0.3 <= 展開したディレクトリに移動
Solaris% ./configure |& tee configure.log
Solaris% gmake |& tee make.log <= コンパイル
Solaris% su <= スーパーユーザになる
Password: <= パスワードの入力
Solaris# gmake install |& tee make-install.log <= インストール

「libiconv」のインストール

次に、「libiconv」をインストールするが、この時日本語のパッチも適用する。
また、パッチの適用においてはGNUのpatchが必要である。

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

「ChaSen」のインストール

以下の場合、dartsdic.cppをそれぞれ変更する。
・「Darts」のバージョンが0.3の場合(当サイトの場合)、71行目を変更する。バージョン0.2では必要なし。
・gccのバージョンが3.4.3以降の場合、180行目を変更する。
また、180行目を変更した場合、169,183,188行目をコメントアウトしないと「ipadic」のインストール時にセグメント例外になる。

Solaris# mkdir /usr/local/src/chasen <= 作業用ディレクトリの作成
Solaris# chmod 777 /usr/local/src/chasen <= 作業用ディレクトリのパーミッション変更
Solaris# exit <= 一般ユーザになる
Solaris% cd /usr/local/src/chasen <= 作業用ディレクトリへ移動
Solaris% wget http://chasen.naist.jp/stable/chasen/chasen-2.3.3.tar.gz
 <= 「ChaSen」のソースをダウンロード
Solaris% gunzip -c chasen-2.3.3.tar.gz | tar xf - <= ダウンロードしたファイルの展開
Solaris% cd chasen-2.3.3 <= 展開したディレクトリに移動
Solaris% vi lib/dartsdic.cpp
darts->setArray(cha_mmap_map(da->da_mmap)); <= 71行目
↓
darts->set_array(cha_mmap_map(da->da_mmap)); <= 変更

(const char*)keys[size] = key.data(); <= 180行目
↓
keys[size] = (char*)key.data(); <= 変更

std::cerr << entries->size() << " entries" << std::endl; <= 169行目
↓
/* std::cerr << entries->size() << " entries" << std::endl; */ <= コメントアウト

std::cerr << "Unexpected error at " << key << std::endl; <= 183行目
↓
/* std::cerr << "Unexpected error at " << key << std::endl; */ <= コメントアウト

std::cerr << size << " keys" << std::endl; <= 188行目
↓
/* std::cerr << size << " keys" << std::endl; */ <= コメントアウト

Solaris% ./configure --with-libiconv=/usr/local |& tee configure.log
Solaris% gmake |& tee make.log <= コンパイル
Solaris% su <= スーパーユーザになる
Password: <= パスワードの入力
Solaris# gmake install |& tee make-install.log <= インストール

「ipadic」のインストール

Solaris# mkdir /usr/local/src/ipadic <= 作業用ディレクトリの作成
Solaris# chmod 777 /usr/local/src/ipadic <= 作業用ディレクトリのパーミッション変更
Solaris# exit <= 一般ユーザになる
Solaris% cd /usr/local/src/ipadic <= 作業用ディレクトリへ移動
Solaris% wget http://chasen.naist.jp/stable/ipadic/ipadic-2.7.0.tar.gz
 <= 「ipadic」のソースをダウンロード
Solaris% gunzip -c ipadic-2.7.0.tar.gz | tar xf - <= ダウンロードしたファイルの展開
Solaris% cd ipadic-2.7.0 <= 展開したディレクトリに移動
Solaris% ./configure |& tee configure.log
Solaris% gmake |& tee make.log <= コンパイル
Solaris% su <= スーパーユーザになる
Password: <= パスワードの入力
Solaris# gmake install |& tee make-install.log <= インストール

「Estraier」のインストール

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

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

Solaris# mkdir /var/apache2/estraier

「Estraier」の新規実行

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

Solaris# estindex register /var/apache2/estraier/crimson-snow /var/apache2/htdocs <= 転置インデックスの作成
Solaris# estindex relate /var/apache2/estraier/crimson-snow <= 転置インデックスに関連文書検索用のスコア情報を追加

「Estraier」の実行

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

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

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

Solaris# mkdir /var/apache2/cgi-bin/estraier

各種ファイルのコピー

Solaris# cp /usr/local/libexec/estsearch.cgi /var/apache2/cgi-bin/estraier/
Solaris# cp /usr/local/share/estraier/locale/ja/estsearch.conf /var/apache2/cgi-bin/estraier/
Solaris# cp /usr/local/share/estraier/locale/ja/estsearch.tmpl /var/apache2/cgi-bin/estraier/
Solaris# cp /usr/local/share/estraier/locale/ja/estsearch.top /var/apache2/cgi-bin/estraier/

「Estraier」の設定

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

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

replace:
↓
replace: /var/apache2/htdocs/ 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="EUC-JP" />
  </DIV>
</FORM>
転置インデックスの自動作成&不要データ削除
Solaris# vi /root/estraier.sh <= 転置インデックスの自動作成&不要データ削除スクリプト作成
#!/sbin/sh

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

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

スクリプトの自動実行

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