【问题标题】:ElasticSearch JavaAPI RestClient not giving responseElasticSearch JavaAPI RestClient 没有响应
【发布时间】:2018-06-26 09:53:05
【问题描述】:

我正在使用 RestClient JavaAPI 从弹性搜索中获取文档。但我的请求没有得到回应。

我正在使用QueryBuilder 形成我的请求。

请找到我用来从弹性搜索中获取文档的 java 代码

private final static String ATTACHMENT = "document_attachment";
private final static String TYPE = "doc";
static long BUFFER_SIZE = 520 * 1024 * 1024;   //  <---- set buffer to 120MB instead of 100MB

public static void main(String args[])
{
    RestClient restClient = null;
    Response contentSearchResponse=null;
    try {

    restClient = RestClient.builder(
                    new HttpHost("localhost", 9200, "http"),
                    new HttpHost("localhost", 9201, "http")).build();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }

    SearchRequest contentSearchRequest = new SearchRequest(ATTACHMENT); 
    SearchSourceBuilder contentSearchSourceBuilder = new SearchSourceBuilder();
    contentSearchRequest.types(TYPE);
    QueryBuilder attachmentQB = QueryBuilders.matchQuery("attachment.content", "activa");
    contentSearchSourceBuilder.query(attachmentQB);
    contentSearchSourceBuilder.size(50);
    contentSearchRequest.source(contentSearchSourceBuilder);
    System.out.println("Request --->"+contentSearchRequest.toString());

    Map<String, String> params = Collections.emptyMap();
    HttpEntity entity = new NStringEntity(contentSearchSourceBuilder.toString(), ContentType.APPLICATION_JSON);
    HttpAsyncResponseConsumerFactory.HeapBufferedResponseConsumerFactory consumerFactory =
            new HttpAsyncResponseConsumerFactory.HeapBufferedResponseConsumerFactory((int) BUFFER_SIZE);

    System.out.println("Printing Entity---->"+entity.toString());

    try {
        contentSearchResponse = restClient.performRequest("GET", "/document_attachment/doc/_search", params, entity, consumerFactory);
    } catch (IOException e1) {
        e1.printStackTrace();
    } 
    System.out.println("Entity Response --->"+contentSearchResponse.getEntity());
    }

请找到有关我正在使用 Sysout 打印的请求、实体和响应的详细信息。

Request --->SearchRequest{searchType=QUERY_THEN_FETCH, indices=[document_attachment], indicesOptions=IndicesOptions[id=38, ignore_unavailable=false, allow_no_indices=true, expand_wildcards_open=true, expand_wildcards_closed=false, allow_aliases_to_multiple_indices=true, forbid_closed_indices=true, ignore_aliases=false], types=[doc], routing='null', preference='null', requestCache=null, scroll=null, maxConcurrentShardRequests=0, batchedReduceSize=512, preFilterShardSize=128, source={"size":50,"query":{"match":{"id":{"query":"87740","operator":"OR","prefix_length":0,"max_expansions":50,"fuzzy_transpositions":true,"lenient":false,"zero_terms_query":"NONE","auto_generate_synonyms_phrase_query":true,"boost":1.0}}}}}
Printing Entity---->[Content-Type: application/json; charset=UTF-8,Content-Length: 233,Chunked: false]
Entity Response --->[Content-Length: 929382,Chunked: false]

【问题讨论】:

    标签: java elasticsearch elastic-stack


    【解决方案1】:

    您确实收到了 929382 字节长的响应。所以你只需要从响应中读取数据:

    String responseBody = EntityUtils.toString(response.getEntity());
    

    【讨论】:

    • 如果我们得到单个文档,我将responseBody解析为JSONObject,但是如果我们从responseBody获取多个文档,我们如何解析它。?
    • 我已经为同一个问题创建了单独的问题。stackoverflow.com/questions/51043963/…
    猜你喜欢
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多