# Tophits - java vs CURL

**URL:** <https://discuss.elastic.co/t/tophits-java-vs-curl/122587>\
**Category:** Elasticsearch\
**Created:** [March 5, 2018, 8:17pm UTC](https://discuss.elastic.co/t/tophits-java-vs-curl/122587 "2018-03-05T20:17:59Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![fgbogdan](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/fgbogdan/32/53039_2.png) [@fgbogdan](https://discuss.elastic.co/u/fgbogdan)\
**Post date:** [March 5, 2018, 8:17pm UTC](https://discuss.elastic.co/t/tophits-java-vs-curl/122587/1 "2018-03-05T20:17:59Z")

</div>

I have the next curl json and I want to do the same thing in Java - but the result is not the same.  
The scope is to retrieve not only the last values but also some other fields, and these fields are missing from java result.  
What I do wrong ?

JSON - with CURL  
{  
"size": 0,  
"query": {  
"bool": {  
"must": [  
{"prefix": {"filename.keyword": "/001"}}  
,  
{"term": {"ftype": "1"}}  
]  
}  
},  
"aggs": {  
"sources": {  
"terms": {  
"field": "filename.keyword"  
},  
"aggs": {  
"latest": {  
"top\_hits": {  
"size": 1,  
"\_source": [  
"inode",  
"filename.keyword",  
"snapshot\_id",  
"snapshot\_uuid",  
"snapshot\_time\_start"  
],  
"sort": {  
"snapshot\_time\_start": "desc"  
}  
}  
}  
}  
}  
}  
}

and JAVA code.

```
Client client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(address);

	BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
	QueryBuilder qfilename = QueryBuilders.prefixQuery("filename.keyword", "/001");
	QueryBuilder qftype = QueryBuilders.matchQuery("ftype", "1");
	queryBuilder.must(qfilename);
	queryBuilder.must(qftype);

	String[] sourceInclude = { "inode", "filename.keyword", "snapshot_id", "snapshot_uuid", "snapshot_time_start" };

	AggregationBuilder aggregation = AggregationBuilders.filter("agg", qftype).subAggregation(AggregationBuilders.terms("field").field("filename.keyword"));
	TopHitsAggregationBuilder topHits = AggregationBuilders.topHits("xxx").size(1).explain(true).fetchSource(sourceInclude, null).sort("snapshot_time_start", SortOrder.DESC);
	aggregation = aggregation.subAggregation(topHits);
	SearchRequestBuilder searchRequest = client.prepareSearch("rm").setTypes("snapdiff").setQuery(queryBuilder).setFrom(0).setSize(1000).setExplain(true).addAggregation(aggregation);
	SearchResponse searchResponse = searchRequest.execute().actionGet();
	System.out.println(searchResponse);
```

---

<div class="post-metadata">

**Author:** ![fgbogdan](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/fgbogdan/32/53039_2.png) [@fgbogdan](https://discuss.elastic.co/u/fgbogdan)\
**Post date:** [March 6, 2018, 10:34am UTC](https://discuss.elastic.co/t/tophits-java-vs-curl/122587/2 "2018-03-06T10:34:06Z")

</div>

it was MY fault ... after a correct look, the java code equivalent to CURL is:

```
Client client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(address);

	BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
	QueryBuilder qfilename = QueryBuilders.prefixQuery("filename.keyword", "/001");
	QueryBuilder qftype = QueryBuilders.matchQuery("ftype", "1");
	queryBuilder.must(qfilename);
	queryBuilder.must(qftype);

	String[] sourceInclude = { "inode", "filename.keyword", "snapshot_id", "snapshot_uuid", "snapshot_time_start" };

	AggregationBuilder aggregation = AggregationBuilders.filter("agg", qftype);
	AggregationBuilder ag1 = AggregationBuilders.terms("field").field("filename.keyword");
	TopHitsAggregationBuilder topHits = AggregationBuilders.topHits("latest").size(1).explain(true).fetchSource(sourceInclude, null).sort("snapshot_time_start", SortOrder.DESC);
	ag1 = ag1.subAggregation(topHits);
	aggregation = aggregation.subAggregation(ag1);
	
	
	SearchRequestBuilder searchRequest = client.prepareSearch("rm").setTypes("snapdiff").setQuery(queryBuilder).setFrom(0).setSize(1000).setExplain(true).addAggregation(aggregation);
	SearchResponse searchResponse = searchRequest.execute().actionGet();
	System.out.println(searchResponse);
```

---

<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:** [April 3, 2018, 10:34am UTC](https://discuss.elastic.co/t/tophits-java-vs-curl/122587/3 "2018-04-03T10:34:11Z")

</div>

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