MitakeSearchを設置してみる(2回目だが)


  • 公開:
  • 更新:
  • 編集:
概要 ▶ 日本HPのMitakeSearch(フリー版)を会社の数年前のマシンに導入して色々試しています。流石にWEBのデータを取得してインデックスを作成するインデクサは非常に荷が重いようですが、マニュアルによればインデクサを他のサーバーで動かしても問題はないようです。MitakeSearch V4.2はスポンサーURL検索機能というものが付いて、簡単に言えばGoogle AdWords(≠Google A
日本HPのMitakeSearch(フリー版)を会社の数年前のマシンに導入して色々試しています。流石にWEBのデータを取得してインデックスを作成するインデクサは非常に荷が重いようですが、マニュアルによればインデクサを他のサーバーで動かしても問題はないようです。

MitakeSearch V4.2はスポンサーURL検索機能というものが付いて、簡単に言えばGoogle AdWords(≠Google AdSense)を真似できるという機能です。デフォルト(初期設定)のままだとどちらかといえば、gooやYahoo!のようなスポンサー表示しかできませんが、Perlのプログラムと格闘できる気力があれば、Google AdWordsそっくりも可能ではないでしょうか。

ただ、自分と勤めている会社にスポンサーはいないので、そのような使い方は今のところできません。

そこで他の使い方を考えてみました。

Googleになくて他の検索エンジンサイトにある機能といえば「公式サイト」の表示かしら。gooでいえば「ぴったりgoo」などがそれにあたります。Googleにも「I'm Feeling Lucky」がありますけど、行ってみてからのお楽しみといことで実用的ではない気がします。Googleの遊び心なんだろうけどね。とにかく「これを探しているんじゃないの?」というものをこちらから意図的に表示できれば利便性が上がること間違いないと思いました。(検索結果から「探す」のが労力が掛かるから)

設定としては、スポンサーURL検索の設定ファイル(任意のファイル名)に自社のアドレスを書き込んで、mk-sponsor.plをするだけです。スポンサーURL検索表示のタイトル部分も、「SPONSOR」ではなく「あなたがお探しのページはこちらですか?」というタイトルに変更しました。これで「スポンサーURL検索」ではなく「ぴったりMitake」の完成です。

が、ここで問題点が発生。

私の設定でインデキシングをプライベートアドレス「192.168.x.x」から行っています(外部に表示するときにURLの変換機能を使って192.168.x.xをwww.xxx.xxxに変換している)。スポンサーURL検索の機能では表示されるタイトルやアブストラクトを既にインデキシングを行っているデータベース(DB)から取得する仕様になっているのです。表示したいアドレスは「www.xxx.xxx」なのに存在するデータベースは「192.168.x.x」しかないので、タイトルはURLで表示されるし、アブストラクトはNONEと表示されるし、散々です(汗)。

実はこれに気づくのに日本HPさんに「スポンサーURL検索機能が正常に動かないのですが…」などと恥ずかしい質問もしていたのですが、日本HPさんの超寛大な対応で(フリー版を使っているユーザーであるにも関わらず)ヒントを頂き、このしょうもないエラーに気づきました。ありがとう日本HPさん。そしてしょうもないエラーでごめんなさい。

実際にはスポンサーURL検索の設定ファイルの中の記述を少し加えるだけで解決する問題なのです。
スポンサーURL検索の設定ファイルの中に

0/(タイトル)
1/(検索キーワード)
2/(検索キーワード)

100/(アブストラクト)

と「0/」と「100/」を加えれば良いのです。(コマンドラインの)マニュアルには一言も書いていないのですが…。というかこれがわからないとスポンサーURL検索機能は使えないと思いました。たまたま私は社内のものを表示させようとしていたため、インデキシングを「www.xxx.xxx」で行っていたら何の問題もないのでしょうけれども、他のサイトはインデキシングをわざわざしないと表示されないということになるのですから…(データベースがないから)。

そんなわけで任意のタイトルとアブストラクトを表示できるようになり、一件落着なのですがとはいえ、ただ指をくわえて「スポンサーURL検索できない」と言っていたわけではありません。かなり無理矢理Perlを変更して一時的に対応していました。以下はその中身。

/home/MitakeSearch/cgi/lib/libsponsor.pl(linuxの場合)のプログラムの先頭部分に次の3行を追加します。(PerlモジュールのLWPなどを追加しておいて下さい)

use LWP::UserAgent; use HTTP::Request; use Jcode;
それでlibsponsor.plの中の

sub search_sponsor_mdbのサブルーチンの途中を以下のように改変。

local($res, @d, $click, $date); foreach $res (@out) { chop($res); @d = split(/\t/, $res); # $d[8] =~ s/^T=//; # title # $d[8] = $d[6] if ($d[8] eq 'NONE'); # $d[9] =~ s/^A=//; # abstract $click = &hex_url($d[6]); # $date = $d[0]; # $date =~ s/^(....)(..)/$1\.$2\./; #CGIでタイトル取得 my $url = $click; # ← ここに URL を入れる my $ua = new LWP::UserAgent; my $request = new HTTP::Request('GET', $url); my $response = $ua->request($request); my $title; if ($response->is_success) { $content = $response->content; if ($content =~ /<title>(.+)<\/title>/im) { $title = $1; } } $title = jcode($title,'sjis')->euc; $d[8] = $title; $r .= "<font size=\"2\"><strong><A HREF=\"$click\">$d[8]</A></strong></font>\n<P>\n"; # $r .= "<DD> <I>$d[6]</I>\n<P>\n"; # $r .= "<DD> $d[9]\n<BR><I>$d[6]</I>\n<P>\n"; } $r .= "</DL></TD></TR></TABLE></div>\n"; return $r; }
アブストラクトとかを表示させるつもりがないため、コメントアウトしている部分は多いですが、必要に応じてコメントアウトを削除して下さい。

行っていることはPerlのモジュールでスポンサーURL検索のURLのページからタイトルを取得しているだけです。あとはEUCのページで表示するためにJcodeでシフトJISからEUCに変換しているだけです(取得先のページはシフトJISのため)。メタタグとかも取ってくればアブストラクトの生成もできると思います。

原点はここ「CGIで指定URLのHP名の取得」(phoenix-c.or.jp)です。そのまんまコピペです(汗)。ごめんなさい。

あとは表示したいテンプレートに適当なタグを作って放り込めばOKです。

この改変の良いところはデータベースを作っておく必要がないところです。取得先のタイトルが変わろうが、表示するたびに取得に行きますので常に最新の状態が手に入ります。逆に悪いところとしては、表示するたびに取得しに行きますので、表示されるまでの処理に時間が掛かることでしょうか。高速な通信環境とサーバーがあれば問題ないかもしれませんが、フレッツADSL+Pentium166MHz(マシンはコンパック(HP)製)では力不足です。

こんな感じでMitakeSearchの構築をしてみましたが、半分防備録ですね。これでは。

それはともかく、MitakeSearchは導入(インストール)が簡単で、設定も非常に簡単です。WEBブラウザでスケジューリングも設定できるので、一瞬だけ触ったNamazu+各種フィルタよりも全然簡単に全文検索のサイトが構築できます。それも10,000ファイルまでのインデキシングはフリーなのですから試さないのは損です。是非、このページを読んだ方にも手軽さを体験して欲しいものだと思いました。

ただ、けんども日記: 全文検索システム MitakeSearch を導入も参考にさせてもらったのですが、「.cgi」のファイルの取得がうまくいきません…。なぜ…「-nocutcgi」オプションも付けているのに。これでは掲示板の様なタイプのもののファイルが取得ができません。うう…(泣)。今のところ実害はないのですが。


ちなみにインストール環境は以下の通りです。一部動作環境外ですが気にしないで下さい。

CPU:Pentium166MHz
RAM:96Mバイト
ハードディスク:RAIDの6Gバイト(だったような…)
OS:Red Hat Linux7.3
通信環境:フレッツADSL


カテゴリー:

このページをぜひシェアしてください