Elasticsearch вставляют объекты в индекс

Я новичок в поиске elastics и искал немного помощи с использованием Java API. У меня есть некоторые объекты домена Например.

@XmlRootElement

public class BasicActivity {

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

Я создал транспортный клиент, подключенный к node

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

Есть ли простой способ вставить мой объект прямо в поиск elastics?

Я видел это

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, который, хотя это возможно, не является моей идеальной ситуацией.

Если у меня есть неправильное понимание того, как это работает (архитектурно), то, пожалуйста, дайте мне знать, я здесь, чтобы учиться!

веселит, Rob

Ответы

Ответ 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.

Я нашел отличные примеры в Guide, но обычно более подробные примеры в ES Google Group.

Я должен рекомендовать Head переднюю часть. Он показывает существующие индексы и элементы.