1

私はelasticsearchで索引付けされたデータセットを持っています。(インデックス名: demoindex1、タイプ名: 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 形式に戻す必要があります。ここで何が間違っていますか?

-elasticsearch の Java ドキュメントを読みましたが、すべての結果データセットを取得する方法については何も見つかりませんでした。

ありがとうございました。

4

1 に答える 1

1

コメントできないので、ここにコメントを書くことしかできません。あなたの質問は理解できたかもしれませんが、間違っていたら訂正してください。

GET index/type/_search で JSON 全体を取得したい場合は、scrollResp.toString() を試してみませんか? 次に、com.fasterxml.jackson などの豊富なライブラリの 1 つを使用して、文字列から JSON ツリーを読み取るだけです。

または、ヒットの _source の JSON を探している場合は、これらのライブラリを使用して、hit.getSourceAsString() の結果を JSON に変換できます。

于 2016-04-21T04:34:21.437 に答える