18

我是 elasticsearch 新手,正在寻找使用 Java API 的帮助。我有一些域对象,例如

@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,这虽然可能不是我的理想情况。

如果我对它的工作原理(架构)有误解,请告诉我,我是来学习的!

干杯,罗伯

4

1 回答 1

33

我认为你在正确的轨道上。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

我在指南中找到了很好的示例,但通常在ES Google Group中找到了更详细的示例。

我也必须推荐Head前端。它向您显示现有的索引和项目。

于 2011-11-16T17:47:57.090 回答