asticsearch вставляет объекты в индекс - PullRequest
16 голосов
/ 16 ноября 2011

Я новичок вasticsearch и ищу немного помощи с использованием 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));

Есть ли простой способ вставить мой объект прямо в эластичный поиск?

Я видел это

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

28 голосов
/ 16 ноября 2011

Я думаю, вы на правильном пути.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 .Показывает существующие индексы и предметы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...