13 |
|
|
14 |
my $debug = 0; |
my $debug = 0; |
15 |
|
|
16 |
sub reopen_index { |
sub create { |
|
my $self = shift; |
|
17 |
|
|
|
$analyzer ||= new Lucene::Analysis::Standard::StandardAnalyzer(); |
|
18 |
my $create = 0; |
my $create = 0; |
19 |
if (! -e "$index_path/segments") { |
if (! -e "$index_path/segments") { |
20 |
$create = 1; |
$create = 1; |
21 |
Jifty->log->debug("creating index $index_path") unless ($store); |
Jifty->log->debug("create index $index_path") unless ($store); |
22 |
} else { |
} else { |
23 |
Jifty->log->debug("using index: $index_path") unless ($store); |
Jifty->log->debug("open index: $index_path") unless ($store); |
24 |
} |
} |
25 |
$store ||= Lucene::Store::FSDirectory->getDirectory( $index_path, $create ); |
return $create; |
26 |
|
} |
27 |
|
|
28 |
|
sub analyzer { |
29 |
|
my $self = shift; |
30 |
|
$analyzer ||= new Lucene::Analysis::Standard::StandardAnalyzer(); |
31 |
|
return $analyzer; |
32 |
|
} |
33 |
|
|
34 |
|
sub store { |
35 |
|
my $self = shift; |
36 |
|
|
37 |
|
$store ||= Lucene::Store::FSDirectory->getDirectory( $index_path, $self->create ); |
38 |
|
return $store; |
39 |
|
} |
40 |
|
|
41 |
|
sub writer { |
42 |
|
my $self = shift; |
43 |
|
$writer ||= new Lucene::Index::IndexWriter( $self->store, $self->analyzer, $self->create ); |
44 |
|
return $writer; |
45 |
} |
} |
46 |
|
|
47 |
=head2 add |
=head2 add |
57 |
|
|
58 |
die "record not Jifty::Record but ", ref $i unless ($i->isa('Jifty::Record')); |
die "record not Jifty::Record but ", ref $i unless ($i->isa('Jifty::Record')); |
59 |
|
|
|
$self->reopen_index; |
|
|
|
|
|
$writer ||= new Lucene::Index::IndexWriter( $store, $analyzer, 0 ); |
|
|
|
|
60 |
my $pk = { $i->primary_keys }; |
my $pk = { $i->primary_keys }; |
61 |
|
|
62 |
my $doc = new Lucene::Document; |
my $doc = new Lucene::Document; |
94 |
} |
} |
95 |
} |
} |
96 |
|
|
97 |
$writer->addDocument($doc); |
$self->writer->addDocument($doc); |
98 |
|
|
99 |
Jifty->log->debug("added ", $i->id, " to index"); |
Jifty->log->debug("added ", $i->id, " to index"); |
100 |
} |
} |
110 |
|
|
111 |
my $q = shift or die "no q?"; |
my $q = shift or die "no q?"; |
112 |
|
|
113 |
$self->reopen_index; |
my $searcher = new Lucene::Search::IndexSearcher($self->store); |
114 |
|
my $parser = new Lucene::QueryParser("content", $self->analyzer); |
|
my $searcher = new Lucene::Search::IndexSearcher($store); |
|
|
my $parser = new Lucene::QueryParser("content", $analyzer); |
|
115 |
my $query = $parser->parse( $q ); |
my $query = $parser->parse( $q ); |
116 |
|
|
117 |
Jifty->log->debug("searching for '$q'"); |
Jifty->log->debug("searching for '$q'"); |