diff options
Diffstat (limited to 'docs/groovy-api/search.asciidoc')
-rw-r--r-- | docs/groovy-api/search.asciidoc | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/docs/groovy-api/search.asciidoc b/docs/groovy-api/search.asciidoc new file mode 100644 index 0000000..eb9b501 --- /dev/null +++ b/docs/groovy-api/search.asciidoc @@ -0,0 +1,115 @@ +[[search]] +== Search API + +The search API is very similar to the +{java}/search.html[Java search API]. The Groovy +extension allows to provide the search source to execute as a `Closure` +including the query itself (similar to GORM criteria builder): + +[source,js] +-------------------------------------------------- +def search = node.client.search { + indices "test" + types "type1" + source { + query { + term(test: "value") + } + } +} + +search.response.hits.each {SearchHit hit -> + println "Got hit $hit.id from $hit.index/$hit.type" +} +-------------------------------------------------- + +It can also be executed using the "Java API" while still using a closure +for the query: + +[source,js] +-------------------------------------------------- +def search = node.client.prepareSearch("test").setQuery({ + term(test: "value") +}).gexecute(); + +search.response.hits.each {SearchHit hit -> + println "Got hit $hit.id from $hit.index/$hit.type" +} +-------------------------------------------------- + +The format of the search `Closure` follows the same JSON syntax as the +{ref}/search-search.html[Search API] request. + + +[[more-examples]] +=== More examples + +Term query where multiple values are provided (see +{ref}/query-dsl-terms-query.html[terms]): + +[source,js] +-------------------------------------------------- +def search = node.client.search { + indices "test" + types "type1" + source { + query { + terms(test: ["value1", "value2"]) + } + } +} +-------------------------------------------------- + +Query string (see +{ref}/query-dsl-query-string-query.html[query string]): + +[source,js] +-------------------------------------------------- +def search = node.client.search { + indices "test" + types "type1" + source { + query { + query_string( + fields: ["test"], + query: "value1 value2") + } + } +} +-------------------------------------------------- + +Pagination (see +{ref}/search-request-from-size.html[from/size]): + +[source,js] +-------------------------------------------------- +def search = node.client.search { + indices "test" + types "type1" + source { + from = 0 + size = 10 + query { + term(test: "value") + } + } +} +-------------------------------------------------- + +Sorting (see {ref}/search-request-sort.html[sort]): + +[source,js] +-------------------------------------------------- +def search = node.client.search { + indices "test" + types "type1" + source { + query { + term(test: "value") + } + sort = [ + date : [ order: "desc"] + ] + } +} +-------------------------------------------------- |