0
 #usr/bin/perl
 use Plucene::Document;
 use Plucene::Document::Field;
 use Plucene::Index::Writer;
 use Plucene::Analysis::SimpleAnalyzer;
 use Plucene::Search::HitCollector;
 use Plucene::Search::IndexSearcher;
 use Plucene::QueryParser;

 my $content = "I am the law";
 my $doc = Plucene::Document->new;
 $doc->add(Plucene::Document::Field->Text(content => $content));
 $doc->add(Plucene::Document::Field->Text(author => "Philip Johnson"));


 my $analyzer = Plucene::Analysis::SimpleAnalyzer->new();
 my $writer = Plucene::Index::Writer->new("my_index", $analyzer, 1);
 $writer->add_document($doc);
 undef $writer; # close


 my $searcher = Plucene::Search::IndexSearcher->new("my_index");

 my @docs;
 my $hc = Plucene::Search::HitCollector->new(collect => sub {
         my ($self, $doc, $score) = @_;
         push @docs, $searcher->doc($doc);
 });

 $searcher->search_hc($query => $hc);

このコードが何をするのか理解できません。おなじみの Perl 構文とその先で何が起こっているかは理解していますが、Lucene ドキュメント、Index::Writer などとは何ですか? 最も重要なことは、このコードを実行すると、何かが生成されることを期待していますが、何も表示されません。

アナライザーとは何かを知っています... CPAN にリンクされているこのドキュメントのおかげです: http://onjava.com/pub/a/onjava/2003/01/15/lucene.html?page=2。しかし、このコードを実行する理由がわかりません。何もしないようです...

4

2 に答える 2

1

Lucene は、膨大な量のテキストを非常に高速に検索するように設計された検索エンジンです。

私の perl は強力ではありませんが、Lucene オブジェクトから私が理解していることから:

my $content = "I am the law";
my $doc = Plucene::Document->new;
$doc->add(Plucene::Document::Field->Text(content => $content));
$doc->add(Plucene::Document::Field->Text(author => "Philip Johnson"));

この部分では、新しいドキュメント オブジェクトを作成し、検索可能なデータとして lucene インデックス ファイルに追加する準備として、コンテンツと作成者の 2 つのテキスト フィールドを追加します。

my $analyzer = Plucene::Analysis::SimpleAnalyzer->new();
my $writer = Plucene::Index::Writer->new("my_index", $analyzer, 1);
$writer->add_document($doc);
undef $writer; # close

この部分では、インデックス ファイルを作成し、以前に作成したドキュメントをそのインデックスに追加します。この時点で、いくつかのインデックス ファイルを含む "my_index" フォルダーがアプリケーション ディレクトリにあり、ドキュメントのデータが検索可能なテキストとして含まれているはずです。

my $searcher = Plucene::Search::IndexSearcher->new("my_index");

my @docs;
my $hc = Plucene::Search::HitCollector->new(collect => sub {
       my ($self, $doc, $score) = @_;
       push @docs, $searcher->doc($doc);
});

$searcher->search_hc($query => $hc);

この部分では、上で作成したインデックス ファイルを検索して、インデックス ファイルの作成に使用したのと同じ文書データを探します。おそらく、この時点で @docs に検索結果が表示されますが、これをユーザーに表示することもできます (このサンプルではそうではありません)。

これは、perl で Lucene を使用するための "hello world" アプリケーションのようです。実際のアプリケーションでは、インデックス ファイルを作成し、同じコードから検索するシナリオは見当たりません。

于 2012-06-26T14:02:36.290 に答える
1

このコードはどこから入手しましたか? これは、 POD ドキュメントの冒頭にある概要のコードのコピーです。Plucene

誰かが について学び始めたのだと思いますPlucene。モジュールの概要のコードは、それ自体で何か有用なことを達成することを必ずしも意図したものではありません。

参照しているドキュメントにあるように、Lucene はテキストのインデックス作成と検索機能をアプリケーションに追加する Java ライブラリです。ダウンロード、インストール、実行するだけの完全なアプリケーションではありません。

あなたが示すコードを実行する必要があるという考えはどこから得ましたか?

于 2012-06-26T13:49:12.003 に答える