【オプション】全文検索


仕組み

全文検索の仕組みを、簡単に説明する。
(SKIPでは、全文検索エンジンにHyperEstraierを用いる)

バックエンドでの動き

  1. SKIPのコンテンツ(ブログ、掲示板、コメントなど)を元に、静的HTML(キャッシュ)とメタ情報(閲覧権限など)を生成する。
  2. クローラがキャッシュを定期的に検索して、インデックスに登録する。

画面での動き

  1. 画面右上の検索欄に、検索ワードを入力する。
  2. 検索ワードを元に、検索エンジンがインデックスを検索する。
  3. メタ情報を使って、閲覧可能な結果だけにさらに絞り込む。
  4. 検索結果画面に、表示される。

0.前提

以下の想定で、手順を説明する(利用環境と合わない箇所は、適時読み替えること)

  • 文中の[〜]は、説明を参考に、各自の環境ごとに置き換える
  • 文中の[RAILS_ROOT]、[SKIP_URL]は、セットアップと同じ意味で使用する
  • 他の項目の具体例は、以下の通り。
  • [cache_dir] :キャッシュ保存ディレクトリ →例:/data/cache/skip : lighttpdの場合は [RAILS_ROOT]/tmp/caches
  • [cache_dir]_meta :メタ情報保存ディレクトリ →例:/data/cache/skip_meta
  • [master_dir] :ノードマスタ用ディレクトリ →例:/data/master
  • [crawl_dir]:クローラ用ディレクトリ →例:/data/waver
  • [install_dir]:hyperestraierをインストールしたディレクトリ →例:/usr/share/hyperestraier

1.インストール

yum

$ yum install hyperestraier hyperestraier-devel ruby-hyperestraier memcached xpdf wv xlhtml

gem

$ gem install memcache-client

rubypureのインストール

hyperestraierのバージョンを確認
$ yum list hyperestraier

同じバージョンのhyperestraierを以下サイトよりダウンロード、解凍
http://hyperestraier.sourceforge.net/index.ja.html

解凍後のディレクトリをに移動して、以下のコマンドを実行
$ cd rubypure/
$ ./configure
$ make
$ sudo make install


2.キャッシュを生成

キャッシュを生成する

$ mkdir [cache_dir]
$ cd [RAILS_ROOT]/lib
$ ruby batch_make_cache.rb -cache_path=[cache_dir] -all

SKIPにデータが存在すれば、
  • [cache_dir]ディレクトリ以下に、キャッシュデータ
  • [cache_dir]_metaディレクトリ以下に、にメタ情報
が生成されている。

定期的キャッシュ生成をcronに設定

 # 週次の全体キャッシュ再生成
 20 3 * * 7 ruby [
RAILS_ROOT]/lib/batch_make_cache.rb -all
 # 15分おきにキャッシュを生成
 10,25,40,55 * * * * [RAILS_ROOT]/batch_make_cache.rb
 # 削除されたファイルのキャシュを削除
 30 3 * * 7 ruby [RAILS_ROOT]/lib/batch_delete_cache.rb

キャッシュをHTTPで配信するWebサーバ起動

キャッシュは、HyperEstarierのWebクローラだけに公開する専用のWebサーバから配信する必要がある。
公開状態にしていると、SNS内の非公開データも公開されてしまうためである。

設定済みのlighttpd.confを同胞しているので、そちらの利用を推奨する。
詳しくは、lighttpdの章を参照。


3.インデックスを生成

インデックスを管理するノードマスタを設定する。

ノードマスタのインデックスを配置する

$ estmaster init [master_dir]

ノードマスタを起動する

$ estmaster start [master_dir]
※バックグラウンドで起動する場合、 bgオプションを付ける。

インデックスを作成する

$ estcall raw -auth admin admin 'http://localhost:1978/master?action=nodeadd&name=node1&label=NODE01'
結果に"OK"と表示されることを確認する。
※上記の例では、インストール直後のデフォルト(例:user:admin, password:admin)を利用している。
必要に応じて、 適切なユーザとパスワードを設定すること。



4.クローラを動かす

ノードマスタにキャッシュを検索して、インデックスに登録していくクローラの設定をする。

クロールする設定を行う

$ estwaver init [crawl_dir]

[crawl_dir]/_conf
を編集する

キャッシュのURLを指定する
 seed: 1.0|http://localhost:3000/cache/

付属のlighttpd.confを利用した場合 上記のように設定する

許可するURLを指定する
 allowrx: ^http://localhost:3000/cache/

付属のlighttpd.confを利用した場合 上記のように設定する

拒否するURLから pdf,doc,xls,pptを取り除く
 denyrx: \.(rtf|pdf|ps|eps|ai|doc|xls|ppt|sxw|sxc|sxi|xdw|jtd|oas|swf)$
                ↓             ↓
 denyrx: \.(rtf|ps|eps|ai|sxw|sxc|sxi|xdw|jtd|oas|swf)$

インデックに登録しないURLを指定する(ディレクトリはインデックスに登録しない)
 noidxrx: cache/.*/$

PDF, officeの変換ツールの設定を入れる
 typerule: ^application/pdf${{!}}H@[install_dir]/filter/estfxpdftohtml
 typerule: ^(application/msword|application/vnd.ms-(excel|powerpoint))${{!}}H@[install_dir]/filter/estfxmsotohtml

言語を日本語に設定する
 language: 1

revisit: で再度URLを訪れるまでの期間を1日に設定する
  revisit: 1d

nodeserv: で登録するノードサーバを設定する
  nodeserv: 1|http://admin:admin@localhost:1978/node/node1

定期クロールをcronに設定

 35 * * * * estwaver crawl -revcont [crawl_dir]



5.SKIP設定の変更

全文検索機能は、デフォルトではオフなので、以下を設定する。

全文検索機能を有効にする(画面右上の検索窓を表示する)

[RAILS_ROOT]/config/environment.rb
FULL_TEXT_SEARCH_SETTING = true

メタ情報を用いる

[RAILS_ROOT]/config/searchapps.yml

以下の箇所を変更する。
production:
  skip:
    cache: localhost:3000/cache # 付属のlighttpd.confを利用した場合 上記のように設定する
    meta:  [cache_dir]_meta
    condition_js: http://[SKIP_URL]/services/search_conditions.js
    title: SKIP
    order: 1