Changeset 436
- Timestamp:
- 01/31/05 18:34:04 (4 years ago)
- Files:
-
- trunk/external-tools/indexer-backends/plucene/Midcom/Indexer/XMLComm.pm (modified) (7 diffs)
- trunk/external-tools/indexer-backends/plucene/Midcom/Plucene/BaseRequest.pm (modified) (3 diffs)
- trunk/external-tools/indexer-backends/plucene/Midcom/Plucene/DeleteRequest.pm (modified) (4 diffs)
- trunk/external-tools/indexer-backends/plucene/Midcom/Plucene/IndexRequest.pm (modified) (4 diffs)
- trunk/external-tools/indexer-backends/plucene/Midcom/Plucene/QueryRequest.pm (modified) (3 diffs)
- trunk/external-tools/indexer-backends/plucene/Midcom/Plucene/RequestProcessor.pm (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/external-tools/indexer-backends/plucene/Midcom/Indexer/XMLComm.pm
r435 r436 45 45 my $self = {}; 46 46 47 $self->{requests} = []; 48 $self->{responses} = []; 49 $self->{indexname} = undef; 50 51 $self->{parser} = XML::LibXML->new(); 52 $self->{parser}->validation(1); 53 $self->{parser}->keep_blanks(0); 54 55 $self->{document} = undef; 47 $self->{_requests} = []; 48 $self->{_indexname} = undef; 49 50 $self->{_parser} = XML::LibXML->new(); 51 $self->{_parser}->validation(1); 52 $self->{_parser}->keep_blanks(0); 53 54 $self->{_in} = shift; 55 $self->{_out} = shift; 56 $self->{_processor} = shift; 57 58 $self->{_output} = new XML::Writer( 59 OUTPUT => $self->{_out}, 60 DATA_MODE => 1, 61 DATA_INDENT => 1 62 ); 63 64 $self->{_document} = undef; 56 65 57 66 bless ($self, $class); … … 59 68 } 60 69 70 ########### 71 # Accessors 72 73 sub output 74 { 75 my $self = shift; 76 return $self->{_output}; 77 } 78 79 sub processor 80 { 81 my $self = shift; 82 return $self->{_processor}; 83 } 84 85 sub indexName 86 { 87 my $self = shift; 88 return $self->{_indexname}; 89 } 90 91 sub requests 92 { 93 my $self = shift; 94 return $self->{_requests}; 95 } 61 96 62 97 … … 68 103 sub ParseRequest 69 104 { 70 my ($self, $data) = @_; 71 72 $self->{document} = $self->{parser}->parse_string($data); 73 74 my $root = $self->{document}->documentElement(); 75 $self->{indexname} = $root->getAttribute('index'); 105 my $self = shift; 106 107 # Initialize output XML file 108 109 $self->{_output}->xmlDecl('UTF-8'); 110 $self->{_output}->doctype('response', undef, 'xml-communication-response.dtd'); 111 $self->{_output}->startTag('response'); 112 113 114 # Parse input XML file 115 116 $self->{_document} = $self->{_parser}->parse_fh($self->{_in}); 117 118 my $root = $self->{_document}->documentElement(); 119 $self->{_indexname} = $root->getAttribute('index'); 76 120 77 121 my @childs = $root->childNodes; 78 122 foreach my $node (@childs) 79 123 { 124 # Check only nodes, skip all other stuff like comments 125 if ($node->nodeType != 1) 126 { 127 next; 128 } 129 80 130 # Parse node type, relay to corresponding handler 81 131 if ($node->nodeName eq 'query') … … 99 149 else 100 150 { 101 die ("The Request type $node ->nodeNameis unknown to this handler.");151 die ("The Request type $node ( " . $node->nodeName . ") is unknown to this handler."); 102 152 # Should we throw an error here? 103 153 } 104 154 } 155 156 157 # Finish output XML file 158 159 $self->{_output}->endTag('response'); 160 $self->{_output}->end(); 105 161 } 106 162 … … 153 209 } 154 210 155 $request->dump; 156 push @{$self->{requests}}, $request; 211 # $request->dump; 212 $request->execute(); 213 push @{$self->{_requests}}, $request; 157 214 } 158 215 … … 167 224 $request->documentID($node->getAttribute('documentid')); 168 225 169 $request->dump; 170 push @{$self->{requests}}, $request; 226 # $request->dump; 227 $request->execute(); 228 push @{$self->{_requests}}, $request; 171 229 } 172 230 … … 219 277 } 220 278 221 $request->dump; 222 push @{$self->{requests}}, $request; 279 # $request->dump; 280 $request->execute(); 281 push @{$self->{_requests}}, $request; 223 282 224 283 # Go to the next document 225 284 $document_node = $document_node->nextSibling(); 226 285 } 227 228 286 } 229 287 trunk/external-tools/indexer-backends/plucene/Midcom/Plucene/BaseRequest.pm
r435 r436 8 8 use warnings; 9 9 10 use Plucene::Index::Term;11 10 use Time::Piece; 12 11 … … 45 44 46 45 $self->{_XMLComm} = shift; 46 $self->{_processor} = $self->{_XMLComm}->processor; 47 47 $self->{_id} = undef; 48 48 $self->{_type} = undef; … … 93 93 # Execute Handler 94 94 95 sub execute { } ;95 sub execute { } 96 96 97 97 trunk/external-tools/indexer-backends/plucene/Midcom/Plucene/DeleteRequest.pm
r435 r436 10 10 use Midcom::Plucene::BaseRequest; 11 11 use Plucene::Index::Term; 12 use Time::Piece;13 12 14 13 … … 47 46 { 48 47 my $class = shift; 49 my $self = $class->SUPER::new( );48 my $self = $class->SUPER::new(@_); 50 49 51 50 $self->type('delete'); … … 74 73 sub execute 75 74 { 76 my ($self, $reader) = @_;75 my $self = shift; 77 76 78 77 my $term = Plucene::Index::Term->new( … … 82 81 } 83 82 ); 84 $reader->delete_term($term); 83 $self->{_processor}->indexReader->delete_term($term); 84 85 # Tag the Writer object, so that it gets loaded from the request 86 # processor. This is will optimize the database after completing 87 # the current batch thus dropping all unused references to the 88 # deleted documents. I hate it. 89 $self->{_processor}->indexWriter(); 85 90 } 86 91 trunk/external-tools/indexer-backends/plucene/Midcom/Plucene/IndexRequest.pm
r435 r436 12 12 use Plucene::Document::Field; 13 13 use Plucene::Document::DateSerializer; 14 use Time::Piece;15 14 16 15 … … 50 49 { 51 50 my $class = shift; 52 my $self = $class->SUPER::new( );51 my $self = $class->SUPER::new(@_); 53 52 54 53 $self->type('index'); … … 77 76 { 78 77 my ($self, $name, $contents) = @_; 79 $self->{_document}->add(Plucene::Document::Field->Keyword($name, $self->mkDate($contents)));78 $self->{_document}->add(Plucene::Document::Field->Keyword($name, freeze_date($self->mkDate($contents)))); 80 79 } 81 80 … … 116 115 sub execute 117 116 { 118 my ($self, $writer) = @_;119 $self->add _keyword('__RI', $self->{_documentID});120 $ writer->add_document($self->{_document});117 my $self = shift; 118 $self->addKeyword('__RI', $self->{_documentID}); 119 $self->{_processor}->indexWriter->add_document($self->{_document}); 121 120 } 122 121 trunk/external-tools/indexer-backends/plucene/Midcom/Plucene/QueryRequest.pm
r435 r436 11 11 use Plucene::Document::DateSerializer; 12 12 use Plucene::Search::DateFilter; 13 use Time::Piece;14 13 15 14 … … 49 48 { 50 49 my $class = shift; 51 my $self = $class->SUPER::new( );50 my $self = $class->SUPER::new(@_); 52 51 53 52 $self->type('query'); … … 101 100 sub execute 102 101 { 103 my ($self, $parser, $searcher) = @_;102 my $self = shift; 104 103 105 my $query = $ parser->parse($self->{_queryString});104 my $query = $self->{_processor}->queryParser->parse($self->{_queryString}); 106 105 my $hits; 107 106 108 107 if ($self->{_dateFilterFrom} || $self->{_dateFilterTo}) 109 108 { 110 my $filter = Plucene::Search::DateFilter->new( 111 { 112 field => $self->{_dateFilterField}, 113 from => $self->{_dateFilterFrom}, 114 to => $self->{_dateFilterTo} 115 } 109 my $filter_config = {}; 110 111 $filter_config->{field} = $self->{_dateFilterField}; 112 if ($self->{_dateFilterFrom}) 113 { 114 $filter_config->{from} = $self->{_dateFilterFrom}; 115 } 116 if ($self->{_dateFilterFrom}) 117 { 118 $filter_config->{from} = $self->{_dateFilterFrom}; 119 } 120 121 $hits = $self->{_processor}->indexSearcher->search( 122 $query, 123 Plucene::Search::DateFilter->new($filter_config) 116 124 ); 117 $hits = $searcher->search($query, $filter);118 125 } 119 126 else 120 127 { 121 $hits = $se archer->search($query);128 $hits = $self->{_processor}->indexSearcher->search($query); 122 129 } 123 130 124 print "\nWe found " . $hits->length . " documents:\n\n"; 125 for (my $i = 0; $i < $hits->length; $i++) 131 my $output = $self->{_XMLComm}->output; 132 133 $output->startTag('resultset', 'id' => $self->id()); 134 135 # Build a sorted resultset (take the indices directly, order them, then go ahead) 136 my @order = sort 137 { 138 $hits->score($b) <=> $hits->score($a) 139 } 140 (0..($hits->length-1)); 141 142 foreach my $i (@order) 126 143 { 127 # my $doc = $hits->doc($i); 128 print "\nDocument $i:\n"; 129 print "Score:\t" . $hits->score($i) . "\n"; 144 my $doc = $hits->doc($i); 145 my $score = $hits->score($i); 146 my $id = $doc->get('__RI')->string; 147 148 $output->startTag('document', 149 'id' => $id, 150 'score' => $score); 151 152 foreach my $field ($doc->fields) 153 { 154 $output->cdataElement('field', $field->string, 'name' => $field->name); 155 } 156 157 $output->endTag('document'); 130 158 } 159 160 $output->endTag('resultset'); 131 161 } 132 162
