# Save elasticsearch document field value in java variable

**URL:** <https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227>\
**Category:** Elasticsearch\
**Created:** [January 19, 2018, 12:27pm UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227 "2018-01-19T12:27:06Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

**Author:** ![devil\_srj7](https://avatars.discourse-cdn.com/v4/letter/d/8edcca/32.png) [@devil\_srj7](https://discuss.elastic.co/u/devil_srj7)\
**Post date:** [January 19, 2018, 12:27pm UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/1 "2018-01-19T12:27:07Z")

</div>

How can I save the the field value in a variable in Java.

```
{
  "took": 6,
  "timed_out": false,
  "_shards": {
    "total": 10,
    "successful": 10,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1776430,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "num_prg_expenditure_avg": {
      "value": 721421.2185617918
    },
    "expenditure_avg": {
      "value": 3876729.261930876
    }
  }
}

```

I need to access expenditure\_avg and num\_prg\_expenditure\_avg from above search result to store them in Java variable.

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [January 19, 2018, 1:04pm UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/2 "2018-01-19T13:04:21Z")

</div>

Which java client are you using?  
How do you make that call?

---

<div class="post-metadata">

**Author:** ![devil\_srj7](https://avatars.discourse-cdn.com/v4/letter/d/8edcca/32.png) [@devil\_srj7](https://discuss.elastic.co/u/devil_srj7)\
**Post date:** [January 22, 2018, 10:16am UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/3 "2018-01-22T10:16:48Z")

</div>

I want to use both

1. High Level Rest Client

2. Low Level Rest Client.

3. By High Level

4. For Low Level Client

And the output is:

```
{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 10,
    "successful" : 10,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1776430,
    "max_score" : 0.0,
    "hits" : []
  },
  "aggregations" : {
    "num_prg_expenditure_avg" : {
      "value" : 721421.2185617918
    },
    "expenditure_avg" : {
      "value" : 3876729.261930876
    }
  }
}

```

and how can I use pretty in High Level Client?

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [January 22, 2018, 11:21am UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/4 "2018-01-22T11:21:56Z")

</div>

I'm not sure to understand what your problem is.

The only question I can see is:

> and how can I use pretty in High Level Client?

The High Level client gives you back Java objects, not Strings. What do you want to do exactly?

---

<div class="post-metadata">

**Author:** ![devil\_srj7](https://avatars.discourse-cdn.com/v4/letter/d/8edcca/32.png) [@devil\_srj7](https://discuss.elastic.co/u/devil_srj7)\
**Post date:** [January 22, 2018, 12:07pm UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/5 "2018-01-22T12:07:56Z")

</div>

![Screenshot (2)](https://us1.discourse-cdn.com/elastic/original/3X/1/4/14b532948cd2c661ae2229e791ac9ea2632f8182.png)

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [January 22, 2018, 12:55pm UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/6 "2018-01-22T12:55:34Z")

</div>

The `SearchResponse` object gives you access to the aggregations.

---

<div class="post-metadata">

**Author:** ![devil\_srj7](https://avatars.discourse-cdn.com/v4/letter/d/8edcca/32.png) [@devil\_srj7](https://discuss.elastic.co/u/devil_srj7)\
**Post date:** [January 22, 2018, 1:31pm UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/7 "2018-01-22T13:31:53Z")

</div>

How can i use SearchResponse instead of Response

`Response response = client.performRequest("POST","mis_monthly_allotment_expenditure,mis_work_prg_exp/_search",paramMap,entity);`

Here, Entity has my query in jsonString.

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [January 22, 2018, 1:45pm UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/8 "2018-01-22T13:45:02Z")

</div>

With the `RestHighLevelClient` as you already shown.

---

<div class="post-metadata">

**Author:** ![devil\_srj7](https://avatars.discourse-cdn.com/v4/letter/d/8edcca/32.png) [@devil\_srj7](https://discuss.elastic.co/u/devil_srj7)\
**Post date:** [January 22, 2018, 1:45pm UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/9 "2018-01-22T13:45:39Z")

</div>

How should i alter my Response to SearchResponse??

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [January 22, 2018, 1:59pm UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/10 "2018-01-22T13:59:43Z")

</div>

I did not mean that but to use:

```auto
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost",9200,"http")));
 	
SearchRequest sr = new SearchRequest("index");
SearchSourceBuilder ssb = new SearchSourceBuilder();

// Add whatever here

sr.source(ssb);
SearchResponse response = client.search(sr);

```

---

<div class="post-metadata">

**Author:** ![devil\_srj7](https://avatars.discourse-cdn.com/v4/letter/d/8edcca/32.png) [@devil\_srj7](https://discuss.elastic.co/u/devil_srj7)\
**Post date:** [January 22, 2018, 2:03pm UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/11 "2018-01-22T14:03:40Z")

</div>

> [@dadoonet](#):
>
> RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost",9200,"http")));
> 
> SearchRequest sr = new SearchRequest("index");  
> SearchSourceBuilder ssb = new SearchSourceBuilder();
> 
> // Add whatever here
> 
> sr.source(ssb);  
> SearchResponse response = client.search(sr);

I have already implemented these!  
But the question remains as how do i access the field values by any methods??

Sorry I am a student and new to elasticsearch.😁

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [January 22, 2018, 2:44pm UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/12 "2018-01-22T14:44:47Z")

</div>

So this gives you back a `SearchResponse` object right?

So then just do that: [https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-search.html#java-rest-high-retrieve-aggs](https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-search.html#java-rest-high-retrieve-aggs)

---

<div class="post-metadata">

**Author:** ![devil\_srj7](https://avatars.discourse-cdn.com/v4/letter/d/8edcca/32.png) [@devil\_srj7](https://discuss.elastic.co/u/devil_srj7)\
**Post date:** [January 23, 2018, 9:21am UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/13 "2018-01-23T09:21:06Z")

</div>

```
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
TermsAggregationBuilder aggregation = AggregationBuilders.terms("by_company")
        .field("company.keyword");
aggregation.subAggregation(AggregationBuilders.avg("average_age")
        .field("age"));
searchSourceBuilder.aggregation(aggregation);

```

can you please explain what is "by\_company"and "company.keyword"

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [January 23, 2018, 10:09am UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/14 "2018-01-23T10:09:25Z")

</div>

`by_company` is the aggregation name you want to use. Can be whatever like `expenditure_avg`.  
`company.keyword` is the field name you want to run the aggregation on. In your case, it can be `expenditure`.

So you can write something like:

```auto
SearchSourceBuilder ssb = new SearchSourceBuilder();
ssb.aggregation(AggregationBuilders.avg("expenditure_avg").field("expenditure"));
ssb.aggregation(AggregationBuilders.avg("num_prg_expenditure_avg").field("num_prg_expanditure"));

```

---

<div class="post-metadata">

**Author:** ![devil\_srj7](https://avatars.discourse-cdn.com/v4/letter/d/8edcca/32.png) [@devil\_srj7](https://discuss.elastic.co/u/devil_srj7)\
**Post date:** [January 23, 2018, 10:23am UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/15 "2018-01-23T10:23:35Z")

</div>

```
Aggregations aggregations = searchResponse.getAggregations();
    Terms byCompanyAggregation = aggregations.get("by_company"); 
    Bucket elasticBucket = byCompanyAggregation.getBucketByKey("Elastic"); 
    Avg averageAge = elasticBucket.getAggregations().get("average_age"); 
    double avg = averageAge.getValue();

```

so similarly here  
`by_company` is `expenditure_avg`  
Then what is `Elastic` ?? what does `getBucketByKey` specify?  
and what would be `average_key` for my case.

As I cannot get `.getValue()`

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [January 23, 2018, 10:48am UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/16 "2018-01-23T10:48:42Z")

</div>

I think I gave an example.

May be you don't understand what aggregations are in general ?

May be read this then? [https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html)

---

<div class="post-metadata">

**Author:** ![devil\_srj7](https://avatars.discourse-cdn.com/v4/letter/d/8edcca/32.png) [@devil\_srj7](https://discuss.elastic.co/u/devil_srj7)\
**Post date:** [January 23, 2018, 10:55am UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/17 "2018-01-23T10:55:46Z")

</div>

> [@dadoonet](#):
>
> May be you don't understand what aggregations are in general ?

I do.

Can you share your sample code as how to store the field value from elasticsearch query to a java variable.  
Maybe that can help.

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [January 23, 2018, 11:12am UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/18 "2018-01-23T11:12:06Z")

</div>

> <https://github.com/dadoonet/legacy-search/blob/04-aggs/src/main/java/fr/pilato/demo/legacysearch/dao/ElasticsearchDao.java#L101-L118>

> how to store the field value from elasticsearch query to a java variable.

If you meant reading a SearchResponse object, I already pasted a link previously: [Search API | Java REST Client [7.17] | Elastic](https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-search.html#java-rest-high-retrieve-aggs)

If you can't make it work, create a simple Java JUnit test method which does everything (delete index, create index, put document, search) and then we can start from there. But I don't understand what you don't understand.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [February 20, 2018, 11:12am UTC](https://discuss.elastic.co/t/save-elasticsearch-document-field-value-in-java-variable/116227/19 "2018-02-20T11:12:29Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
