summaryrefslogtreecommitdiff
path: root/docs/groovy-api/search.asciidoc
diff options
context:
space:
mode:
Diffstat (limited to 'docs/groovy-api/search.asciidoc')
-rw-r--r--docs/groovy-api/search.asciidoc115
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"]
+ ]
+ }
+}
+--------------------------------------------------