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

📄 fieldinfos.pm

📁 Plucene-1.25.tar.gz PERL版本的lucene
💻 PM
字号:
package Plucene::Index::FieldInfos;=head1 NAME Plucene::Index::FieldInfos - a collection of FieldInfo objects=head1 SYNOPSIS	my $fis = Plucene::Index::FieldInfos->new($dir_name);	my $fis = Plucene::Index::FieldInfos->new($dir_name, $file);	$fis->add(Plucene::Document $doc, $indexed);	$fis->add(Plucene::Index::FieldInfos $other_fis, $indexed);	$fis->add($name, $indexed);	$fis->write($path);	my @fields = $fis->fields;	my $field_number = $fis->field_number($name);	my   $field_info = $fis->field_info($name);	my   $field_name = $fis->field_name($number);	my   $num_fields = $fis->size;	=head1 DESCRIPTIONThis is a collection of field info objects, which happen to live in the field infos file. =head1 METHODS=cutuse strict;use warnings;use Carp qw(confess);use File::Slurp;use Class::Struct 'Plucene::Index::FieldInfo' =>	[ name => '$', is_indexed => '$', number => '$' ];=head2 new	my $fis = Plucene::Index::FieldInfos->new($dir_name);	my $fis = Plucene::Index::FieldInfos->new($dir_name, $file);This will create a new Plucene::Index::FieldInfos object with the passeddirectory and optional filename.	=cutsub new {	my ($class, $dir, $file) = @_;	my $self = bless {}, $class;	$file		? $self->_read("$dir/$file")		: $self->_add_internal("", 0);	return $self;}=head2 add	$fis->add(Plucene::Document $doc, $indexed);	$fis->add(Plucene::Index::FieldInfos $other_fis, $indexed);	$fis->add($name, $indexed);This will add the fields from a Plucene::Document or a Plucene::Index::FieldsInfos to the field infos file.It is also possible to pass the name of a field and have it addedto the file.	=cutsub add {	my ($self, $obj, $indexed) = @_;	if ( UNIVERSAL::isa($obj, "Plucene::Document")		or UNIVERSAL::isa($obj, "Plucene::Index::FieldInfos")) {		$self->add($_->name, $_->is_indexed) for $obj->fields;		return;	}	confess "Don't yet know how to handle a $obj" if ref $obj;	my $name = $obj;                       # For clarity. :)	my $fi   = $self->field_info($name);	$fi		? $fi->is_indexed($indexed)		: $self->_add_internal($name, $indexed);}sub _add_internal {	my ($self, $name, $indexed) = @_;	my $fi = Plucene::Index::FieldInfo->new(		name       => $name,		is_indexed => $indexed,		number     => $#{ $self->{bynumber} } + 1,	);	push @{ $self->{bynumber} }, $fi;	$self->{byname}{$name} = $fi;}=head2 field_number	my $field_number = $fis->field_number($name);This will return the field number of the field with $name. If there is no match, then -1 is returned.	=cutsub field_number {	my ($self, $name) = @_;	return -1 unless defined $name;	my $field = $self->{byname}{$name} or return -1;	return $field->number;}=head2 fields	my @fields = $fis->fields;This will return all the fields.=cutsub fields { return @{ $_[0]->{bynumber} } }=head2 field_info	my $field_info = $fis->field_info($name);This will return the field info for the field called $name.=cut# Please ensure nothing in the code tries passing this a number. :(sub field_info { $_[0]->{byname}{ $_[1] } }=head2 field_name	my $field_name = $fis->field_name($number);This will return the field name for the field whose number is $number.=cutsub field_name { $_[0]->{bynumber}[ $_[1] ]->name }=head2 size 	my $num_fields = $fis->size;This returns the number of field info objects.=cutsub size { scalar $_[0]->fields }=head2 write	$fis->write($path);This will write the field info objects to $path.=cut# Called by DocumentWriter->add_document and# SegmentMerger->merge_fieldssub write {	my ($self, $file) = @_;	my @fi       = @{ $self->{bynumber} };	my $template = "w" . ("w/a*C" x @fi);	my $packed   = pack $template, scalar(@fi),		map { $_->name => ($_->is_indexed ? 1 : 0) } @fi;	write_file($file => $packed);}sub _read {	my ($self, $filename) = @_;	my @fields = unpack "w/(w/aC)", read_file($filename);	while (my ($field, $indexed) = splice @fields, 0, 2) {		$self->_add_internal($field => $indexed);	}}1;

⌨️ 快捷键说明

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