Changeset 2594


Ignore:
Timestamp:
03/09/10 22:28:15 (2 years ago)
Author:
karpet
Message:

add more tests, and make them pass

Location:
Search-Query-Dialect-KSx/trunk
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • Search-Query-Dialect-KSx/trunk/Changes

    r2586 r2594  
    19190.05    xxx 
    2020        * refactor scoring via Compiler and Scorer. 
     21        * fix bugs with NOTQuery 
     22        * support NOTQuery around a RangeQuery 
     23        * preserve syntax of RangeQuerys on stringify() 
     24 
  • Search-Query-Dialect-KSx/trunk/MANIFEST

    r2566 r2594  
    1111t/00-load.t 
    1212t/01-parser.t 
     13t/02-search.t 
    1314t/pod-coverage.t 
    1415t/pod.t 
  • Search-Query-Dialect-KSx/trunk/lib/Search/Query/Dialect/KSx.pm

    r2590 r2594  
    9494    '+' => 'AND', 
    9595    ''  => 'OR', 
    96     '-' => 'NOT', 
     96    '-' => 'AND', 
    9797); 
    9898 
     
    181181        $op = '!' . $op unless $op =~ m/^!/; 
    182182    } 
    183     if ( $value =~ m/\*/ ) { 
     183    if ( $value =~ m/[\*\?]|\Q$wildcard/ ) { 
    184184        $op =~ s/:/~/g; 
    185185    } 
     
    196196        } 
    197197 
    198         #warn dump [ $name, $op, $quote, $value ]; 
     198        #warn "ks string: " . dump [ $name, $op, $prefix, $quote, $value ]; 
    199199 
    200200        # invert fuzzy 
     
    264264=cut 
    265265 
     266my %ks_class_map = ( 
     267    '+' => 'AND', 
     268    ''  => 'OR', 
     269    '-' => 'NOT', 
     270); 
     271 
    266272sub as_ks_query { 
    267273    my $self = shift; 
     
    271277    foreach my $prefix ( '+', '', '-' ) { 
    272278        my @clauses; 
    273         my $joiner = $op_map{$prefix}; 
     279        my $joiner = $ks_class_map{$prefix}; 
    274280        next unless exists $tree->{$prefix}; 
    275281        for my $clause ( @{ $tree->{$prefix} } ) { 
     
    280286        my $ks_class = 'KinoSearch::Search::' . $joiner . 'Query'; 
    281287 
    282         push @q, @clauses == 1 
    283             ? $clauses[0] 
    284             : $ks_class->new( children => [ grep {defined} @clauses ] ); 
     288        if ( @clauses == 1 ) { 
     289            if ( $prefix eq '-' ) { 
     290                push @q, $ks_class->new( negated_query => $clauses[0] ); 
     291            } 
     292            else { 
     293                push @q, $clauses[0]; 
     294            } 
     295        } 
     296        else { 
     297            if ( $prefix eq '-' ) { 
     298                my $and_not = KinoSearch::Search::ANDQuery->new( 
     299                    children => \@clauses ); 
     300                push @q, $and_not; 
     301            } 
     302            else { 
     303                push @q, 
     304                    $ks_class->new( children => [ grep {defined} @clauses ] ); 
     305            } 
     306        } 
     307 
    285308    } 
    286309 
     
    326349    # normalize operator 
    327350    my $op = $clause->{op} || ":"; 
    328     if ( $op eq '=' ) { 
    329         $op = ':'; 
    330     } 
     351    $op =~ s/=/:/g; 
    331352    if ( $prefix eq '-' ) { 
    332         $op = '!' . $op; 
    333     } 
    334     if ( $value =~ m/\%/ ) { 
     353        $op = '!' . $op unless $op =~ m/^!/; 
     354    } 
     355    if ( $value =~ m/[\*\?]|\Q$wildcard/ ) { 
    335356        $op = $prefix eq '-' ? '!~' : '~'; 
    336357    } 
     
    348369        } 
    349370 
    350         #warn dump [ $name, $op, $quote, $value ]; 
     371        #warn "as_ks_query: " . dump [ $name, $op, $prefix, $quote, $value ]; 
    351372 
    352373        # range is un-analyzed 
     
    375396            } 
    376397 
    377             croak "NOT Range query not yet supported"; 
    378             next FIELD;    # haha. never get here. 
     398            my $range_query = KinoSearch::Search::RangeQuery->new( 
     399                field         => $name, 
     400                lower_term    => $value->[0], 
     401                upper_term    => $value->[1], 
     402                include_lower => 1, 
     403                include_upper => 1, 
     404            ); 
     405            push( 
     406                @buf, 
     407                KinoSearch::Search::NOTQuery->new( 
     408                    negated_query => $range_query 
     409                ) 
     410            ); 
     411            next FIELD; 
    379412        } 
    380413 
     
    488521                    @buf, 
    489522                    KinoSearch::Search::NOTQuery->new( 
    490                         field => $name, 
    491                         term  => $term, 
     523                        negated_query => KinoSearch::Search::TermQuery->new( 
     524                            field => $name, 
     525                            term  => $term, 
     526                        ) 
    492527                    ) 
    493528                ); 
  • Search-Query-Dialect-KSx/trunk/lib/Search/Query/Dialect/KSx/Compiler.pm

    r2586 r2594  
    8989        #carp "$term field:$field: term>$lex_term<"; 
    9090        if ($include) { 
    91             next unless $lex_term =~ $regex; 
     91            last unless $lex_term =~ $regex; 
    9292        } 
    9393        else { 
  • Search-Query-Dialect-KSx/trunk/t/01-parser.t

    r2593 r2594  
    149149 
    150150#dump $range_not_query; 
    151 is( $range_not_query, qq/NOT date:(1..3)/, "!range expanded" ); 
     151is( $range_not_query, qq/NOT (date:(1..3))/, "!range expanded" ); 
    152152 
    153153# operators 
Note: See TracChangeset for help on using the changeset viewer.