2011-11-16 69 views
15

我是elasticsearch的新手,并且正在寻找一些使用Java API的帮助。我有一些域对象 E.g.elasticsearch将对象插入索引

@XmlRootElement 

public class BasicActivity { 

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

我创建连接到节点

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

运输客户有没有简便的方法来插入我的对象直接进入elasticsearch?

我已经看到了这

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(); 

但要做到这一点,我将不得不每一个对象转换为JSON,这虽然有可能不是我理想的情况下转换。

如果我对它是如何工作的误解(建筑),请让我知道,我在这里学习!

欢呼声, 罗布

回答

26

我认为你是在正确的轨道上。有时你不习惯使用Java API。我想随着时间的推移它会变得更好。

您必须将对象转换为Json才能将它们发送到您的ElasticSearch集群。 Gson是许多流行的图书馆之一,可以为你做到这一点。

上面显示的代码将创建一个索引。现在,将文档添加到该索引,运行这样的东西。

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(); 

退房BulkRequest在一次索引几个项目。一旦你的对象变得更复杂,你需要创建Mappings

我在Guide中发现了很好的例子,但通常在ES Google Group中有更详细的例子。

我也必须推荐Head前端。它显示你现有的指数和项目。

+0

现货上,非常感谢你真的有帮助 – Rob

+6

杰克逊是另一个Json库,它在性能方面似乎与Gson相比毫不逊色。 http://jackson.codehaus.org/Tutorial – Andy