示例代码:
/*
* 通过multiFieldQuery() API。
* 请求创建流程:MultiFieldSubQueryDetails List -> MultiFieldSubQuery -> MultiFieldQuery
* 现在多值查询支持多个子查询。
*
* 查询时必须提供的信息:
* MultiFieldSubQueryDetails List: 查询指标下具体的度量(子类比)信息。例如只查询"speed"或者“direction”
* 里面可以指定聚合运算(Aggreagtor),值过滤(dpValue),斜率计算(rate),降采样(downsample)等。
* Metric: 代表查询的数据指标,例如 "wind"
* Time Range: Start Time and End Time
*
* 可选信息:
* Tags: 过滤时间的信息
* Limit/Offset: 分页处理
*/
// 创建要查询 fields 的信息
// Query : Filter: level >= 1.2 & speed >= 45.2
MultiFieldSubQueryDetails fieldDetail_1 = MultiFieldSubQueryDetails
.field("speed").aggregator(Aggregator.NONE).dpValue(">=45.2").build();
MultiFieldSubQueryDetails fieldDetail_2 = MultiFieldSubQueryDetails
.field("level").aggregator(Aggregator.NONE).dpValue(">=1.2").build();
MultiFieldSubQueryDetails fieldDetail_3 = MultiFieldSubQueryDetails
.field("direction").aggregator(Aggregator.NONE).build();
MultiFieldSubQueryDetails fieldDetail_4 = MultiFieldSubQueryDetails
.field("description").aggregator(Aggregator.NONE).build();
List<MultiFieldSubQueryDetails> fieldsDetails = new ArrayList();
fieldsDetails.add(fieldDetail_1);
fieldsDetails.add(fieldDetail_2);
fieldsDetails.add(fieldDetail_3);
fieldsDetails.add(fieldDetail_4);
// 创建多值模型子查询
MultiFieldSubQuery subQuery = MultiFieldSubQuery.metric("wind")
.tag("sensor", "95D8-7913")
.tag("city", "hangzhou")
.tag("province", "zhejiang")
.fieldsInfo(fieldsDetails)
.build();
// 创建多值模型查询
MultiFieldQuery query = MultiFieldQuery.start(1537170208L).end(1537170209L)
.sub(subQuery).build();
List<MultiFieldQueryResult> result = tsdb.multiFieldQuery(query);
if (result != null) {
System.out.println("##### Multi-field Query Result : " + JSON.toJSONString(result));
if (result.size() > 0) {
System.out.println("##### Multi-field Query Result asMap : " + JSON.toJSONString(result.get(0).asMap()));
}
} else {
System.out.println("##### Empty reply from HiTSDB server. ######");
}