public class SwitchQParserPlugin extends QParserPlugin
A QParserPlugin that acts like a "switch/case" statement.
QParser's produced by this plugin will take their primary input string,
trimmed and prefixed with "case.
", to use as a key to lookup a
"switch case" in the parser's local params. If a matching local param is
found the resulting param value will then be parsed as a subquery, and
returned as the parse result.
The "case
" local param can be optionally be specified as a
switch case to match missing (or blank) input strings.
The "default
" local param can optionally be specified
as a default case to use if the input string does not match any other
switch case local params. If default
is not specified,
then any input which does not match a switch case local param will result
in a syntax error.
In the examples below, the result of each query would be XXX
....
q={!switch case.foo=XXX case.bar=zzz case.yak=qqq}foo q={!switch case.foo=qqq case.bar=XXX case.yak=zzz} bar // extra whitespace q={!switch case.foo=qqq case.bar=zzz default=XXX}asdf // fallback on default q={!switch case=XXX case.bar=zzz case.yak=qqq} // blank input
A practical usage of this QParsePlugin, is in specifying "appends"
fq
params in the configuration of a SearchHandler
, to
provide a fixed set of filter options for clients using custom parameter
names.
Using the example configuration below, clients can optionally specify the
custom parameters in_stock
and shipping
to
override the default filtering behavior, but are limited to the specific
set of legal values (shipping=any|free
,
in_stock=yes|no|all
).
<requestHandler name="/select" class="solr.SearchHandler"> <lst name="defaults"> <str name="in_stock">yes</str> <str name="shipping">any</str> </lst> <lst name="appends"> <str name="fq">{!switch case.all='*:*' case.yes='inStock:true' case.no='inStock:false' v=$in_stock}</str> <str name="fq">{!switch case.any='*:*' case.free='shipping_cost:0.0' v=$shipping}</str> </lst> </requestHandler>
Modifier and Type | Field and Description |
---|---|
static String |
NAME |
static String |
SWITCH_CASE
Used as both a local params key to find the "default" if no
blank input is provided to the parser, as well as a prefix (followed by
'.' for looking up the switch input.
|
static String |
SWITCH_DEFAULT
A local param whose value, if specified, is used if no switch case
matches the parser input.
|
DEFAULT_QTYPE, standardPlugins
Constructor and Description |
---|
SwitchQParserPlugin() |
Modifier and Type | Method and Description |
---|---|
QParser |
createParser(String qstr,
SolrParams localParams,
SolrParams params,
SolrQueryRequest req)
return a
QParser |
void |
init(NamedList args) |
public static String NAME
public static String SWITCH_CASE
public static String SWITCH_DEFAULT
public void init(NamedList args)
public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req)
QParserPlugin
QParser
createParser
in class QParserPlugin
Copyright © 2000-2013 Apache Software Foundation. All Rights Reserved.