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

📄 segmenttermdocs.pm

📁 Plucene-1.25.tar.gz PERL版本的lucene
💻 PM
字号:
package Plucene::Index::SegmentTermDocs;=head1 NAME Plucene::Index::SegmentTermDocs - Segment term docs=head1 SYNOPSIS	my $seg_term_docs = Plucene::Index::SegmentTermDocs		->new(Plucene::Index::SegmentReader $seg_reader);		$seg_term_docs->seek($term);	$seg_term_docs->next;	$seg_term_docs->read;	$seg_term_docs->skip_to($target);	=head1 DESCRIPTIONThis is the segment term docs class.=head1 METHODS=cutuse strict;use warnings;use IO::Handle;use Carp qw/confess/;use Plucene::Bitvector;use base 'Class::Accessor::Fast';__PACKAGE__->mk_accessors(	qw(parent freq_stream freq_count deleted_docs doc freq));=head2 new	my $seg_term_docs = Plucene::Index::SegmentTermDocs		->new(Plucene::Index::SegmentReader $seg_reader);This will create a new Plucene::Index::SegmentTermDocs object with the passedsegment reader.	=head2 parent / freq_stream / freq_count / deleted_docs / doc / freqGet / set these attributes.	=cutsub new {	my $self       = shift;	my $seg_reader = shift;	return bless {		parent       => $seg_reader,		freq_stream  => $seg_reader->freq_stream,    # listref		deleted_docs => $seg_reader->deleted_docs,		doc          => 0,	} => $self;}=head2 seek	$seg_term_docs->seek($term);=cutsub seek {	my ($self, $ti) = @_;	# I object to this, but hey.	if ($ti->isa("Plucene::Index::Term")) {		$self->_seek($self->parent->{tis}->get($ti));	} else {		$self->_seek($ti);	}}sub _seek {	my ($self, $ti) = @_;	if (!$ti) {		$self->freq_count(0);		return;	}	$self->freq_count($ti->doc_freq);	$self->doc(0);	$self->{ptr} = $ti->freq_pointer;    # offset in our array}=head2 skipping_docBy default this does nothing. You may wish to override it to do something.=cutsub skipping_doc { }sub _read_one {	my $self     = shift;	my $doc_code = $self->freq_stream->[ $self->{ptr}++ ];	# A sequence that smacks of overoptimization	$self->{doc} += $doc_code >> 1;	if ($doc_code & 1) {		$self->freq(1);	} else {		$self->freq($self->freq_stream->[ $self->{ptr}++ ]);	}	$self->{freq_count}--;}=head2 next	$seg_term_docs->next;=cutsub next {	my $self = shift;	while (1) {		return if $self->freq_count == 0;		$self->_read_one();		last			unless $self->{deleted_docs}			&& $self->{deleted_docs}->get($self->{doc});		$self->skipping_doc;	}	return 1;}=head2 read	$seg_term_docs->read;=cut# Called by TermScorer and SegmentsTermDocssub read {	my $self = shift;	my (@docs, @freqs);	while ($self->{freq_count} > 0) {		$self->_read_one;		next			if $self->{deleted_docs}			&& $self->{deleted_docs}->get($self->{doc});		push @docs,  $self->doc;		push @freqs, $self->freq;	}	return (\@docs, \@freqs);}=head2 skip_to	$seg_term_docs->skip_to($target);=cutsub skip_to {	my ($self, $target) = @_;	$self->next || return 0 while $target > $self->doc;	return 1;}1;

⌨️ 快捷键说明

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