前々からサイト内検索機能を実装したいと思っていました。せっかく情報発信しているのに、訪れてくれた方に勝手に探せというのも不親切だし、最近は blog のほうしか更新していないので、過去の記事を探すのは大変だと思いました。
そこで、Namazu を使ったサイト内検索を構築しました。
PC Linux で Namazu を使ったサイト内検索は構築したことがあり、玄箱用にコンパイルすれば大丈夫だと思っていました。
たしかに大丈夫だったのですが、漢字コードの問題で日本語検索が出来るようになるまでに二日ほどかかってしまいました。
今回コンパイルしたもの
libiconv-1.10-ja-1.patch.gz
darts-0.2.tar.gz
chasen-2.3.3.tar.gz
ipadic-2.6.3.tar.gz
kakasi-2.3.4.tar.gz
Text-Kakasi-1.05.tar.gz
namazu-2.0.17.tar.gz
1、それぞれのコンパイル、インストール
・libiconv
./configure & make & make install
・darts
chasen に必要
./configure & make & make install
・chasen
./configure にパラメータをつけないとだめ。
./configure --with-darts=/usr/local/include --with-libiconv=/usr/local/lib
make & make install
なお、chasen で shift-jis を扱うためには、chasenrc も shift-jis で記述する必要があります。
・ipadic
玄箱の漢字コードが shift-jis なので shift-jis 用の辞書を用意する。
具体的には、アーカイブを展開してできた *.dic、*.cha を sift-jis に変換し、./configure した後の Makefile で makemat と makeda に "-i s" オプションを付ける。
・kakasi
./configure & make & make install
・Test::kakasi
perl Makefile.PL & make & make install
・namazu
./configure にパラメータをつける。
./configure --with-libiconv-prefix=/usr/local
make & make install
2、インデックス作成。
mknmzrc を適切に修正する。
$ADRESS とか。この中で、kakasi の文字コードについては、
$KAKASI = "module_kakasi -isjis -oeuc -w";
とすること。"-isjis -osjis -w" としたことで日本語検索できるまでに時間がかかってしまった。Namazu は内部コード euc で動いているようで、形体素解析の出力を shift-jis にするとうまくインデックスが作成されず、日本語検索が失敗します。
chasen をインストールはしましたが、内部コードが euc ということで、shift-jis をデフォルトコードにした 玄箱では使えませんでした。chasen 単体では、shift-jis を扱えますが、漢字の入出力のコードを別々に指定する方法が見つからず、インデックスがうまく作成できませんでした。
3、ホームページへ Namazu の CGI を設置。
本当は、日本語の形体素解析には chasen を使いたかったのですが仕方ないようです。chasen 単体での使用では問題ありませんでした。
MeCab はコンパイルエラーとなったのでインストールしていません。gcc のバージョンが古い所為だと思います。
自動でインデックスの作成をするように cron に登録しました。
近いうちに、blog のテンプレートを変更し blog のページからも検索できるようにしたいと思っていますが、今は
サイトのトップページに検索用のフォームを置いています。