Search API

The search API is very similar to the 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):

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:

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 Search API request.

More examples

Term query where multiple values are provided (see terms):

def search = node.client.search {
    indices "test"
    types "type1"
    source {
        query {
            terms(test: ["value1", "value2"])
        }
    }
}

Query string (see query string):

def search = node.client.search {
    indices "test"
    types "type1"
    source {
        query {
            query_string(
                fields: ["test"],
                query: "value1 value2")
        }
    }
}

Pagination (see from/size):

def search = node.client.search {
    indices "test"
    types "type1"
    source {
        from = 0
        size = 10
        query {
            term(test: "value")
        }
    }
}

Sorting (see sort):

def search = node.client.search {
    indices "test"
    types "type1"
    source {
        query {
            term(test: "value")
        }
        sort = [
            date : [ order: "desc"]
        ]
    }
}