Changeset 2533
- Timestamp:
- 02/22/10 23:26:43 (2 years ago)
- Location:
- Search-OpenSearch-Engine-KSx/trunk
- Files:
-
- 3 edited
-
Changes (modified) (1 diff)
-
Makefile.PL (modified) (1 diff)
-
lib/Search/OpenSearch/Engine/KSx.pm (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
Search-OpenSearch-Engine-KSx/trunk/Changes
r2465 r2533 4 4 First version, released on an unsuspecting world. 5 5 6 0.02 22 Feb 2010 7 * add Facet support 8 -
Search-OpenSearch-Engine-KSx/trunk/Makefile.PL
r2458 r2533 14 14 PREREQ_PM => { 15 15 'Test::More' => 0, 16 'Search::OpenSearch' => 0 ,17 'SWISH::Prog::KSx' => 0.0 6,16 'Search::OpenSearch' => 0.05, 17 'SWISH::Prog::KSx' => 0.08, 18 18 }, 19 19 dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', }, -
Search-OpenSearch-Engine-KSx/trunk/lib/Search/OpenSearch/Engine/KSx.pm
r2458 r2533 5 5 use base qw( Search::OpenSearch::Engine ); 6 6 use SWISH::Prog::KSx::Searcher; 7 use KinoSearch::Object::BitVector; 8 use KinoSearch::Search::HitCollector::BitCollector; 7 9 8 our $VERSION = '0.0 1';10 our $VERSION = '0.02'; 9 11 10 12 sub init_searcher { … … 13 15 my $searcher = SWISH::Prog::KSx::Searcher->new( invindex => $index ); 14 16 return $searcher; 17 } 18 19 sub build_facets { 20 my $self = shift; 21 my $query = shift or croak "query required"; 22 my $results = shift or croak "results required"; 23 my $facetobj = $self->facets or return; 24 25 my @facet_names = @{ $facetobj->names }; 26 my $sample_size = $facetobj->sample_size; 27 my $searcher = $self->searcher; 28 my $ks_searcher = $searcher->{ks}; 29 my $query_parser = $searcher->{qp}; 30 my $bit_vec = KinoSearch::Object::BitVector->new( 31 capacity => $ks_searcher->doc_max + 1 ); 32 my $collector = KinoSearch::Search::HitCollector::BitCollector->new( 33 bit_vector => $bit_vec, ); 34 35 $ks_searcher->collect( 36 query => $query_parser->parse("$query"), 37 collector => $collector 38 ); 39 40 # find the facets 41 my %facets; 42 my $doc_id = 0; 43 my $count = 0; 44 while (1) { 45 $doc_id = $bit_vec->next_set_bit( $doc_id + 1 ); 46 last if $doc_id == -1; 47 last if $sample_size and ++$count > $sample_size; 48 my $doc = $ks_searcher->fetch_doc( doc_id => $doc_id ); 49 for my $name (@facet_names) { 50 51 # unique-ify 52 my %val = map { $_ => $_ } 53 split( m/\003/, $doc->{$name} ); 54 for my $value ( keys %val ) { 55 $facets{$name}->{$value}++; 56 } 57 } 58 } 59 60 # turn the struct inside out a bit, esp for XML 61 my %facet_struct; 62 for my $f ( keys %facets ) { 63 for my $n ( keys %{ $facets{$f} } ) { 64 push @{ $facet_struct{$f} }, 65 { term => $n, count => $facets{$f}->{$n} }; 66 } 67 } 68 return \%facet_struct; 15 69 } 16 70 … … 30 84 31 85 Returns a SWISH::Prog::KSx::Searcher object. 86 87 =head2 build_facets( I<query>, I<results> ) 88 89 Returns hash ref of facets from I<results>. See Search::OpenSearch::Engine. 32 90 33 91 =head1 AUTHOR
Note: See TracChangeset
for help on using the changeset viewer.