New

The executive guide to generative AI

Read more

Search API

edit

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

edit

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"]
        ]
    }
}
Was this helpful?
Feedback