我正在尝试通过将值手动传递给构造函数来创建虚拟SearchResponse对象。我有一个JUnit测试类,正在使用该虚拟值模拟实际的方法调用。尝试以下方法
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; }
这是我直接查询elasticsearch时json的实际值。
{ "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 ] } ] } }
我想通过创建实际的SearchResponse对象来创建类似的响应。但是我找不到任何方法来发送值InternalSearchHit[]。请让我知道我该怎么做。
InternalSearchHit[]
这将做您想要的:
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);
如果你调用toString()的searchResponse返回:
toString()
searchResponse
{ "_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"} } ] } }