⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reader.pm

📁 Plucene-1.25.tar.gz PERL版本的lucene
💻 PM
字号:
package Plucene::Index::Reader;use strict;use warnings;use Carp;use Fcntl qw(O_EXCL O_CREAT O_WRONLY);use Plucene::Index::SegmentReader;use Plucene::Index::SegmentInfos;use Plucene::Index::SegmentsReader;=head1 NAMEPlucene::Index::Reader - Abstract class for accessing an index=head1 DESCRIPTIONIndexReader is an abstract class, providing an interface for accessing anindex.  Search of an index is done entirely through this abstract interface, sothat any subclass which implements it is searchable.Concrete subclasses of IndexReader are usually constructed with a call to thestatic method L</open>.For efficiency, in this API documents are often referred to via documentnumbers, non-negative integers which each name a unique document in the index.These document numbers are ephemeral--they may change as documents are added toand deleted from an index.  Clients should thus not rely on a given documenthaving the same number between sessions.=head1 METHODS=head2 new	my $reader = Plucene::Index::Reader->new($dir_name);This will create a new Plucene::Index::Reader with the passed in directory.=cutsub new {	my ($class, $directory) = @_;	bless { directory => $directory, writelock => undef }, $class;}=head2 open	# If there is only one segment	my Plucene::Index::SegmentReader $seg_read = $reader->open;	# If there are many segments	my Plucene::Index::SegmentsReader $seg_read = $reader->open;	Returns an IndexReader reading the index in the given Directory.=cutsub open {	my ($self, $directory) = @_;	my $reader = Plucene::Index::SegmentInfos->new;	$reader->read($directory);	my @segments = $reader->segments;	return Plucene::Index::SegmentReader->new($reader->info(0), 1)		if @segments == 1;	return Plucene::Index::SegmentsReader->new(		$directory,		map Plucene::Index::SegmentReader->new($reader->info($_),			$_ == $#segments),		0 .. $#segments	);}=head2 last_modified	my $last_modified = Plucene::Index::Reader->last_modified($directory);=cutsub last_modified { (stat "$_[1]/segments")[9] }=head2 index_exists	if (Plucene::Index::Reader->index_exists($directory)){ ... }=cutsub index_exists { -e "$_[1]/segments" }=head2 is_locked	if (Plucene::Index::Reader->is_locked($directory)){ ... }=cutsub is_locked { -e "$_[1]/write.lock" }=head2 delete	$reader->delete($doc);=cutsub delete {	my ($self, $doc) = @_;	local *FH;	if (!$self->{writelock}) {		$self->{writelock} = "$self->{directory}/write.lock";		sysopen FH, $self->{writelock}, O_EXCL | O_CREAT | O_WRONLY			or croak "Couldn't get lock";		close *FH;	}	$self->_do_delete($doc);	unlink "$self->{directory}/write.lock";}=head2 delete_term	$reader->delete_term($term);This will delete all the documents which contain the passed term.	=cutsub delete_term {	my ($self, $term) = @_;	my $enum = $self->term_docs($term);	$self->delete($enum->doc) while $enum->next;}=head2 close	$reader->close;=cutsub close {	my $self = shift;	$self->_do_close;	$self->unlock($self->{directory});}=head2 unlock	$reader->unlock($directory);=cutsub unlock {	unlink "$_[1]/write.lock";	unlink "$_[1]/commit.lock";}=head2 num_docs / max_doc / document / is_deleted / norms / terms / doc_freq / term_docs / term_positions / _do_delete / _do_closeThese must be defined in a subclass=cutsub num_docs       { die "Please define num_docs in subclass" }sub max_doc        { die "Please define max_doc in subclass" }sub document       { die "Please define document in subclass" }sub is_deleted     { die "Please define is_deleted in subclass" }sub norms          { die "Please define norms in subclass" }sub terms          { die "Please define terms in subclass" }sub doc_freq       { die "Please define doc_freq in subclass" }sub term_docs      { die "Please define term_docs in subclass" }sub term_positions { die "Please define term_positions in subclass" }sub _do_delete     { die "Please define _do_delete in subclass" }sub _do_close      { die "Please define _do_close in subclass" }1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -