Author image Marvin Humphrey
and 1 contributors


KinoSearch::Searcher - Execute searches.


    my $searcher = KinoSearch::Searcher->new(
        invindex => MySchema->open('/path/to/invindex'),
    my $hits = $searcher->search( 
        query      => 'foo bar' 
        offset     => 0,
        num_wanted => 100,


Use the Searcher class to perform queries against an invindex.



    my $searcher = KinoSearch::Searcher->new(
        invindex => MySchema->open('/path/to/invindex'),

Constructor. Takes one labeled parameter.

    my $hits = $searcher->search( 
        query      => $query,     # required
        offset     => 20,         # default: 0
        num_wanted => 10,         # default: 10
        filter     => $filter,    # default: undef (no filtering)
        sort_spec  => $sort_spec, # default: undef (sort by relevance)

Process a search and return a Hits object. search() expects labeled hash-style parameters.

  • query - Can be either an object which subclasses KinoSearch::Search::Query, or a UTF-8 query string. If it's a query string, it will be parsed using a QueryParser and a search will be performed against all indexed fields in the InvIndex. For more sophisticated searching, supply Query objects, such as TermQuery and BooleanQuery.

  • offset - The number of most-relevant hits to discard, typically used when "paging" through hits N at a time. Setting offset to 20 and num_wanted to 10 retrieves hits 21-30, assuming that 30 hits can be found.

  • num_wanted - The number of hits you would like to see after offset is taken into account.

  • filter - Must be a KinoSearch::Search::QueryFilter. Search results will be limited to only those documents which pass through the filter.

  • sort_spec - Must be a KinoSearch::Search::SortSpec, which will affect how results are ranked and returned.

Caching a Searcher

When a Searcher is created, a small portion of the InvIndex is loaded into memory. For large document collections, this startup time may become noticable, in which case reusing the searcher is likely to speed up your search application. Caching a Searcher is especially helpful when running a high-activity app under mod_perl.

Searcher objects always represent a snapshot of an InvIndex as it existed when the Searcher was created. If you want the search results to reflect modifications to an InvIndex, you must create a new Searcher after the update process completes.


Copyright 2005-2007 Marvin Humphrey


See KinoSearch version 0.20.