一尘不染

elasticsearch将对象插入索引

elasticsearch

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

如果我对它的工作方式(架构上)有误解,请告诉我,我在这里学习!

欢呼声,罗布


阅读 364

收藏
2020-06-22

共1个答案

一尘不染

我认为您在正确的轨道上。当您不习惯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前端。它向您显示现有索引和项目。

2020-06-22