I am trying to get started with the Java API, using the excellent tutorial found here:
http://www.slideshare.net/dadoonet/hands-on-lab-elasticsearch But I am still having a lot of trouble. Below is a sample of code that I have written: package ca.nrc.ElasticSearch; import org.codehaus.jackson.map.ObjectMapper; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.Client; import org.elasticsearch.node.NodeBuilder; public class ElasticSearchRunner { static ObjectMapper mapper; static Client client; static String indexName = "meal5"; static String typeName = "beer"; static long startTimeMSecs; public static void main(String[] args) throws Exception { startTimeMSecs = System.currentTimeMillis(); mapper = new ObjectMapper(); // create once, reuse echo("Creating the ElasticSearch client..."); client = NodeBuilder.nodeBuilder().node().client(); // Does this create a brand new cluster? // client = NodeBuilder.nodeBuilder().clusterName("handson").client(true).node().client(); // Joins existing cluster called "handson" echo("DONE creating the ElasticSearch client... Elapsed time = "+elapsedSecs()+" secs."); echo("Creating a beer object..."); Beer beer = new Beer("Heineken", Colour.PALE, 0.33, 3); String jsonString = mapper.writeValueAsString(beer); echo("DONE Creating a beer object..."); echo("Indexing the beer object..."); IndexResponse ir = null; ir = client.prepareIndex(indexName, typeName).setSource(jsonString) .execute().actionGet(); echo("DONE Indexing the beer object..."); echo("Retrieving the beer object..."); GetResponse gr = null; gr = client.prepareGet(indexName, typeName, ir.getId()).execute() .actionGet(); echo("DONE Retrieving the beer object..."); } public static float elapsedSecs() { float elapsed = (System.currentTimeMillis() - startTimeMSecs)/1000; return elapsed; } public static void echo(String mess) { mess = mess + " (Elapsed so far: "+elapsedSecs()+" seconds)"; System.out.println(mess); } } It works, "sort of"... If I use the first method for creating the client: client = NodeBuilder.nodeBuilder().node().client(); Then it works fin the first time I run it. However: *** ISSUE 1: If I try to inspect the meal index with Marvel, I don't find it. Also, *** ISSUE 2: If I run the application a second time, I get the following output: Creating the ElasticSearch client... (Elapsed so far: 0.0 seconds) log4j:WARN No appenders could be found for logger (org.elasticsearch.node). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. DONE creating the ElasticSearch client... Elapsed time = 9.0 secs. (Elapsed so far: 9.0 seconds) Creating a beer object... (Elapsed so far: 9.0 seconds) DONE Creating a beer object... (Elapsed so far: 9.0 seconds) Indexing the beer object... (Elapsed so far: 9.0 seconds) Exception in thread "main" org.elasticsearch.action.UnavailableShardsException: [meal5][0] [2] shardIt, [0] active : Timeout waiting for [1m], request: index {[meal5][beer][B3F5ZEmSTruqdnlxhYviFg], source[{"brand":"Heineken","colour":"PALE","size":0.33,"price":3.0}]} at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.raiseTimeoutFailure(TransportShardReplicationOperationAction.java:526) at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$3.onTimeout(TransportShardReplicationOperationAction.java:516) at org.elasticsearch.cluster.ClusterStateObserver$ObserverClusterStateListener.onTimeout(ClusterStateObserver.java:239) at org.elasticsearch.cluster.service.InternalClusterService$NotifyTimeout.run(InternalClusterService.java:494) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) For me to be able to run the application again, I have to change the indexName variable to a different value (ex: "meal6"). Also: *** ISSUE 3: If I try using the second method for creating a Client, then it doesn't work. More specifically, if I use this method: client = NodeBuilder.nodeBuilder().clusterName("handson").client(true).node().client(); This yields: Creating the ElasticSearch client... (Elapsed so far: 0.0 seconds) log4j:WARN No appenders could be found for logger (org.elasticsearch.node). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. DONE creating the ElasticSearch client... Elapsed time = 34.0 secs. (Elapsed so far: 34.0 seconds) Creating a beer object... (Elapsed so far: 34.0 seconds) DONE Creating a beer object... (Elapsed so far: 34.0 seconds) Indexing the beer object... (Elapsed so far: 34.0 seconds) Exception in thread "main" org.elasticsearch.discovery.MasterNotDiscoveredException: waited for [1m] at org.elasticsearch.action.support.master.TransportMasterNodeOperationAction$4.onTimeout(TransportMasterNodeOperationAction.java:170) at org.elasticsearch.cluster.ClusterStateObserver$ObserverClusterStateListener.onTimeout(ClusterStateObserver.java:239) at org.elasticsearch.cluster.service.InternalClusterService$NotifyTimeout.run(InternalClusterService.java:494) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) Yet, the "handson" cluster does exist and I can see it in Marvel. Finally, I am puzzled by the following: *** ISSUE 4: It seems that it takes ES 8-9 secs to create a Client using the first method, and >30 secs with the second method. That seems really high. Is that normal? Any help you can provide with either of those issues will be greatly appreciated. Thx. Alain -- You received this message because you are subscribed to the Google Groups "elasticsearch" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/ba7e38a6-fb11-4a4d-95b6-4b0f2c904061%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
