Java 弹性搜索中的聚合
我想在日期字段上为elasticsearch查询应用GROUPBY子句。这是我的密码Java 弹性搜索中的聚合,java,elasticsearch,Java,elasticsearch,我想在日期字段上为elasticsearch查询应用GROUPBY子句。这是我的密码 SearchRequestBuilder srb = client .prepareSearch(ConstantsValue.indexName) .setTypes(ConstantsValue._Type) .addAggregation( Aggregat
SearchRequestBuilder srb = client
.prepareSearch(ConstantsValue.indexName)
.setTypes(ConstantsValue._Type)
.addAggregation(
AggregationBuilders
.dateHistogram("aggs")
.field("DTCREATED")
.interval(Interval.MONTH)
.format("yyyy-MM-dd")
.preZone("+05:30")
.preZoneAdjustLargeInterval(true)
.minDocCount(1)
)
.setSize(Integer.MAX_VALUE)
.setQuery(query);
SearchResponse response = srb
.setSearchType(SearchType.QUERY_AND_FETCH)
.setFetchSource(ConstantsValue.fieldList, null)
.execute()
.actionGet();
但查询不会返回预期结果
结果显示如下
Value :{"DTCREATED":"2016-09-29T18:30:00.000Z"}
Key :AVfdaeSC3n3Bn-RaoFgg
Value :{"DTCREATED":"2016-09-29T18:30:00.000Z"}
Key :AVfdaeSC3n3Bn-RaoFgl
Value :{"DTCREATED":"2016-09-29T18:30:00.000Z"}
Key :AVfdaeSC3n3Bn-RaoFgq
Value :{"DTCREATED":"2016-08-31T18:30:00.000Z"}
Key :AVfdaeSC3n3Bn-RaoFgv
Value :{"DTCREATED":"2016-09-06T18:30:00.000Z"}
Key :AVfdaeSC3n3Bn-RaoFg0
Value :{"DTCREATED":"2016-09-22T18:30:00.000Z"}
Key :AVfdaeSC3n3Bn-RaoFg5
Value :{"DTCREATED":"2016-09-22T18:30:00.000Z"}
Key :AVfdaeSC3n3Bn-RaoFhA
Value :{"DTCREATED":"2016-09-12T18:30:00.000Z"}
Key :AVfdaeSC3n3Bn-RaoFhF
我是elasticsearch的新手,不知道我错过了什么。
非常感谢您的帮助 ES中没有groupby-like子句,但是您可以使用,以便按所需字段进行分组。例如,我使用下面的post http请求,以便使用userid进行分组,并获取每个userid的计数
搜索查询如下所示:
{
"query":{
"query_string":{
"query":"api:\"smsmessaging\" AND operatorid:\"ROBI\""
}
},
"aggs":{
"total":{
"terms":{
"field":"userid"
},
"aggs":{
"grades_count":{
"value_count":{
"script":"doc['userid'].value"
}
}
}
}
}
}
在上面,response_summary是索引。我正在试着搜索
请求的主体可以是这样的:
{
"query":{
"query_string":{
"query":"api:\"smsmessaging\" AND operatorid:\"ROBI\""
}
},
"aggs":{
"total":{
"terms":{
"field":"userid"
},
"aggs":{
"grades_count":{
"value_count":{
"script":"doc['userid'].value"
}
}
}
}
}
}
因此,您可以在aggs标记中提及要分组的字段,并在上面的示例中获取计数。你可以随意修改。也可以看看线程。您的查询是什么样子的?我有SQL查询-从tableName中选择DistinctStatus,countSSTATUS,TO_DATE dtcreated,'DD.MON.YYYY',其中SSTATUS像'CANCELLED'group by TO_DATE dtcreated,'DD.MON.YYYY',然后选择Status,sstatus order by sstatus您是如何用java查询它的?您正在代码中直接使用SQL查询?Kibana生成的查询也在代码中,但它不起作用不使用SearchRequest类并将Kibana查询传递到其源字段很高兴它有所帮助: