直接上代码:
Client client = null;
List<Map<String, String>> result = new ArrayList<>();
try {
client = ElasticSearchUtils.getInstance().getClient();
long stime = DateUtil.stringToDate(startTime, DateUtil.yyyy_MM_dd_HHmmss).getTime();
long ltime = DateUtil.stringToDate(lastTime, DateUtil.yyyy_MM_dd_HHmmss).getTime();
// 查询数据
SearchRequestBuilder requestBuilder = client.prepareSearch(SystemConstant.ES_INDEX).setTypes("BwOperateVoice")
.setSearchType(SearchType.QUERY_AND_FETCH)
.setQuery(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("borrower_id", borrowerId))
.must(QueryBuilders.rangeQuery("call_time").from(stime).to(ltime)))
.setScroll(TimeValue.timeValueMinutes(8))
.setFrom(0).setSize(100).addSort("call_time", SortOrder.ASC);
SearchResponse response = requestBuilder.get();
long count = response.getHits().getTotalHits();// 总条数
logger.info("====ES 查询BwOperateVoice条件borrower_id = {} AND call_time BETWEEN {} and {},查询结果:{}====",borrowerId,stime,ltime,count);
result.addAll((getCallRecordByES(response.getHits())));
while(response.getHits().getHits().length !=0) {
response = client.prepareSearchScroll(response.getScrollId()).setScroll(TimeValue.timeValueMinutes(8)).execute().actionGet();
result.addAll(getCallRecordByES(response.getHits()));
}
} catch (Exception e) {
logger.info("------ES查询通话记录出现异常情况" + e.getMessage() + "-------");
e.printStackTrace();
}
以上代码while循环耗时10秒以上
[INFO][2018-09-11 09:03:09] com.waterelephant.operatorData.xjbk.service.impl.XjbkOperatorDataServiceImpl.queryCallRecordByES(XjbkOperatorDataServiceImpl.java:179) ====ES 查询BwOperateVoice条件borrower_id = 5886767 AND call_time BETWEEN 1522512000000 and 1525103999000,查询结果:1875====
[INFO][2018-09-11 09:03:21] com.waterelephant.operatorData.xjbk.service.impl.XjbkOperatorDataServiceImpl.getTelDataList(XjbkOperatorDataServiceImpl.java:132) —-根据borrowerId:5886767,startTime:2018-04-01 00:00:00,lastTime:2018-04-30 23:59:59,查询ES获取【现金白卡】通话记录信息,结果为:1875
求优化~~~~