这个与Lucene相关的代码实际上做了什么?

时间:2012-06-26 13:06:09

标签: perl lucene

 #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 Document,Index :: Writer等?最重要的是,当我运行这段代码时,我希望能够生成一些内容......但我什么也看不见。

我知道分析师是什么......感谢这个与CPAN相关联的文档:http://onjava.com/pub/a/onjava/2003/01/15/lucene.html?page=2。但我只是不知道为什么我运行这个代码,它似乎没有做任何事情......

2 个答案:

答案 0 :(得分:1)

您从哪里获得此代码?它是Plucene POD文档开头的概要中代码的副本。

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

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

你在哪里知道应该运行你显示的代码?

答案 1 :(得分: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”文件夹,其中包含多个索引文件,其中的docs数据为可搜索文本。

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”应用程序。在现实生活中的应用程序中,我没有看到你要创建索引文件然后从同一段代码中搜索它的场景。