|  | @ -4,9 +4,15 @@ import com.alibaba.fastjson.JSONArray;
 | 
												
													
														
															|  | import com.alibaba.fastjson.JSONObject;
 |  | import com.alibaba.fastjson.JSONObject;
 | 
												
													
														
															|  | import com.yihu.base.es.config.ElastricSearchHelper;
 |  | import com.yihu.base.es.config.ElastricSearchHelper;
 | 
												
													
														
															|  | import com.yihu.base.hbase.HBaseHelper;
 |  | import com.yihu.base.hbase.HBaseHelper;
 | 
												
													
														
															|  | 
 |  | import com.yihu.iot.datainput.enums.DataTypeEnum;
 | 
												
													
														
															|  | import com.yihu.iot.datainput.util.ConstantUtils;
 |  | import com.yihu.iot.datainput.util.ConstantUtils;
 | 
												
													
														
															|  | 
 |  | import com.yihu.iot.datainput.util.RowKeyUtils;
 | 
												
													
														
															|  | import io.searchbox.core.Search;
 |  | import io.searchbox.core.Search;
 | 
												
													
														
															|  | import org.apache.commons.lang.StringUtils;
 |  | import org.apache.commons.lang.StringUtils;
 | 
												
													
														
															|  | 
 |  | import org.apache.hadoop.hbase.Cell;
 | 
												
													
														
															|  | 
 |  | import org.apache.hadoop.hbase.CellUtil;
 | 
												
													
														
															|  | 
 |  | import org.apache.hadoop.hbase.client.Result;
 | 
												
													
														
															|  | 
 |  | import org.apache.hadoop.hbase.util.Bytes;
 | 
												
													
														
															|  | import org.elasticsearch.action.search.SearchRequestBuilder;
 |  | import org.elasticsearch.action.search.SearchRequestBuilder;
 | 
												
													
														
															|  | import org.elasticsearch.index.query.QueryBuilders;
 |  | import org.elasticsearch.index.query.QueryBuilders;
 | 
												
													
														
															|  | import org.elasticsearch.index.query.TermQueryBuilder;
 |  | import org.elasticsearch.index.query.TermQueryBuilder;
 | 
												
											
												
													
														
															|  | @ -17,7 +23,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 | 
												
													
														
															|  | import org.springframework.stereotype.Component;
 |  | import org.springframework.stereotype.Component;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | import java.util.ArrayList;
 |  | import java.util.ArrayList;
 | 
												
													
														
															|  | 
 |  | import java.util.HashMap;
 | 
												
													
														
															|  | import java.util.List;
 |  | import java.util.List;
 | 
												
													
														
															|  | 
 |  | import java.util.Map;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | @Component
 |  | @Component
 | 
												
													
														
															|  | public class DataSearchService {
 |  | public class DataSearchService {
 | 
												
											
												
													
														
															|  | @ -48,6 +56,13 @@ public class DataSearchService {
 | 
												
													
														
															|  |         JSONArray jsonArray = new JSONArray();
 |  |         JSONArray jsonArray = new JSONArray();
 | 
												
													
														
															|  |         for(String key : jsonObject.keySet()){
 |  |         for(String key : jsonObject.keySet()){
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |             //默认为must
 | 
												
													
														
															|  | 
 |  |             if(StringUtils.equalsIgnoreCase("or",key) && StringUtils.equals("or",jsonObject.getString("or"))){
 | 
												
													
														
															|  | 
 |  |                 mustOrShouldQuery.put("should",jsonArray);
 | 
												
													
														
															|  | 
 |  |             }else{
 | 
												
													
														
															|  | 
 |  |                 mustOrShouldQuery.put("must",jsonArray);
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |             //分页用,from表示数据从第几条开始取
 |  |             //分页用,from表示数据从第几条开始取
 | 
												
													
														
															|  |             if(StringUtils.equalsIgnoreCase("from",key)){
 |  |             if(StringUtils.equalsIgnoreCase("from",key)){
 | 
												
													
														
															|  |                 query.put("from",jsonObject.getInteger("from"));
 |  |                 query.put("from",jsonObject.getInteger("from"));
 | 
												
											
												
													
														
															|  | @ -74,7 +89,8 @@ public class DataSearchService {
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |             JSONObject matchQuery = new JSONObject();
 |  |             JSONObject matchQuery = new JSONObject();
 | 
												
													
														
															|  |             JSONObject subQuery = new JSONObject();
 |  |             JSONObject subQuery = new JSONObject();
 | 
												
													
														
															|  |             if(DataStandardConvertService.dataMap.get("body_sign_params").contains(key)){
 |  | 
 | 
												
													
														
															|  | 
 |  |             String baseName = DataTypeEnum.body_sign_params.name().toString();
 | 
												
													
														
															|  | 
 |  |             if(null != DataStandardConvertService.dataMap.get(baseName) && DataStandardConvertService.dataMap.get(baseName).contains(key)){
 | 
												
													
														
															|  |                 subQuery.put("data."+key,jsonObject.get(key)); //data数据里内嵌的字段,真正的数据值内容
 |  |                 subQuery.put("data."+key,jsonObject.get(key)); //data数据里内嵌的字段,真正的数据值内容
 | 
												
													
														
															|  |             }else{
 |  |             }else{
 | 
												
													
														
															|  |                 subQuery.put(key,jsonObject.get(key));
 |  |                 subQuery.put(key,jsonObject.get(key));
 | 
												
											
												
													
														
															|  | @ -82,12 +98,7 @@ public class DataSearchService {
 | 
												
													
														
															|  |             matchQuery.put("match",subQuery);
 |  |             matchQuery.put("match",subQuery);
 | 
												
													
														
															|  |             jsonArray.add(matchQuery);
 |  |             jsonArray.add(matchQuery);
 | 
												
													
														
															|  |         }
 |  |         }
 | 
												
													
														
															|  |         //默认为must
 |  | 
 | 
												
													
														
															|  |         if(null != jsonObject.get("should") && StringUtils.equals("should",jsonObject.getString("should"))){
 |  | 
 | 
												
													
														
															|  |             mustOrShouldQuery.put("should",jsonArray);
 |  | 
 | 
												
													
														
															|  |         }else{
 |  | 
 | 
												
													
														
															|  |             mustOrShouldQuery.put("must",jsonArray);
 |  | 
 | 
												
													
														
															|  |         }
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |         boolQuery.put("bool",mustOrShouldQuery);
 |  |         boolQuery.put("bool",mustOrShouldQuery);
 | 
												
													
														
															|  |         query.put("query",boolQuery);
 |  |         query.put("query",boolQuery);
 | 
												
													
														
															|  | 
 |  | 
 | 
												
											
												
													
														
															|  | @ -96,16 +107,59 @@ public class DataSearchService {
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |     public String getData(String jsonData){
 |  |     public String getData(String jsonData){
 | 
												
													
														
															|  |         String query = getQueryString(jsonData);
 |  |         String query = getQueryString(jsonData);
 | 
												
													
														
															|  |         String result = elastricSearchHelper.search(ConstantUtils.esIndex,ConstantUtils.esType,query);
 |  | 
 | 
												
													
														
															|  |         return result;
 |  | 
 | 
												
													
														
															|  | 
 |  |         String esResult = elastricSearchHelper.search(ConstantUtils.esIndex,ConstantUtils.esType,query);
 | 
												
													
														
															|  | 
 |  |         JSONArray jsonArray = (JSONArray)JSONArray.parse(esResult);
 | 
												
													
														
															|  | 
 |  |         List<String> rowkeys = new ArrayList<>();
 | 
												
													
														
															|  | 
 |  |         for(Object object:jsonArray){
 | 
												
													
														
															|  | 
 |  |             JSONObject jsonObject = (JSONObject)object;
 | 
												
													
														
															|  | 
 |  |             JSONArray datas = (JSONArray)jsonObject.get("data");
 | 
												
													
														
															|  | 
 |  |             for(Object data:datas){
 | 
												
													
														
															|  | 
 |  |                 JSONObject dataJson = (JSONObject)data;
 | 
												
													
														
															|  | 
 |  |                 rowkeys.add(dataJson.getString("rid"));
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         List<Map<String, Object>> resultList = new ArrayList<>();
 | 
												
													
														
															|  | 
 |  |         try {
 | 
												
													
														
															|  | 
 |  |             //拿到rowkey后,去hbase读取数据内容
 | 
												
													
														
															|  | 
 |  |             Result[] hbaseData = hBaseHelper.getResultList(ConstantUtils.tableName,rowkeys);
 | 
												
													
														
															|  | 
 |  |             for(int i = 0;i < hbaseData.length; i++){
 | 
												
													
														
															|  | 
 |  |                 List<Cell> ceList = hbaseData[i].listCells();
 | 
												
													
														
															|  | 
 |  |                 Map<String, Object> map = new HashMap<String, Object>();
 | 
												
													
														
															|  | 
 |  |                 String rowkey = Bytes.toString(hbaseData[i].getRow());
 | 
												
													
														
															|  | 
 |  |                 //rowkey是根据一些头部数据加密而来,解密即可还原
 | 
												
													
														
															|  | 
 |  |                 String tag = RowKeyUtils.getMessageFromRowKey(rowkey);
 | 
												
													
														
															|  | 
 |  |                 String[] tags = tag.split(",");
 | 
												
													
														
															|  | 
 |  |                 map.put("accessToken", tags[0]);
 | 
												
													
														
															|  | 
 |  |                 map.put("deviceSn", tags[1]);
 | 
												
													
														
															|  | 
 |  |                 map.put("extCode", tags[2]);
 | 
												
													
														
															|  | 
 |  |                 if (ceList != null && ceList.size() > 0) {
 | 
												
													
														
															|  | 
 |  |                     for (Cell cell : ceList) {
 | 
												
													
														
															|  | 
 |  |                         map.put(Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()),
 | 
												
													
														
															|  | 
 |  |                                 Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));
 | 
												
													
														
															|  | 
 |  |                     }
 | 
												
													
														
															|  | 
 |  |                 }
 | 
												
													
														
															|  | 
 |  |                 resultList.add(map);
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         } catch (Exception e) {
 | 
												
													
														
															|  | 
 |  |             e.printStackTrace();
 | 
												
													
														
															|  | 
 |  |             logger.error("get data from hbase fail.",e.getMessage());
 | 
												
													
														
															|  | 
 |  |             return esResult;
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |         JSONArray resultArray = new JSONArray();
 | 
												
													
														
															|  | 
 |  |         resultArray.addAll(resultList);
 | 
												
													
														
															|  | 
 |  |         return resultArray.toJSONString();
 | 
												
													
														
															|  |     }
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |     public static void main(String args[]){
 |  |     public static void main(String args[]){
 | 
												
													
														
															|  |         String str = "{\n" +
 |  |         String str = "{\n" +
 | 
												
													
														
															|  |                 "\t\"systolic\":\"59\",\n" +
 |  | 
 | 
												
													
														
															|  |                 "\t\"extcode\":\"1\",\n" +
 |  | 
 | 
												
													
														
															|  | 
 |  |                 "\t\"or\":\"\",\n" +
 | 
												
													
														
															|  | 
 |  |                 "\t\"extCode\":\"1\",\n" +
 | 
												
													
														
															|  | 
 |  |                 "\t\"idcard\":\"test\",\n" +
 | 
												
													
														
															|  |                 "\t\"from\":1,\n" +
 |  |                 "\t\"from\":1,\n" +
 | 
												
													
														
															|  |                 "\t\"size\":5\n" +
 |  | 
 | 
												
													
														
															|  | 
 |  |                 "\t\"size\":5,\n" +
 | 
												
													
														
															|  | 
 |  |                 "\t\"sort\":{\"measure_time\":\"desc\"}\n" +
 | 
												
													
														
															|  |                 "}";
 |  |                 "}";
 | 
												
													
														
															|  |         System.out.println(getQueryString(str));
 |  |         System.out.println(getQueryString(str));
 | 
												
													
														
															|  |     }
 |  |     }
 |