API Anatomy
editAPI Anatomy
editOnce a GClient has been obtained, all of Elasticsearch APIs can be executed on it. Each Groovy API is exposed using three different mechanisms.
Closure Request
editThe first type is to simply provide the request as a Closure, which
automatically gets resolved into the respective request instance (for
the index API, its the IndexRequest
class). The API returns a special
future, called GActionFuture
. This is a groovier version of
elasticsearch Java ActionFuture
(in turn a nicer extension to Java own
Future
) which allows to register listeners (closures) on it for
success and failures, as well as blocking for the response. For example:
def indexR = client.index { index "test" type "type1" id "1" source { test = "value" complex { value1 = "value1" value2 = "value2" } } } println "Indexed $indexR.response.id into $indexR.response.index/$indexR.response.type"
In the above example, calling indexR.response
will simply block for
the response. We can also block for the response for a specific timeout:
IndexResponse response = indexR.response "5s" // block for 5 seconds, same as: response = indexR.response 5, TimeValue.SECONDS //
We can also register closures that will be called on success and on failure:
indexR.success = {IndexResponse response -> println "Indexed $response.id into $response.index/$response.type" } indexR.failure = {Throwable t -> println "Failed to index: $t.message" }
Request
editThis option allows to pass the actual instance of the request (instead
of a closure) as a parameter. The rest is similar to the closure as a
parameter option (the GActionFuture
handling). For example:
def indexR = client.index (new IndexRequest( index: "test", type: "type1", id: "1", source: { test = "value" complex { value1 = "value1" value2 = "value2" } })) println "Indexed $indexR.response.id into $indexR.response.index/$indexR.response.type"
Java Like
editThe last option is to provide an actual instance of the API request, and
an ActionListener
for the callback. This is exactly like the Java API
with the added gexecute
which returns the GActionFuture
:
def indexR = node.client.prepareIndex("test", "type1", "1").setSource({ test = "value" complex { value1 = "value1" value2 = "value2" } }).gexecute()