自分が作ったwordpressのサイトを、Hyper Estraierを使って全文検索できるようにした時のメモ。
結果から言うと、Hyper Estraierの設定自体はすごく簡単でした。
1. Hyper Estraierの利用ライブラリをインストール
http://fallabs.com/hyperestraier/intro-ja.htmlに記載されている以下をインストール
- libiconv : 文字コード変換。バージョン1.9.1以降(glibcにも同梱)。
- zlib : 可逆データ圧縮。バージョン1.2.1以降。
- QDBM : 組み込み用データベース。バージョン1.8.75以降。
libiconvのインストール
$ sudo yum -y install libiconv-devel
zlibのインストール
$ sudo yum -y install zlib-devel
QDBMのインストール
$ sudo wget http://qdbm.sourceforge.net/qdbm-1.8.77.tar.gz $ tar zxvf qdbm-1.8.77.tar.gz $ cd qdbm-1.8.77 $ ./configure --enable-zlib $ make $ make install
2. Hyper Estraierのインストール
http://fallabs.com/hyperestraier/公式からソースをダウンロード
$ tar zxvf hyperestraier-1.4.13.tar.gz $ cd hyperestraier-1.4.13 $ ./configure --enable-mecab $ make $ make install
3. クローラーの準備
$ mkdir index $ estwaver init index
4. クローラーの設定
$ vim index/_conf
#クロールするサイトのURLを指定 # seed documents (weight and URL) seed: 1.0|http://path.to.domain/ #対象サイト内のみでのクロール # allowing regular expressions of URLs to be visited allowrx: ^http://path.to.domain/ # 日本語サイトのクロールなので1にする # preferred language (0:English, 1:Japanese, 2:Chinese, 3:Korean, 4:misc) language: 1
5. クローラーを動かしてみる
$ estwaver crawl -revcont index/ 2012-10-15T12:37:51Z INFO DB-EVENT: status: name=index//_index dnum=10246 wnum=13630 fsiz=44759342 crnum=0 csiz=0 dknum=0 2012-10-15T12:37:51Z INFO crawling started (revcont) 2012-10-15T12:37:51Z INFO fetching: 0: http://path.to.domain/ 2012-10-15T12:37:52Z INFO ignored: 301: http://path.to.domain/ 2012-10-15T12:37:52Z INFO waiting for threads: 0 2012-10-15T12:37:52Z INFO waiting for threads: 0 2012-10-15T12:37:52Z INFO crawling finished 2012-10-15T12:37:52Z INFO DB-EVENT: closing: name=index//_index dnum=10246 wnum=13630 fsiz=44759342 crnum=0 csiz=0 dknum=0 2012-10-15T12:37:52Z INFO finished successfully
なんか301リダイレクトされている。。
6. 原因を探ってみる
wgetだとちゃんとhtmlを取得しているようなので、クローラーは問題ないはず。
ということで、wordpressの内部を見てみた。
index.phpから順にたどっていくと、/wp-includes/template-loader.phpの以下あたりでリダイレクトされているらしい
if ( defined('WP_USE_THEMES') && WP_USE_THEMES ) do_action('template_redirect');
で、さらに探ってみると
/wp-includes/canonical.php
の46行目の$_SERVER['HTTP_HOST']のあたりが怪しい。。
クロールしてるときにどんな値をとっているのかわからないが、すでにサーバのドメインはわかっているので、ハードコーディングしてみる。
if ( !$requested_url ) { // build the URL in the address bar $requested_url = is_ssl() ? 'https://' : 'http://'; $requested_url .= 'path.to.domain'; $requested_url .= $_SERVER['REQUEST_URI']; }
7. もう一度試してみる
$ estwaver crawl -revcont index/ 2012-10-15T13:16:21Z INFO DB-EVENT: status: name=index//_index dnum=10246 wnum=13630 fsiz=44759342 crnum=0 csiz=0 dknum=0 2012-10-15T13:16:21Z INFO crawling started (revcont) 2012-10-15T13:16:21Z INFO fetching: 0: http://path.to.domain/ 2012-10-15T13:16:21Z INFO seeding: 1.000: http://path.to.domain/ . . 2012-10-15T13:16:21Z INFO crawling finished 2012-10-15T13:16:21Z INFO DB-EVENT: closing: name=index//_index dnum=10246 wnum=13630 fsiz=44759342 crnum=0 csiz=0 dknum=0 2012-10-15T13:16:21Z INFO finished successfully
正常にクロールできた。
8. 確認してみる
$ estcmd search -vs index/_index "サンプル" --------[02D18ACF07171840]-------- VERSION 1.0 NODE local HIT 53+ HINT#1 サンプル 53+ TIME 0.000197 DOCNUM 54 WORDNUM 2789 VIEW SNIPPET . . .
ちゃんと検索できてるっぽい。
とりあえずクロールまではこれで完了。
次はGUIの方を作ってみる。