File: FieldsWriter.pm

package info (click to toggle)
libplucene-perl 1.25-5
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 1,320 kB
  • sloc: perl: 4,169; makefile: 2
file content (125 lines) | stat: -rw-r--r-- 2,860 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package Plucene::Index::FieldsWriter;

=head1 NAME 

Plucene::Index::FieldsWriter - writes Fields to a Document

=head1 SYNOPSIS

	my $writer = Plucene::Index::FieldsWriter->new(
		$dir_name, $segment, $field_infos);

	$writer->add_document(Plucene::Document $doc);

=head1 DESCRIPTION

This class add documents to the appropriate files.

=head1 METHODS

=cut

use strict;
use warnings;

use Plucene::Store::OutputStream;
use Plucene::Index::FieldInfos;

=head2 new

	my $writer = Plucene::Index::FieldsWriter->new(
		$dir_name, $segment, $field_infos);

This will create a new Plucene::Index::FieldsWriter object with the passed
directory name, segment and field infos.
		
=cut

# private FieldInfos fieldInfos;
# private OutputStream fieldsStream;
# private OutputStream indexStream;

# FieldsWriter(Directory d, String segment, FieldInfos fn)
#      throws IOException {
#   fieldInfos = fn;
#   fieldsStream = d.createFile(segment + ".fdt");
#   indexStream = d.createFile(segment + ".fdx");
# }

sub new {
	my ($self, $d, $segment, $fn) = @_;
	bless {
		field_infos   => $fn,
		segment       => $segment,
		fields_stream => Plucene::Store::OutputStream->new("$d/$segment.fdt"),
		index_stream  => Plucene::Store::OutputStream->new("$d/$segment.fdx"),
	}, $self;
}

=head2 close

	$writer->close;

=cut

# final void close() throws IOException {
#   fieldsStream.close();
#   indexStream.close();
# }

sub close {
	my $self = shift;
	$self->{fields_stream}->close;
	$self->{index_stream}->close;
}

=head2 add_document

	$writer->add_document(Plucene::Document $doc);

This will add the passed Plucene::Document.

=cut

# final void addDocument(Document doc) throws IOException {
#   indexStream.writeLong(fieldsStream.getFilePointer());
#
#   int storedCount = 0;
#   Enumeration fields  = doc.fields();
#   while (fields.hasMoreElements()) {
#     Field field = (Field)fields.nextElement();
#     if (field.isStored())
#       storedCount++;
#   }
#   fieldsStream.writeVInt(storedCount);
#
#   fields  = doc.fields();
#   while (fields.hasMoreElements()) {
#     Field field = (Field)fields.nextElement();
#     if (field.isStored()) {
#       fieldsStream.writeVInt(fieldInfos.fieldNumber(field.name()));
#
#       byte bits = 0;
#       if (field.isTokenized())
#         bits |= 1;
#       fieldsStream.writeByte(bits);
#
#       fieldsStream.writeString(field.stringValue());
#     }
#   }
# }

sub add_document {
	my ($self, $doc) = @_;
	$self->{index_stream}->write_long($self->{fields_stream}->tell);
	my @stored = grep $_->is_stored, $doc->fields;
	$self->{fields_stream}->write_vint(scalar @stored);
	for my $field (@stored) {
		$self->{fields_stream}
			->write_vint($self->{field_infos}->field_number($field->name));
		$self->{fields_stream}->print(chr($field->is_tokenized));
		$self->{fields_stream}->write_string($field->string);
	}
}

1;