Difference between revisions of "ElasticSearch Query DSL"

From PaskvilWiki
Jump to: navigation, search
Line 5: Line 5:
 
== Queries ==
 
== Queries ==
  
=== match ===
+
=== match, multi_match ===
  
=== multi_match ===
+
The ''match'' queries accept, analyze, and construct query out of text/numeric/date. The match family of queries does not go through a "query parsing" process. It does not support field name prefixes, wildcard characters, or other "advance" features.
 +
 
 +
Here, ''message'' is name of the '''field to match in''' (can be also ''_all''):
 +
<pre>{
 +
    "match" : {
 +
        "message" : "this is a test"
 +
    }
 +
}</pre>
 +
 
 +
By default, terms are OR'ed; to '''AND''' them:
 +
 
 +
<pre>{
 +
    "match" : {
 +
        "message" : {
 +
            "query" : "this is a test",
 +
            "operator" : "and"
 +
        }
 +
    }
 +
}</pre>
 +
 
 +
To '''match a phrase''':
 +
<pre>{
 +
    "match_phrase" : {
 +
        "message" : "this is a test"
 +
    }
 +
}</pre>
 +
 
 +
or using the '''last word as prefix''' (the "as you type" search):
 +
<pre>{
 +
    "match_phrase_prefix" : {
 +
        "message" : "this is a test"
 +
    }
 +
}</pre>
 +
 
 +
To match in '''multiple fields''', with optional boosting, use:
 +
<pre>{
 +
  "multi_match" : {
 +
    "query" : "this is a test",
 +
    "fields" : [ "subject^2", "message" ]
 +
  }
 +
}</pre>
 +
where matches in ''subject'' are "twice as important" as matched in ''message''.
  
 
=== bool ===
 
=== bool ===

Revision as of 12:10, 23 January 2013

ES's Query DSL is a language for specifying queries in JSON.

This is by far not an exhaustive documentation, it's just stuff I use the most; see official documentation for more. Especially the boosting and scoring functionality is not documented here to proper extent.

Queries

match, multi_match

The match queries accept, analyze, and construct query out of text/numeric/date. The match family of queries does not go through a "query parsing" process. It does not support field name prefixes, wildcard characters, or other "advance" features.

Here, message is name of the field to match in (can be also _all):

{
    "match" : {
        "message" : "this is a test"
    }
}

By default, terms are OR'ed; to AND them:

{
    "match" : {
        "message" : {
            "query" : "this is a test",
            "operator" : "and"
        }
    }
}

To match a phrase:

{
    "match_phrase" : {
        "message" : "this is a test"
    }
}

or using the last word as prefix (the "as you type" search):

{
    "match_phrase_prefix" : {
        "message" : "this is a test"
    }
}

To match in multiple fields, with optional boosting, use:

{
  "multi_match" : {
    "query" : "this is a test",
    "fields" : [ "subject^2", "message" ]
  }
}

where matches in subject are "twice as important" as matched in message.

bool

boosting

ids

field

filtered

query_string

range

Filters

and, or, not

bool

exists, missing

ids

limit