1、封装es,需要用到aggs(聚合函数),封装的过程是根据聚合函数的最里层到最外层进行层层封装。(注意到:"size"和"aggs"是在并列层,所以封装在同一个对象中)
/**
* Description: 封装ES工具类
*
* @author lisiying
* @date Created on 2019年8月29日
*/
public static JSONObject packageEs(){
/**
* {
* "size":0,
* "aggs": {
* "agg1": {
* "terms": {
* "field": "srvName.keyword"
* }
* }
* }
* }
*/
//封装查询所有服务的count数
JSONObject jsonObject = new JSONObject();
jsonObject.put("size",0);
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("field","srvName.keyword");
JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("terms",jsonObject1);
JSONObject jsonObject3 = new JSONObject();
jsonObject3.put("agg1",jsonObject2);
jsonObject.put("aggs",jsonObject3);
return jsonObject;
}
2、解析json数据,可以用map封装,也可用object,依照个人习惯,这里我采用的是map进行封装解析数据。
@Component
public class ParamJsonUtil {
//解析数据用map封装(也可以用对象),解析json字符串,将x、y轴传入map集合
public Map> analysisMap(String message){
//创建json对象,将参数message封装进messageJson中。
JSONObject messageJson=JSONObject.parseObject(message);
//创建数组类型的json对象,通过带参的messageJson对象获取需要解析的数据类型封装在数组jsonArray中
JSONArray jsonArray = messageJson.getJSONObject("aggregations").getJSONObject("num").getJSONArray("buckets");
//创建X/Y轴列表
List servername_x = new ArrayList();
List count_y = new ArrayList();
//遍历jsonArray数组,将遍历到的数据根据服务名和调用量添加到servername_x和count_y列表中。
for (int i=0;i> map = new HashMap>();
map.put("key_as_string",servername_x);
map.put("doc_count",count_y);
return map;
}
@Controller
public class ServerController extends BaseController {
public static String url = "http://172.18.232.196:9200/test-2019-02/doc/_search?pretty";
@RequestMapping("/showMessage")
public String firstpage(){
return "manage/AccessLog/showMessage";
}
@RequestMapping("echartsPage")
@ResponseBody
public Map ES() {
//1、创建客户端对象
HttpClientUtils httpClientUtils = new HttpClientUtils();
//2、创建es工具类对象,调用serverJson(),获取封装服务调用计数的api
EsUtil esUtil=new EsUtil();
//3、通过将URL和请求参数封装进POST方法中,发出请求。并将请求返回对象放入message中
String message = httpClientUtils.doPostTest(url,esUtil.serverJson());
//4、创建解析json的工具类对象,
ParamJsonUtil paramJsonUtil=new ParamJsonUtil();
//5、调用解析工具类中的解析方法,解析message并返回在showMessage页面中。
return paramJsonUtil.analysisMap(message);
}
}
......
$.post("echartsPage",function (data) {
var myChart = echarts.init(document.getElementById('esEcharts'));
......
注:其中id中标识要和document.getElementById('*')中的*保持一致;$.post("echartsPage",function (data) 中的“echartsPage”和controller中的 @RequestMapping("echartsPage")中的标识也要保持一致。