/[Grep]/lib/Grep/Search/Estraier.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /lib/Grep/Search/Estraier.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 191 - (show annotations)
Fri May 23 21:23:44 2008 UTC (15 years, 11 months ago) by dpavlin
File size: 1626 byte(s)
semi-working Search::Estraier search back-end
1 package Grep::Search::Estraier;
2
3 use strict;
4 use warnings;
5 use base qw( Class::Accessor );
6 Grep::Search::Estraier->mk_accessors( qw( index_path ) );
7
8 use Search::Estraier;
9 use Encode qw/encode/;
10
11 =head1 NAME
12
13 Grep::Search::Estraier - full text search using L<Search::Estraier>
14
15 =head1 METHODS
16
17 =cut
18
19 =head2 node
20
21 $search->node
22
23 =cut
24
25 our $indexes;
26
27 sub node {
28 my $self = shift;
29
30 my $node = new Search::Estraier::Node(
31 url => 'http://localhost:1978/node/grep',
32 user => 'admin',
33 passwd => 'admin',
34 create => 1,
35 label => 'Grep index',
36 croak_on_error => 1,
37 # debug => 1,
38 );
39
40 return $node;
41 }
42
43 =head2 add
44
45 $self->add( $doc_hash );
46
47 =cut
48
49 sub add {
50 my $self = shift;
51 my $doc = shift;
52
53 my $doc_draft = new Search::Estraier::Document;
54 $doc_draft->add_attr('@uri', $doc->{id});
55 $doc_draft->add_attr('@title', $doc->{title});
56 foreach my $attr ( keys %$doc ) {
57 my $v = encode('iso-8859-1', $doc->{$attr});
58 # my $v = $doc->{$attr};
59 $doc_draft->add_attr( $attr, $v );
60 $doc_draft->add_text( $v );
61 }
62
63 $self->node->put_doc($doc_draft)
64 }
65
66 =head2 search
67
68 my $fetch_hit_coderef = $self->search('search query');
69
70 =cut
71
72 sub search {
73 my $self = shift;
74 my $q = shift;
75
76 my $cond = new Search::Estraier::Condition;
77
78 $cond->set_phrase( $q );
79
80 my $nres = $self->node->search($cond, 0);
81
82 $self->hits( $nres->hits );
83
84 warn "# search '$q' got ", $self->hits, " results\n";
85
86 my $i = 0;
87
88 return sub {
89 return if $i++ >= $nres->doc_num;
90 warn "# get_doc($i)\n";
91 my $rdoc = $nres->get_doc($i);
92 return {
93 id => $rdoc->attr('id'),
94 title => $rdoc->attr('title'),
95 score => $rdoc->score,
96 };
97 };
98
99 }
100
101
102 1;

  ViewVC Help
Powered by ViewVC 1.1.26