From: Dobrica Pavlinusic Date: Tue, 25 May 2010 18:05:36 +0000 (+0200) Subject: speedup facets using stored filters X-Git-Url: http://git.rot13.org/?p=MojoFacets.git;a=commitdiff_plain;h=4f8d628116b9c470c1d31148c2ec9954aeae4f4b speedup facets using stored filters --- diff --git a/lib/MojoFacets/Data.pm b/lib/MojoFacets/Data.pm index c75fde5..bf150ee 100644 --- a/lib/MojoFacets/Data.pm +++ b/lib/MojoFacets/Data.pm @@ -521,13 +521,20 @@ sub facet { my $all = $self->_perm_scalar('all', 1); - foreach my $i ( $self->_data_items($all) ) { - if ( ! exists $i->{$name} ) { + my $filter = $loaded->{$path}->{filters}->{$name}; + + my $data = $self->_loaded('data'); + foreach my $i ( 0 .. $#{ $data->{items} } ) { + if ( $filter && ! $all ) { + next unless defined $loaded->{$path}->{filters}->{$name}->{$i}; + } + my $item = $data->{items}->[$i]; + if ( ! exists $item->{$name} ) { $facet->{ _missing }++; - } elsif ( ref $i->{$name} eq 'ARRAY' ) { - $facet->{$_}++ foreach @{ $i->{$name} }; + } elsif ( ref $item->{$name} eq 'ARRAY' ) { + $facet->{$_}++ foreach @{ $item->{$name} }; } else { - $facet->{ $i->{$name} }++; + $facet->{ $item->{$name} }++; } }