115 lines
2.7 KiB
Plaintext
115 lines
2.7 KiB
Plaintext
|
[[search]]
|
||
|
== Search API
|
||
|
|
||
|
The search API is very similar to the
|
||
|
link:{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
|
||
|
link:{ref}/search-search.html[Search API] request.
|
||
|
|
||
|
[float]
|
||
|
=== More examples
|
||
|
|
||
|
Term query where multiple values are provided (see
|
||
|
link:{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
|
||
|
link:{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
|
||
|
link:{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 link:{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"]
|
||
|
]
|
||
|
}
|
||
|
}
|
||
|
--------------------------------------------------
|