Search::OpenSearch::Server::Plack - serve OpenSearch results with Plack


 # write a PSGI application in yourapp.psgi
 use strict;
 use warnings;
 use Plack::Builder;
 use Search::OpenSearch::Server::Plack;
 my $engine_config = {
    type   => 'Lucy',
    index  => ['path/to/your/index'],
    facets => {
        names       => [qw( topics people places orgs author )],
        sample_size => 10_000,
    fields => [qw( topics people places orgs author )],

 my $app = Search::OpenSearch::Server::Plack->new( 
    engine_config => $engine_config,
    stats_logger  => MyStats->new(),

 builder {
    mount '/' => $app;

 # run the app
 % plackup yourapp.psgi


Search::OpenSearch::Server::Plack is a Plack::Component application. This module implements a HTTP-ready Search::OpenSearch server using Plack.


This class inherits from Search::OpenSearch::Server and Plack::Component. Only new or overridden methods are documented here.

new( params )

Inherits from Plack::Component. params can be:


Should be a Search::OpenSearch::Engine instance.


A hashref passed to the Search::OpenSearch->engine method.


An object that implements at least one method called log. The object's log method is invoked with 2 arguments: the Plack::Request object, and either the Search::OpenSearch::Response object or the REST response hashref, on each request.


Implements the required Middleware method. The default behavior is to instantiate a Plack::Request and pass it into do_search().

log( msg, level )

Passes msg on to the Plack::Request->logger object, if any.

do_rest_api( request, response )

Overrides base Server method to call finalize() on response.

do_search( request, response )

Overrides base Server method to call finalize() on response.


Peter Karman, <karman at>


Please report any bugs or feature requests to bug-search-opensearch-server at, or through the web interface at I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.


You can find documentation for this module with the perldoc command.

    perldoc Search::OpenSearch::Server

You can also look for information at:


Copyright 2010 Peter Karman.

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See for more information.