这个与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等等是什么?最重要的是,当我运行这段代码时,我希望生成一些东西......但我什么都看不到。这个与Lucene相关的代码实际上做了什么?

我知道分析仪是什么......感谢这篇文档链接到CPAN:http://onjava.com/pub/a/onjava/2003/01/15/lucene.html?page=2。但我只是没有得到为什么我运行这个代码,它似乎没有做任何事情......

+0

您似乎没有意识到[Plucene文档](https://metacpan.org/release/Plucene),请先阅读本文,然后提出具体问题。上面的代码缺少'$ query'变量的定义。 – daxim

+1

'严格使用;使用警告;'在顶部丢失。 – reinierpost

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中获得搜索结果,您可能希望向用户显示搜索结果(本例中不是)。

这似乎是一个“hello world”应用程序,用于perl中的Lucene使用。在实际的应用程序中,我没有看到您将创建索引文件然后从同一段代码中进行搜索的场景。

+0

哦哇...我已经找到my_index,并有效地获得了它。这比我刚才的要多得多。感谢这个见解。 – PinkElephantsOnParade

你从哪里得到这段代码?它是简介中的代码副本,位于Plucene POD文档的开头。

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

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

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

+0

啊 - 我明白了 - 那就是我复制它。这是我的尝试,现在我正在考虑这个问题......对于简要代码很少做任何事情,只说明基本用法是正确的。我从恐慌中产生了这个想法。 那么,我想知道我应该运行什么。我去了这个网站,看看这个例子是否运行: http:// everything2。com/title/Plucene 但同样的结果运行并没有创建。我真的很喜欢一个实际的例子来向我展示Lucene是如何工作的......但是我担心这里可能没有一个可用的例子(哦,噢是我 - 我可能需要挖掘)。 – PinkElephantsOnParade