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

你从哪里得到这个代码?它是POD 文档开头概要中代码的副本。Plucene

我想这是有人开始学习的尝试Plucene。模块概要中的代码并不一定意味着自己实现有用的东西。

正如您所指的文档所述,Lucene 是一个 Java 库,可为应用程序添加文本索引和搜索功能。它不是一个可以下载、安装和运行的完整应用程序。

你从哪里得到应该运行你展示的代码的想法?

于 2012-06-26T13:49:12.003 回答
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 索引文件中。

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 回答