Hiya
I'm trying to formalise the spec for the Query DSL used by
ElasticSearch, both for my own understanding, and for making the Perl
API more aware. The current docs assume a working knowledge of
Lucene, which I don't have, so I'm writing this email to have my
assumptions checked.
Below I've broken down all possible values that a query can have.
Please could you check through it and make sure I'm not missing
anything.
Notes:
- I've assumed that the various Filters are essentially the same as
the related Query, but without a "boost", and, where appropriate,
accepting other FILTER_CLAUSEs instead of other QUERY_CLAUSEs - I think that filteredQuery.filter should accept an array of filters
as well (as bool.must does) - Am I right in saying that /_count and delete_by_query accept a
QUERY_CLAUSE? - This correct: "term"s are for pre-tokenised values, while
"queryString" is for text/phrases that need to be parsed? - In queryString, what do "prefix field", "enablePositionIncrements"
and "fuzzyPrefixLength" mean?
thanks
Clint
QUERY DSL SPEC: (better read in fixed-width font)
curl -XGET 'http://$server/_all/_search -d '{ TOPLEVEL }'
curl -XGET 'http://$server/_all/$types/_search -d '{ TOPLEVEL }'
curl -XGET 'http://$server/$indices/_search -d '{ TOPLEVEL }'
curl -XGET 'http://$server/$indices/$types/_search -d '{ TOPLEVEL }'
TOPLEVEL:
{
explain: BOOL,
from: INT,
size: INT,
fields: ["field_1", "field_n"],
query: { QUERY_CLAUSE },
facets: { FACETS_CLAUSE },
sort: { SORT_CLAUSE }
}
QUERY_CLAUSE:
{
term: { TERM_QUERY }
| range: { RANGE_QUERY }
| prefix: { PREFIX_QUERY }
| wildcard: { WILDCARD_QUERY }
| matchAll: { MATCH_ALL_QUERY }
| queryString: { QUERY_STRING_QUERY }
| bool: { BOOLEAN_QUERY }
| disMax: { DISMAX_QUERY }
| constantScore: { CONSTANT_SCORE_QUERY }
| filteredQuery: { FILTERED_QUERY },
}
FILTER_CLAUSE:
{
query: { QUERY_CLAUSE },
| term: { TERM_FILTER },
| range: { RANGE_FILTER },
| prefix: { PREFIX_FILTER },
| wildcard: { WILDCARD_FILTER },
| bool: { BOOLEAN_FILTER },
| constantScore: { CONSTANT_SCORE_QUERY }
}
FACETS_CLAUSE:
{
$facet_name_1: { FILTER_CLAUSE },
$facet_name_n: ...
}
SORT_CLAUSE:
{
$fieldname_1 | "score" : {} | { reverse: BOOL },
$fieldname_n | "score" : ...
}
TERM_FILTER:
{ $fieldname_1: VALUE_1, $fieldname_n: VALUE_n }
TERM_QUERY:
TERM_FILTER
| {
$fieldname_1: { value: VALUE_1, boost: FLOAT_1 },
$fieldname_n: ...
}
PREFIX_FILTER:
{ $fieldname_1: STRING_1, $fieldname_n: STRING_n }
PREFIX_QUERY:
PREFIX_FILTER
| {
$fieldname_1: { prefix: STRING_1, boost: FLOAT_1 },
$fieldname_n: ...
}
WILDCARD_FILTER:
{ $fieldname_1: STRING_1, $fieldname_n: STRING_n }
WILDCARD_QUERY:
WILDCARD_FILTER
| {
$fieldname_1: { wildcard: STRING_1, boost: FLOAT_1 },
$fieldname_n: ...
}
MATCH_ALL_QUERY:
{}
| { boost: FLOAT }
RANGE_FILTER:
{ $fieldname: {
from: INT | FLOAT | STRING,
to: INT | FLOAT | STRING,
includeLower: BOOL,
includeUpper: BOOL,
}}
RANGE_QUERY:
{ $fieldname: {
from: INT | FLOAT | STRING,
to: INT | FLOAT | STRING,
includeLower: BOOL
includeUpper: BOOL
boost: FLOAT
}}
BOOLEAN_FILTER:
{
must: { FILTER_CLAUSE } | [ { FILTER_CLAUSE }, ... ],
should: { FILTER_CLAUSE } | [ { FILTER_CLAUSE }, ... ],
mustNot: { FILTER_CLAUSE } | [ { FILTER_CLAUSE }, ... ],
minimumNumberShouldMatch: INT
}
BOOLEAN_QUERY:
{
must: { QUERY_CLAUSE} | [ { QUERY_CLAUSE }, ... ],
should: { QUERY_CLAUSE} | [ { QUERY_CLAUSE }, ... ],
mustNot: { QUERY_CLAUSE} | [ { QUERY_CLAUSE }, ... ],
boost: FLOAT,
minimumNumberShouldMatch: INT
}
DISMAX_QUERY:
{
queries: [ { QUERY_CLAUSE }, ... ],
tieBreakerMultiplier: FLOAT,
boost: FLOAT
}
CONSTANT_SCORE_QUERY:
{
filter: { FILTER_CLAUSE }
boost: FLOAT
}
FILTERED_QUERY:
{
query: { QUERY_CLAUSE },
filter: { FILTER_CLAUSE, ... }
}
QUERY_STRING_QUERY:
{
query: STRING,
defaultField: $fieldname,
defaultOperator: "AND" | "OR",
analyzer: STRING,
allowLeadingWildcard: BOOL,
lowercaseExpandedTerms: BOOL,
enablePositionIncrements: BOOL,
fuzzyPrefixLength: BOOL,
fuzzyMinSim: FLOAT,
phraseSlop: INT,
boost: FLOAT
}
ARGUMENT TYPES:
- BOOL: true | false
- INT: integer eg 5
- FLOAT: float eg 1.2
- STRING: text eg "foo"
- VALUE: BOOL | INT | FLOAT | STRING