Differences between revisions 40 and 41
Revision 40 as of 2013-11-15 23:01:27
Size: 5592
Editor: ShawnHeisey
Comment: "Goop" seemed like a typo. I never imagined that was actually the error! :)
Revision 41 as of 2015-04-07 19:27:08
Size: 5572
Editor: CarstenBluem
Comment: Fixed URL
Deletions are marked like this. Additions are marked like this.
Line 71: Line 71:
 * See Yonik Seeley's blog on [[http://www.lucidimagination.com/blog/2009/03/31/nested-queries-in-solr/|Nested Queries in Solr]]  * See Yonik Seeley's blog on [[https://lucidworks.com/blog/nested-queries-in-solr/|Nested Queries in Solr]]

Solr supports multiple query syntaxes through its query parser plugin framework. For documentation on the full list of available parser types, see the all subclasses of QParserPlugin in the javadoc, and also the QueryParser wiki page.

Specifying a Query Parser

Users can specify the type of a query in most places that accept a query string using LocalParams syntax. For example, the following query string specifies a lucene/solr query with a default operator of "AND" and a default field of "text": q={!lucene q.op=AND df=text}myfield:foo +bar -baz

In standard Solr search handlers, the defType param can be used to specify the default type of the main query (ie: the q param) but it only affects the main query -- The default type of all other query parameters will remain "lucene".

q={!func}popularity is thus equivalent to defType=func&q=popularity in the standard Solr search handler.

Default QParserPlugin: LuceneQParserPlugin

The standard Solr Query Parser syntax is a superset of the Lucene Query Parser Syntax (pre-4.0) or (4.0+). Certain characters are special (pre-4.0) or (4.0+) and those characters need to be escaped using quotes or a backslash if you want them to be treated as literals. For example, to search for (1+1):2 use one of the following syntaxes...


<!> Solr 4.0 added regular expression support, which means that '/' is now a special character and must be escaped if searching for literal forward slash.

Differences From Lucene Query Parser

Differences in the Solr Query Parser include

  • Range queries [a TO z], prefix queries a*, and wildcard queries a*b are constant-scoring (all matching documents get an equal score). The scoring factors tf, idf, index boost, and coord are not used. There is no limitation on the number of terms that match (as there was in past versions of Lucene).

    • Lucene 2.1 has also switched to use ConstantScoreRangeQuery for its range queries.

  • A * may be used for either or both endpoints to specify an open-ended range query.

    • field:[* TO 100] finds all field values less than or equal to 100

    • field:[100 TO *] finds all field values greater than or equal to 100

    • field:[* TO *] matches all documents with the field

  • Pure negative queries (all clauses prohibited) are allowed.
    • -inStock:false finds all field values where inStock is not false

    • -field:[* TO *] finds all documents without a value for field

  • A hook into FunctionQuery syntax. Quotes will be necessary to encapsulate the function when it includes parentheses.

    • Example: _val_:myfield

    • Example: _val_:"recip(rord(myfield),1,2,3)"

  • Nested query support for any type of query parser (via QParserPlugin). Quotes will often be necessary to encapsulate the nested query if it contains reserved characters.
    • Example: _query_:"{!dismax qf=myfield}how now brown cow"

Although not technically a Syntax difference, please note that if you use the Solr "DateField" type, any queries on those fields (typically range queries) should use either the Complete ISO 8601 Date syntax that field supports, or the DateMath Syntax to get relative dates. Examples:

  • timestamp:[* TO NOW]

  • createdate:[1976-03-06T23:59:59.999Z TO *]

  • createdate:[1995-12-31T23:59:59.999Z TO 2007-03-06T00:00:00Z]

  • pubdate:[NOW-1YEAR/DAY TO NOW/DAY+1DAY]

  • createdate:[1976-03-06T23:59:59.999Z TO 1976-03-06T23:59:59.999Z+1YEAR]

  • createdate:[1976-03-06T23:59:59.999Z/YEAR TO 1976-03-06T23:59:59.999Z]

NOTE: TO must be uppercase, or Solr will report a 'RANGE_GOOP' error.

Dismax and eDismax Query Parser

The (e)dismax query parser provides query time field level boosting granularity, with less special syntax. (e)Dismax generally makes the best first choice query parser for user facing Solr applications. The (e)dismax handler parameters are described in detail here: DisMaxQParserPlugin and ExtendedDisMax.

More information

See SolrPlugins for information on writing your own query parser.

See QueryParser for a list of supported query parsers.

NOTE: URL Escaping Special Characters

Please note that many characters in the Solr Query Syntax (most notable the plus sign: "+") are special characters in URLs, so when constructing request URLs manually, you must properly URL-Encode these characters.

                                     q=  +popularity:[10   TO   *]     +section:0

For more information

SolrQuerySyntax (last edited 2015-04-07 19:27:08 by CarstenBluem)