#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。但我只是不知道为什么我运行这个代码,它似乎没有做任何事情......
答案 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”应用程序。在现实生活中的应用程序中,我没有看到你要创建索引文件然后从同一段代码中搜索它的场景。