Как вернуть все результаты в Elasticsearch с помощью Java?

У меня есть набор данных, проиндексированный в elasticsearch. (имя индекса: demoindex1, имя типа: SearchTech). Я хочу вернуть все результаты в формате JSON с помощью Java. Мой код Java выглядит следующим образом:

import java.net.InetAddress;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.search.SearchHit;

public class App {

  public static void main(String[] args) throws Exception {
    Client client = TransportClient.builder().build().addTransportAddress(
        new InetSocketTransportAddress(InetAddress.getByName("localhost"),
            9300));

    SearchResponse scrollResp = client.prepareSearch("demoindex1")
        .setScroll(new TimeValue(60000)).setTypes("SearchTech").setSize(1000)
        .execute().actionGet();
    // Scroll until no hits are returned
    while (true) {

      for (SearchHit hit : scrollResp.getHits()) {
        System.out.println(hit.getSourceAsString()); //hit.get
      }
      scrollResp = client.prepareSearchScroll(scrollResp.getScrollId())
          .setScroll(new TimeValue(60000)).execute().actionGet();
      // Break condition: No hits are returned
      if (scrollResp.getHits().getHits().length == 0) {
        break;
      }
    }
  }
}

Моя java-программа возвращает исходную часть каждого обращения. Но я хочу вернуть все результаты, как мы получаем в Elasticsearch, используя запрос GET index/type/_search. Мне нужен результирующий набор данных обратно в формате JSON. Что я здесь делаю неправильно?

-Я читал документацию JAVA для elasticsearch, но ничего не нашел о том, как вернуть весь результирующий набор данных.

Спасибо.


person Akshay Bijawe    schedule 21.04.2016    source источник


Ответы (1)


Я не могу комментировать, поэтому я могу только написать свой комментарий здесь: возможно, я понял ваш вопрос, но, пожалуйста, поправьте меня, если я ошибаюсь.

Почему бы вам не попробовать scrollResp.toString(), если вы хотите получить весь JSON для GET index/type/_search? Затем вы можете просто прочитать дерево JSON из строки, используя одну из доступных библиотек, например com.fasterxml.jackson.

Или, если вы ищете JSON для _source хита, вы можете преобразовать результат hit.getSourceAsString() в JSON, используя эти библиотеки.

person Arad    schedule 21.04.2016
comment
Спасибо за ваш ответ. Да, я хочу, чтобы на выходе было все дерево Json. Я попробую то, что ты сказал. Спасибо за ответ. - person Akshay Bijawe; 21.04.2016