Author image Marvin Humphrey
and 1 contributors


KinoSearch1::QueryParser::QueryParser - transform a string into a Query object


    my $query_parser = KinoSearch1::QueryParser::QueryParser->new(
        analyzer => $analyzer,
        fields   => [ 'bodytext' ],
    my $query = $query_parser->parse( $query_string );
    my $hits  = $searcher->search( query => $query );


The QueryParser accepts search strings as input and produces Query objects, suitable for feeding into KinoSearch1::Searcher.


The following constructs are recognized by QueryParser.

  • Boolean operators 'AND', 'OR', and 'AND NOT'.

  • Prepented +plus and -minus, indicating that the labeled entity should be either required or forbidden -- be it a single word, a phrase, or a parenthetical group.

  • Logical groups, delimited by parentheses.

  • Phrases, delimited by double quotes.

  • Field-specific terms, in the form of fieldname:termtext. (The field specified by fieldname will be used instead of the QueryParser's default fields).

    A field can also be given to a logical group, in which case it is the same as if the field had been prepended onto every term in the group. For example: foo:(bar baz) is the same as foo:bar foo:baz.



    my $query_parser = KinoSearch1::QueryParser::QueryParser->new(
        analyzer       => $analyzer,       # required
        fields         => [ 'bodytext' ],  # required
        default_boolop => 'AND',           # default: 'OR'

Constructor. Takes hash-style parameters:

  • analyzer - An object which subclasses KinoSearch1::Analysis::Analyzer. This must be identical to the Analyzer used at index-time, or the results won't match up.

  • fields - the names of the fields which will be searched against. Must be supplied as an arrayref.

  • default_field - deprecated. Use fields instead.

  • default_boolop - two possible values: 'AND' and 'OR'. The default is 'OR', which means: return documents which match any of the query terms. If you want only documents which match all of the query terms, set this to 'AND'.


    my $query = $query_parser->parse( $query_string );

Turn a query string into a Query object. Depending on the contents of the query string, the returned object could be any one of several subclasses of KinoSearch1::Search::Query.


Copyright 2005-2010 Marvin Humphrey


See KinoSearch1 version 1.01.