为ElasticSearch测试用例创建虚拟SearchResponse实例

我正在尝试通过将值手动传递给构造函数来创建虚拟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[]。请让我知道我该怎么做。

回答:

这将做您想要的:

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返回:

{

"_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"}

} ]

}

}

以上是 为ElasticSearch测试用例创建虚拟SearchResponse实例 的全部内容, 来源链接: utcz.com/qa/416103.html

回到顶部