求教ES查询优化

直接上代码:


        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

求优化~~~~

猜你喜欢

转载自blog.csdn.net/linhao_soft/article/details/82622567