Skip to content

gphat/data-searchengine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

84 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NAME

Data::SearchEngine - A role for search engine abstraction.

VERSION

version 0.31

SYNOPSIS

package Data::SearchEngine::MySearch; use Moose;

with 'Data::SearchEngine';

sub search { my ($self, $query) = @_;

# ... your internal search junk

my $result = Data::SearchEngine::Results->new(
    query => $query,
    pager => # ... make a Data::Page
);

my @hits; # Populate with hits somehow

foreach my $hit (@hits) {
    $result->add(Data::SearchEngine::Item->new(
        values => {
            name => $hit->name,
            description => $hit->description
        },
        score => $hit->score
    ));
}

return $result;

}

DESCRIPTION

There are lots of search engine libraries. Each has a different interface. The goal of Data::SearchEngine is to provide a simple, extensive set of classes and roles that you can use to wrap a search implementation. The net result will be an easily swappable backend with a common set of features.

IMPLEMENTATION

NOTE: You should avoid adding new attributes or subclassing Data::SearchEngine classes unless otherwise noted. Doing so will break compatability with future releases and obviate the whole reason that Data::SearchEngine exists. The only exception is the Results class (step 3 below) which should only be a subclass with roles applied, no new attributes or methods.

Step 1 - Wrap a search implementation

As shown in the SYNOPSIS, use the Data::SearchEngine role in a class that wraps your search implementation. Implement a search method that takes a Data::SearchEngine::Query object and returns a Data::SearchEngine::Results object.

Step 2 - Use Other Roles

If your library includes functionality other than searching, such as indexing new documents or removing them, you may include the Data::SearchEngine::Modifiable role. If you have other suggestions for roles please drop me a line!

Step 3 - Extend the Results

The results object may not have quite enough pieces for your implementation. If not, you can extend Data::SearchEngine::Results and add some other roles:

  • Data::SearchEngine::Results::Faceted

For results that contain faceted data.

  • Data::SearchEngine::Results::Spellcheck

For results that contain spellcheck data.

DIGESTS

Data::SearchEngine provides a Digestable trait that can be applied to attributes of Query. Attributes with this trait will be added to a base64 MD5 digest to produce a unique key identifying this query. You can then serialize the Result using MooseX::Storage and store it under the digest of the Query for caching.

ATTRIBUTES

debug

An attribute that signals the backend should operate in a debugging mode. Please see the implementation module for specifics on how to use this.

defaults

The defaults attribute is a simple HashRef that backends may use to get default settings from the user. The implementation of search may then use these defaults when setting up instances of a search.

METHODS

is_debug

Method for determining if the debug attribute has been set.

get_default ($key)

Returns the value from defaults (if any) for the specified key.

set_default ($key, $value)

Sets the value in defaults.

AUTHOR

Cory G Watson gphat@cpan.org

COPYRIGHT AND LICENSE

This software is copyright (c) 2011 by Cold Hard Code, LLC.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

About

SearchEngine API and Roles

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages