Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

elasticsearch insert objects into index

I am new to elasticsearch and looking for a bit of help using the Java API. I have some domain objects E.g.

@XmlRootElement

public class BasicActivity {

private String activityName;
private FullActivity activity;  
// Getters and setters
}

I have created a transport client connected to a node

Client client = new TransportClient()
        .addTransportAddress(new InetSocketTransportAddress("192.168.0.198",9300));

Is there and easy way to insert my object straight into elasticsearch?

I have seen this

IndexResponse response = client.prepareIndex("twitter", "tweet", "1")
                    .setSource(jsonBuilder()
                                .startObject()
                                    .field("user", "kimchy")
                                    .field("postDate", new Date())
                                    .field("message", "trying out Elastic     Search")
                                .endObject()
                              )
                    .execute()
                    .actionGet();

But to do that I would have to convert every object into json, which while possible is not my ideal situation.

If I have a misunderstanding of how it works (architecturally) then please let me know, I am here to learn!

cheers, Rob

like image 629
Rob Avatar asked Nov 16 '11 16:11

Rob


1 Answers

I think you are on the right track. The Java API can be hard to get at times when you are not used to it. I think over time it will get better.

You do have to convert your objects to Json to send them to your ElasticSearch cluster. Gson is one of many popular libraries out there that can do that for you.

The code you show above will create an index. Now to add a document to that index, run something like this.

   Tweet tweet = new Tweet();
   tweet.setId("1234");
   tweet.setMessage("message");

   IndexRequest indexRequest = new IndexRequest("twitter","tweet", tweet.getId());
   indexRequest.source(new Gson().toJson(tweet));
   IndexResponse response = client.index(indexRequest).actionGet();

Check out BulkRequest for indexing several items at once. Once your objects get more complex, you'll need to create Mappings.

I have found great examples in the Guide, but usually more detailed examples in the ES Google Group.

I have to recommend the Head front end, too. It shows you existing indices and items.

like image 149
Andy Avatar answered Nov 15 '22 04:11

Andy