NAME¶
WebService::Solr::Query - Abstract query syntax for Solr queries
SYNOPSIS¶
my $query = WebService::Solr::Query->new( { foo => 'bar' } );
my $result = $solr->search( $query );
DESCRIPTION¶
WebService::Solr::Query provides a programmatic way to generate queries to be
sent to Solr. Syntax wise, it attempts to be as close to SQL::Abstract WHERE
clauses as possible, with obvious exceptions for idioms that do not exist in
SQL. Just as values in SQL::Abstract are SQL-escaped, this module does the
appropriate Solr-escaping on all values passed to the object (see
"escape()").
QUERY SYNTAX¶
Key-Value Pairs¶
The simplest way to search is with key value pairs.
my $q = WebService::Solr::Query->new( { foo => 'bar' } );
# RESULT: (foo:"bar")
Implicit AND and OR¶
By default, data received as a HASHREF is AND'ed together.
my $q = WebService::Solr::Query->new( { foo => 'bar', baz => 'quux' } );
# RESULT: (foo:"bar" AND baz:"quux")
Furthermore, data received as an ARRAYREF is OR'ed together.
my $q = WebService::Solr::Query->new( { foo => [ 'bar', 'baz' ] } );
# RESULT: (foo:"bar" OR foo:"baz")
Nested AND and OR¶
The ability to nest AND and OR boolean operators is essential to express complex
queries. The "-and" and "-or" prefixes have been provided
for this need.
my $q = WebService::Solr::Query->new( { foo => [
-and => { -prohibit => 'bar' }, { -require => 'baz' }
] } );
# RESULT: (((-foo:"bar") AND (+foo:"baz")))
my $q = WebService::Solr::Query->new( { foo => [
-or => { -require => 'bar' }, { -prohibit => 'baz' }
] } );
# RESULT: (((+foo:"bar") OR (-foo:"baz")))
Default Field¶
To search the default field, use the "-default" prefix.
my $q = WebService::Solr::Query->new( { -default => 'bar' } );
# RESULT: ("bar")
Require/Prohibit¶
my $q = WebService::Solr::Query->new( { foo => { -require => 'bar' } } );
# RESULT: (+foo:"bar")
my $q = WebService::Solr::Query->new( { foo => { -prohibit => 'bar' } } );
# RESULT: (-foo:"bar")
Range¶
There are two types of range queries, inclusive ("-range_inc") and
exclusive ("-range_exc"). The "-range" prefix can be used
in place of "-range_inc".
my $q = WebService::Solr::Query->new( { foo => { -range => ['a', 'z'] } } );
# RESULT: (+foo:[a TO z])
my $q = WebService::Solr::Query->new( { foo => { -range_exc => ['a', 'z'] } } );
# RESULT: (+foo:{a TO z})
Boost¶
my $q = WebService::Solr::Query->new( { foo => { -boost => [ 'bar', '2.0' ] } } );
# RESULT: (foo:"bar"^2.0)
Proximity¶
my $q = WebService::Solr::Query->new( { foo => { -proximity => [ 'bar baz', 10 ] } } );
# RESULT: (foo:"bar baz"~10)
Fuzzy¶
my $q = WebService::Solr::Query->new( { foo => { -fuzzy => [ 'bar', '0.8' ] } } );
# RESULT: (foo:bar~0.8)
Boost¶
my $q = WebService::Solr::Query->new( { foo => { -boost => [ 'bar', '2.0' ] } } );
# RESULT: (foo:"bar"^2.0)
Literal Queries¶
Specifying a scalar ref as a value in a key-value pair will allow arbitrary
queries to be sent across the line.
NB: This will bypass any data
massaging done on regular strings, thus the onus of properly escaping the data
is left to the user.
my $q = WebService::Solr::Query->new( { '*' => \'*' } )
# RESULT (*:*)
ACCESSORS¶
- •
- query - stores the original query structure
METHODS¶
new( \%query )¶
Creates a new query object with the given hashref.
stringify( )¶
Converts the supplied structure into a Solr/Lucene query.
escape( $value )¶
The following values must be escaped in a search value:
+ - & | ! ( ) { } [ ] ^ " ~ * ? : \
NB: Values sent to "new()" are automatically escaped for you.
unescape( $value )¶
Unescapes values escaped in "escape()".
Debugging constant, default: off.
BUILDARGS¶
Moose method to handle input to "new()".
SEE ALSO¶
- •
- WebService::Solr
- •
- http://wiki.apache.org/solr/SolrQuerySyntax
AUTHORS¶
Brian Cassidy <bricas@cpan.org>
Jos Boumans <kane@cpan.org>
COPYRIGHT AND LICENSE¶
Copyright 2008-2012 National Adult Literacy Database
This library is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.