Create a dummy SearchResponse instance for the ElasticSearch test case

I am trying to create a dummy SearchResponse object by passing the values ​​manually to the constructor. I have a JUnit test class for which I use this dummy value to mock the actual method call. Try using the method below:

public SearchResponse actionGet() throws ElasticsearchException { ShardSearchFailure[] shardFailures = new ShardSearchFailure[0]; int docId = 0; String id = "5YmRf-6OTvelt29V5dphmw"; Map<String, SearchHitField> fields = null; InternalSearchHit internalSearchHit = new InternalSearchHit(docId, id, null, fields); InternalSearchHit[] internalSearchHit1 = { internalSearchHit }; InternalSearchResponse EMPTY = new InternalSearchResponse( new InternalSearchHits(internalSearchHit1, 0, 0), null, null, null, false); SearchResponse searchResponse = new SearchResponse(EMPTY, "scrollId", 1, 1, 1000, shardFailures); return searchResponse; } 

and here is my actual json value when requesting directly in elasticsearch.

 { "took": 3, "timed_out": false, "_shards": { "total": 3, "successful": 3, "failed": 0 }, "hits": { "total": 28, "max_score": null, "hits": [ { "_index": "monitoring", "_type": "quota-management", "_id": "5YmRf-6OTvelt29V5dphmw", "_score": null, "_source": { "@timestamp": "2014-08-20T15:43:20.762Z", "category_name": "cat1111", "alert_message": "the new cpu threshold has been reached 80%", "alert_type": "Critical", "view_mode": "unread" }, "sort": [ 1408549226173 ] } ] } } 

I want to create a similar response by creating the actual SearchResponse object. But I could not find a way to send the values ​​to InternalSearchHit[] . Please let me know how I can do this.

+6
source share
2 answers

This will do what you want:

 SearchShardTarget shardTarget = new SearchShardTarget("1", "monitoring", 1); ShardSearchFailure[] shardFailures = new ShardSearchFailure[0]; float score = 0.2345f; BytesReference source = new BytesArray("{\"@timestamp\":\"2014-08-20T15:43:20.762Z\",\"category_name\"" + ":\"cat1111\",\"alert_message\":\"the new cpu threshold has been reached 80%\",\"alert_type\":" + "\"Critical\",\"view_mode\":\"unread\"}"); InternalSearchHit hit = new InternalSearchHit(1, "5YmRf-6OTvelt29V5dphmw", new StringText("quota-management"), null); hit.shardTarget(shardTarget); hit.sourceRef(source); hit.score(score); InternalSearchHit[] hits = new InternalSearchHit[]{hit}; InternalSearchHits internalSearchHits = new InternalSearchHits(hits, 28, score); InternalSearchResponse internalSearchResponse = new InternalSearchResponse(internalSearchHits, null, null, null, false); SearchResponse searchResponse = new SearchResponse(internalSearchResponse, "scrollId", 1, 1, 1000, shardFailures); 

If you call toString() on searchResponse , it returns:

 { "_scroll_id" : "scrollId", "took" : 1000, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "failed" : 0 }, "hits" : { "total" : 28, "max_score" : 0.2345, "hits" : [ { "_index" : "monitoring", "_type" : "quota-management", "_id" : "5YmRf-6OTvelt29V5dphmw", "_score" : 0.2345, "_source":{"@timestamp":"2014-08-20T15:43:20.762Z","category_name":"cat1111","alert_message":"the new cpu threshold has been reached 80%","alert_type":"Critical","view_mode":"unread"} } ] } } 
+3
source

Works for me in ElasticsearchS 6.5

 BytesReference source = new BytesArray( "{your json response come here}" ); SearchHit hit = new SearchHit( 1 ); hit.sourceRef( source ); SearchHits hits = new SearchHits( new SearchHit[] { hit }, 5, 10 ); SearchResponseSections searchResponseSections = new SearchResponseSections( hits, null, null, false, null, null, 5 ); SearchResponse searchResponse = new SearchResponse( searchResponseSections, null, 8, 8, 0, 8, new ShardSearchFailure[] {} ); return searchResponse; 
0
source

Source: https://habr.com/ru/post/1200830/


All Articles