如何使用Java返回Elasticsearch中的所有结果?

时间:2016-04-21 00:04:01

标签: java elasticsearch elasticsearch-java-api

我在elasticsearch中索引了一个数据集。 (index-name:demoindex1,type-name:SearchTech)。我希望使用Java以JSON格式返回所有结果。我的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程序返回每个匹配的源部分。但是,当我们使用查询GET index / type / _search进入Elasticsearch时,我希望得到所有结果。 我需要以JSON格式返回结果数据集。我在这做错了什么?

- 我已经阅读了弹性搜索的JAVA文档,但我找不到任何关于获取所有结果数据集的信息。

谢谢。

1 个答案:

答案 0 :(得分:1)

我不能发表评论所以我只能在这里写评论:我可能已经理解了你的问题,但如果我错了,请纠正我。

如果你想获得GET索引/类型/ _search的整个JSON,为什么不尝试使用scrollResp.toString()?然后,您可以使用丰富的库之一(例如com.fasterxml.jackson)从字符串中读取JSON树。

或者如果您正在为命中的_source寻找JSON,您可以使用这些库将hit.getSourceAsString()的结果转换为JSON。