Namazuのサイト検索を導入
このページの事。サイト上部のナビゲーションの右側にリンクがある。
今まで、サイト全体を検索する手法が無かったので、導入。…というか、このサイト始めた頃から導入しようとは思ってたんだけどね。今使ってるXREAサーバは、標準でNamazuが入ってるし。
じゃあ何故今まで使わなかったかと言えば、かつて使おうと思ったら初期設定で躓いたから。何故かインデックスファイルが作成できない。その理由が分からず延々と悩んでいた。
色々検索して、手順通りにやってみても上手くいかない。色々試行錯誤してみた結果、どうやらインデックス対象のページが多くて(これ作った段階で1000ぐらい)、インデックス作成の途中でサーバー側で強制的に止められていた様子。(ログを見ると、強制的に400ぐらいで止められている)
さて、これは困った。インデックスの更新チェックにかかる負荷は小さいので、一度インデックス作成さえしてしまえば、大規模なサイトを更新しない限り(多分)問題なく使えるみたいだけど、そのインデックスを作る手段が封じられてしまった。
解決法として、まずローカルでインデックスを作成する事を考えた。一応やってみたけど、こちらで環境を整えなければならない上、生成するHTMLファイルにはMovble Typeによって生成される物も多いので、一度ローカルに全ファイルを持ってこなくてはならず、面倒くさかった。しかも、これで作ったインデックスがパスの違い(Windows上で作成してた)で上手く動作しなかった…。しかし、今なら分かる。「NMZ.field.uri」を後から書き換えれば良かったんだろうなぁ、と。
まぁそれに気付いた頃には、既に次の手段に移行していたわけで。一気に大量のページをインデックス化するからサーバに止められてしまうのであれば、段階的にインデックスを作成すればいいのでは、と。そこで、以下のような手法を考えた。
まず、インデックスを作成するためのCGIを用意する。そこのmknmzの部分を以下のような感じに
for file in (リストが置かれたパス)/nmzlist*
do
/usr/local/bin/mknmz (コマンド省略) --target-list=${file}
>> /virtual/melog/namazu/make_index.log
done
次に、インデックスを作成するためのパスのリスト(インデックスに追加するファイル、またはディレクトリが書かれたパスを1行ずつ書いた物)を、nmzlistxx(整数)複数用意する。1つ目には、最低限の対象ページが書かれたファイル。このサイトの例で言えば
/virtual/melog/public_html/melog.info/introduction/
/virtual/melog/public_html/melog.info/works/
こんな感じ。その次のファイルは、そこから更に増やして
/virtual/melog/public_html/melog.info/introduction/
/virtual/melog/public_html/melog.info/works/
/virtual/melog/public_html/melog.info/archives/old/2003/06
/virtual/melog/public_html/melog.info/archives/old/2003/07
/virtual/melog/public_html/melog.info/archives/old/2003/08
/virtual/melog/public_html/melog.info/archives/old/2003/09
こんな感じ。その次のファイルは(以下全ファイルが対象になるまでリピート)。
ちなみに当たり前のことだけど、リストに書かれてない対象はインデックスから削除される
これでインデックスを作成!…と思ったら、やっぱり途中で止められた。よく考えたら、これじゃあ処理は分割された事にはならないのかな…。上手い手法だと思ったんだけどな。連続して処理させてるのが悪いんだろうけど、処理を止めるとかそういうやり方が分からない。
そこで、スクリプトはそのままにリストを手動で順番にアップロードするという手法に切り替える(笑)。まぁ、自分のサイトの場合は大体リストは7,8個ぐらいだったので、手動でも何とかなった。
こうして、検索用インデックスファイルを作成することができましたとさ。こんな手続き踏むぐらいなら、ローカルでインデックス作った方がいいと思った(笑)。
ただ、問題が一つ。アーカイブファイル等はたまに再構築されることがあり、こうしてできた検索では、更新日時がファイル作成日時と一致しないので、日付順に並べることがうまくできない、ということ。まぁその辺は妥協するしかないかな…。
追記
amazuのテンプレートは、どうして肝心な所に手を加えられないんだ!
検索結果メッセージの表示なんて、一番変更したい場所じゃないか。まぁそれだけならまだいい。何よりも許せなかったのは、何故検索結果リストを勝手に<dl>タグで囲うのか。それだと、その下には<dt>、<dd>タグしか使えないじゃないか。
コメントを残す