package Foorum::Search; use strict; use warnings; our $VERSION = '1.001000'; use Foorum::Search::Sphinx; use Foorum::Search::Database; sub new { my $class = shift; my $self = {@_}; my $sphinx = new Foorum::Search::Sphinx; if ( $sphinx->can_search() ) { $self->{use_sphinx} = 1; $self->{sphinx} = $sphinx; } else { $self->{use_db} = 1; $self->{db} = new Foorum::Search::Database; } return bless $self => $class; } sub query { my ( $self, $type, $params ) = @_; # if Sphinx searchd is on and Foorum::Search::Sphinx implemented the $type if ( $self->{use_sphinx} and $self->{sphinx}->can($type) ) { return $self->{sphinx}->query( $type, $params ); } elsif ( $self->{db}->can($type) ) { # if Foorum::Search::Database implemented the $type return $self->{db}->query( $type, $params ); } } 1; __END__ =pod =head1 NAME Foorum::Search - search Foorum =head1 SYNOPSIS use Foorum::Search; my $search = new Foorum::Search; my $ret = $search->query('topic', { author_id => 1, title => 'test', page => 2, per_page => 20 } ); # this ->query would use Foorum::Search::Sphinx when 'searchd' is available. # or else, use Foorum::Search::Database to get the results. =head1 DESCRIPTION This module is mainly to design the interface of Foorum search regardless the backend (Sphinx or Database or others) =head1 SEE ALSO L, L =head1 AUTHOR Fayland Lam =cut