Search-Namazu を用いた CGI (その1)2007年04月26日 11時15分27秒

Search-Namazu の使用例として、簡易な検索用CGI を作ってみました。

このCGIはあくまでもSearch-Namazu の使用例として作ったものなので、実用的ではありませんが、これをベースにいろいろ機能追加していけば本格的な検索用CGIを作ることは可能でしょう。

  • $index にインデックスの場所を指定してください。
  • 検索結果は、スコア順に上位20件が表示されます。
  • このCGIは最小限の検索機能しかありません。
#!/usr/bin/perl -w

require 5.004;
use strict;
use CGI;
use Search::Namazu 0.96;
use NKF 2.06;

my $VERSION = 0.01;

#
# param
#

my $index = '/usr/local/var/namazu/index';

my $max = 20;

#
#
#
sub print_foot();

my $query = new CGI;

my @nkf_opt_internal = ("-emXZ1");

delete $ENV{'LANGUAGE'};
delete $ENV{'LC_ALL'};
delete $ENV{'LC_MESSAGES'};
delete $ENV{'LC_CTYPE'};
delete $ENV{'LANG'};

my $q = '';
if (defined $query->param('query')) {
    $q = nkf(
        @nkf_opt_internal, 
        $query->param('query')
    );
}

print $query->header(
    -type => 'text/html',
    -charset => 'EUC-JP'
);

print $query->start_html(
    -lang => 'ja',
    -encoding => 'EUC-JP',
    -title => 'Namazu',
    -bgcolor => '#FFFFFF',
);

my @hlists =
    Search::Namazu::Search(
        index => $index,
        query => $q,
        sortMethod => NMZ_SORTBYSCORE,
        sortOrder => NMZ_DESCENDSORT,
        lang => 'ja_JP.eucjp',
    );

if ($#hlists == 0 && !ref($hlists[0])) {
    print "Error: $hlists[0]\n";
    print_foot();
    exit 1;
}

my $docs = $#hlists + 1;

print <<EOF;
<form method="get" action="/cgi-bin/nmz.cgi">
<input type="text" name="query" value="">
<input type="submit" name="" value="Search!">
</form>

<p>
Total $docs documents matching your query.
<br >
</p>
EOF

print "<dl>\n";

my $n = 1;
foreach my $hlist (@hlists) {
    next if (!defined($hlist));

    my $date = localtime($hlist->date);

    printf("<dt>%d. %s (score: %d)", 
        $n, $hlist->title, $hlist->score);
    printf(" (rank: %d)</dt><br >\n", $hlist->rank);
    printf("<dd>\n");
    printf("Author: %s<br >\n", $hlist->author);
    printf("Date: %s<br >\n", $date);
    printf("%s<br >\n", $hlist->summary);
    printf("%s<br >\n", $hlist->uri);
    printf("</dd>\n");
    print "<br >\n";

    last if ($n == $max);
    $n++;
}
print "</dl>\n";

print_foot();

sub print_foot()
{
    print <<EOF;
<hr >
<div align="right">powered by Namazu</div>
EOF

    print $query->end_html;
}

コメント

_ opengl2772 ― 2007年05月02日 18時30分13秒

メンバエリアでソースを公開することにしました。

https://www.akaneiro.jp/members/nmzcgi/

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://namazu.asablo.jp/blog/2007/04/26/1466985/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。