|  | @ -1,14 +1,13 @@
 | 
	
		
			
				|  |  | package com.yihu.jw.elasticsearch;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import com.alibaba.druid.pool.DruidDataSource;
 | 
	
		
			
				|  |  | import com.alibaba.druid.sql.ast.SQLExpr;
 | 
	
		
			
				|  |  | import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
 | 
	
		
			
				|  |  | import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock;
 | 
	
		
			
				|  |  | import com.alibaba.druid.sql.parser.ParserException;
 | 
	
		
			
				|  |  | import com.alibaba.druid.sql.parser.SQLExprParser;
 | 
	
		
			
				|  |  | import com.alibaba.druid.sql.parser.Token;
 | 
	
		
			
				|  |  | import com.alibaba.fastjson.JSON;
 | 
	
		
			
				|  |  | import com.alibaba.fastjson.JSONObject;
 | 
	
		
			
				|  |  | import io.searchbox.core.Update;
 | 
	
		
			
				|  |  | import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  | import org.elasticsearch.action.bulk.BulkItemResponse;
 | 
	
		
			
				|  |  | import org.elasticsearch.action.bulk.BulkRequest;
 | 
	
	
		
			
				|  | @ -26,8 +25,6 @@ import org.elasticsearch.action.update.UpdateResponse;
 | 
	
		
			
				|  |  | import org.elasticsearch.client.RequestOptions;
 | 
	
		
			
				|  |  | import org.elasticsearch.client.RestHighLevelClient;
 | 
	
		
			
				|  |  | import org.elasticsearch.client.indices.CreateIndexRequest;
 | 
	
		
			
				|  |  | import org.elasticsearch.client.transport.TransportClient;
 | 
	
		
			
				|  |  | import org.elasticsearch.common.xcontent.ToXContent;
 | 
	
		
			
				|  |  | import org.elasticsearch.common.xcontent.XContentBuilder;
 | 
	
		
			
				|  |  | import org.elasticsearch.common.xcontent.XContentFactory;
 | 
	
		
			
				|  |  | import org.elasticsearch.common.xcontent.XContentType;
 | 
	
	
		
			
				|  | @ -50,13 +47,9 @@ import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder;
 | 
	
		
			
				|  |  | import org.elasticsearch.search.builder.SearchSourceBuilder;
 | 
	
		
			
				|  |  | import org.elasticsearch.search.sort.FieldSortBuilder;
 | 
	
		
			
				|  |  | import org.elasticsearch.search.sort.SortBuilder;
 | 
	
		
			
				|  |  | import org.elasticsearch.search.sort.SortBuilders;
 | 
	
		
			
				|  |  | import org.elasticsearch.search.sort.SortOrder;
 | 
	
		
			
				|  |  | import org.nlpcn.es4sql.domain.Select;
 | 
	
		
			
				|  |  | import org.nlpcn.es4sql.domain.Where;
 | 
	
		
			
				|  |  | import org.nlpcn.es4sql.exception.SqlParseException;
 | 
	
		
			
				|  |  | import org.nlpcn.es4sql.jdbc.ObjectResult;
 | 
	
		
			
				|  |  | import org.nlpcn.es4sql.jdbc.ObjectResultsExtractor;
 | 
	
		
			
				|  |  | import org.nlpcn.es4sql.parse.ElasticSqlExprParser;
 | 
	
		
			
				|  |  | import org.nlpcn.es4sql.parse.SqlParser;
 | 
	
		
			
				|  |  | import org.nlpcn.es4sql.parse.WhereParser;
 | 
	
	
		
			
				|  | @ -74,8 +67,6 @@ import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import javax.annotation.Resource;
 | 
	
		
			
				|  |  | import java.io.IOException;
 | 
	
		
			
				|  |  | import java.sql.Connection;
 | 
	
		
			
				|  |  | import java.sql.PreparedStatement;
 | 
	
		
			
				|  |  | import java.sql.ResultSet;
 | 
	
		
			
				|  |  | import java.text.DecimalFormat;
 | 
	
		
			
				|  |  | import java.util.*;
 | 
	
	
		
			
				|  | @ -90,7 +81,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private static final Logger logger = LoggerFactory.getLogger(ElasticSearch7Util.class);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Resource(name="restHighLevelClient")
 | 
	
		
			
				|  |  |     @Resource(name = "restHighLevelClient")
 | 
	
		
			
				|  |  |     private RestHighLevelClient restHighLevelClient;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
	
		
			
				|  | @ -101,6 +92,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 执行sql
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param sql
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
	
		
			
				|  | @ -125,11 +117,11 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         SearchHit[] searchHits = hits.getHits();
 | 
	
		
			
				|  |  |         //遍历查询结果
 | 
	
		
			
				|  |  |         for(SearchHit hit : searchHits){
 | 
	
		
			
				|  |  |             Map<String,Object> datas = hit.getSourceAsMap();
 | 
	
		
			
				|  |  |             for (Object o:datas.values()){
 | 
	
		
			
				|  |  |                 if (o instanceof Double){
 | 
	
		
			
				|  |  |                     Double valueTemp =Double.valueOf((Double)o);
 | 
	
		
			
				|  |  |         for (SearchHit hit : searchHits) {
 | 
	
		
			
				|  |  |             Map<String, Object> datas = hit.getSourceAsMap();
 | 
	
		
			
				|  |  |             for (Object o : datas.values()) {
 | 
	
		
			
				|  |  |                 if (o instanceof Double) {
 | 
	
		
			
				|  |  |                     Double valueTemp = Double.valueOf((Double) o);
 | 
	
		
			
				|  |  |                     DecimalFormat df = new DecimalFormat("######0");
 | 
	
		
			
				|  |  |                     return Long.parseLong(df.format(valueTemp));
 | 
	
		
			
				|  |  |                 }
 | 
	
	
		
			
				|  | @ -138,20 +130,20 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         return 0L;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public List<Map<String,Object>> executeSQLStream(String sql) throws Exception {
 | 
	
		
			
				|  |  |     public List<Map<String, Object>> executeSQLStream(String sql) throws Exception {
 | 
	
		
			
				|  |  |         ResultSet resultSet = elasticSearch7Pool.restHighLevelClientStream(sql);
 | 
	
		
			
				|  |  |         return resultSetUtil.resultToMapList(resultSet);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public <T> List<T> executeSQLStreamDO(String sql,Class<T> target) throws Exception {
 | 
	
		
			
				|  |  |     public <T> List<T> executeSQLStreamDO(String sql, Class<T> target) throws Exception {
 | 
	
		
			
				|  |  |         ResultSet resultSet = elasticSearch7Pool.restHighLevelClientStream(sql);
 | 
	
		
			
				|  |  |         return resultSetUtil.resultToEntity(resultSet,target);
 | 
	
		
			
				|  |  |         return resultSetUtil.resultToEntity(resultSet, target);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 执行sql
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<Map<String,Object>> executeSQL(String sql) throws IOException {
 | 
	
		
			
				|  |  |     public List<Map<String, Object>> executeSQL(String sql) throws IOException {
 | 
	
		
			
				|  |  |         //实例化查询请求对象
 | 
	
		
			
				|  |  |         SearchRequest request = new SearchRequest();
 | 
	
		
			
				|  |  |         //实例化SearchSourceBuilder
 | 
	
	
		
			
				|  | @ -159,7 +151,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         //根据索引、查询条件构建查询构造器
 | 
	
		
			
				|  |  |         BoolQueryBuilder boolQueryBuilder = createQueryBuilderBySql(sql);
 | 
	
		
			
				|  |  |         //将查询构造器注入SearchSourceBuilder
 | 
	
		
			
				|  |  |         searchBuilder.query(boolQueryBuilder).sort("quotaDate",SortOrder.DESC).sort("createTime",SortOrder.DESC);
 | 
	
		
			
				|  |  |         searchBuilder.query(boolQueryBuilder).sort("quotaDate", SortOrder.DESC).sort("createTime", SortOrder.DESC);
 | 
	
		
			
				|  |  |         //设置请求查询的索引(查询构造器中已指定,无需重复设置)
 | 
	
		
			
				|  |  |         //request.indices(indexName);
 | 
	
		
			
				|  |  |         //将构建好的SearchSourceBuilder注入请求
 | 
	
	
		
			
				|  | @ -171,10 +163,10 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         SearchHits hits = searchResponse.getHits();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         SearchHit[] searchHits = hits.getHits();
 | 
	
		
			
				|  |  |         List<Map<String,Object>> listData = new ArrayList<>();
 | 
	
		
			
				|  |  |         List<Map<String, Object>> listData = new ArrayList<>();
 | 
	
		
			
				|  |  |         //遍历查询结果
 | 
	
		
			
				|  |  |         for(SearchHit hit : searchHits){
 | 
	
		
			
				|  |  |             Map<String,Object> datas = hit.getSourceAsMap();
 | 
	
		
			
				|  |  |         for (SearchHit hit : searchHits) {
 | 
	
		
			
				|  |  |             Map<String, Object> datas = hit.getSourceAsMap();
 | 
	
		
			
				|  |  |             listData.add(datas);
 | 
	
		
			
				|  |  |             logger.info(datas.toString());
 | 
	
		
			
				|  |  |         }
 | 
	
	
		
			
				|  | @ -185,7 +177,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 执行sql
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public <T> List<T> executeSql(String sql,Class<T> clazz) throws Exception {
 | 
	
		
			
				|  |  |     public <T> List<T> executeSql(String sql, Class<T> clazz) throws Exception {
 | 
	
		
			
				|  |  |         //实例化查询请求对象
 | 
	
		
			
				|  |  |         SearchRequest request = new SearchRequest();
 | 
	
		
			
				|  |  |         //实例化SearchSourceBuilder
 | 
	
	
		
			
				|  | @ -207,10 +199,10 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         SearchHit[] searchHits = hits.getHits();
 | 
	
		
			
				|  |  |         List<T> listData = new ArrayList<>();
 | 
	
		
			
				|  |  |         //遍历查询结果
 | 
	
		
			
				|  |  |         for(SearchHit hit : searchHits){
 | 
	
		
			
				|  |  |             Map<String,Object> datas = hit.getSourceAsMap();
 | 
	
		
			
				|  |  |         for (SearchHit hit : searchHits) {
 | 
	
		
			
				|  |  |             Map<String, Object> datas = hit.getSourceAsMap();
 | 
	
		
			
				|  |  |             T t = clazz.newInstance();
 | 
	
		
			
				|  |  |             BeanUtils.copyProperties(t,datas);
 | 
	
		
			
				|  |  |             BeanUtils.copyProperties(t, datas);
 | 
	
		
			
				|  |  |             listData.add(t);
 | 
	
		
			
				|  |  |             logger.info(datas.toString());
 | 
	
		
			
				|  |  |         }
 | 
	
	
		
			
				|  | @ -220,8 +212,9 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 构建查询构造器
 | 
	
		
			
				|  |  |      * @param indexName  索引名
 | 
	
		
			
				|  |  |      * @param whereExpress  查询条件:(f1=2 and f2=1) or (f3=1 and f4=1)
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param indexName    索引名
 | 
	
		
			
				|  |  |      * @param whereExpress 查询条件:(f1=2 and f2=1) or (f3=1 and f4=1)
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public BoolQueryBuilder createQueryBuilderByWhere(String indexName, String whereExpress) {
 | 
	
	
		
			
				|  | @ -242,7 +235,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |                 boolQuery = QueryMaker.explan(where);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         } catch (SqlParseException e) {
 | 
	
		
			
				|  |  |             logger.info("ReadES.createQueryBuilderByExpress-Exception,"+e.getMessage());
 | 
	
		
			
				|  |  |             logger.info("ReadES.createQueryBuilderByExpress-Exception," + e.getMessage());
 | 
	
		
			
				|  |  |             e.printStackTrace();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return boolQuery;
 | 
	
	
		
			
				|  | @ -250,6 +243,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 构建查询构造器
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public BoolQueryBuilder createQueryBuilderBySql(String sql) {
 | 
	
	
		
			
				|  | @ -266,7 +260,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |                 boolQuery = QueryMaker.explan(where);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         } catch (SqlParseException e) {
 | 
	
		
			
				|  |  |             logger.info("ReadES.createQueryBuilderByExpress-Exception,"+e.getMessage());
 | 
	
		
			
				|  |  |             logger.info("ReadES.createQueryBuilderByExpress-Exception," + e.getMessage());
 | 
	
		
			
				|  |  |             e.printStackTrace();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return boolQuery;
 | 
	
	
		
			
				|  | @ -290,17 +284,18 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 查询指定索引下的信息
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param indexName 索引名称
 | 
	
		
			
				|  |  |      * @param condition 查询条件
 | 
	
		
			
				|  |  |      *  queryIndexContent("user_site"," and phone_no in('12234567890') ");
 | 
	
		
			
				|  |  |      *                  queryIndexContent("user_site"," and phone_no in('12234567890') ");
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<Map<String,Object>> queryIndexContent(String indexName, String condition) throws IOException {
 | 
	
		
			
				|  |  |     public List<Map<String, Object>> queryIndexContent(String indexName, String condition) throws IOException {
 | 
	
		
			
				|  |  |         //实例化查询请求对象
 | 
	
		
			
				|  |  |         SearchRequest request = new SearchRequest();
 | 
	
		
			
				|  |  |         //实例化SearchSourceBuilder
 | 
	
		
			
				|  |  |         SearchSourceBuilder searchBuilder = new SearchSourceBuilder();
 | 
	
		
			
				|  |  |         //根据索引、查询条件构建查询构造器
 | 
	
		
			
				|  |  |         BoolQueryBuilder boolQueryBuilder = createQueryBuilderByWhere(indexName,condition);
 | 
	
		
			
				|  |  |         BoolQueryBuilder boolQueryBuilder = createQueryBuilderByWhere(indexName, condition);
 | 
	
		
			
				|  |  |         //将查询构造器注入SearchSourceBuilder
 | 
	
		
			
				|  |  |         searchBuilder.query(boolQueryBuilder);
 | 
	
		
			
				|  |  |         //设置请求查询的索引(查询构造器中已指定,无需重复设置)
 | 
	
	
		
			
				|  | @ -314,10 +309,10 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         SearchHits hits = searchResponse.getHits();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         SearchHit[] searchHits = hits.getHits();
 | 
	
		
			
				|  |  |         List<Map<String,Object>> listData = new ArrayList<>();
 | 
	
		
			
				|  |  |         List<Map<String, Object>> listData = new ArrayList<>();
 | 
	
		
			
				|  |  |         //遍历查询结果
 | 
	
		
			
				|  |  |         for(SearchHit hit : searchHits){
 | 
	
		
			
				|  |  |             Map<String,Object> datas = hit.getSourceAsMap();
 | 
	
		
			
				|  |  |         for (SearchHit hit : searchHits) {
 | 
	
		
			
				|  |  |             Map<String, Object> datas = hit.getSourceAsMap();
 | 
	
		
			
				|  |  |             listData.add(datas);
 | 
	
		
			
				|  |  |             logger.info(datas.toString());
 | 
	
		
			
				|  |  |         }
 | 
	
	
		
			
				|  | @ -327,6 +322,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 查询语句转换
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param filters
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
	
		
			
				|  | @ -335,24 +331,24 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         if (StringUtils.isEmpty(filters)) {
 | 
	
		
			
				|  |  |             return boolQueryBuilder;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         String [] filterArr = filters.split(";");
 | 
	
		
			
				|  |  |         String[] filterArr = filters.split(";");
 | 
	
		
			
				|  |  |         for (String filter : filterArr) {
 | 
	
		
			
				|  |  |             if (filter.contains("||")){
 | 
	
		
			
				|  |  |                 String [] fields = filter.split("\\|\\|");
 | 
	
		
			
				|  |  |             if (filter.contains("||")) {
 | 
	
		
			
				|  |  |                 String[] fields = filter.split("\\|\\|");
 | 
	
		
			
				|  |  |                 BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
 | 
	
		
			
				|  |  |                 for (String filed : fields) {
 | 
	
		
			
				|  |  |                     String [] condition = filed.split("=");
 | 
	
		
			
				|  |  |                     String[] condition = filed.split("=");
 | 
	
		
			
				|  |  |                     queryBuilder.should(QueryBuilders.termQuery(condition[0], condition[1]));
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 boolQueryBuilder.must(queryBuilder);
 | 
	
		
			
				|  |  |             } else if (filter.contains("?")) {
 | 
	
		
			
				|  |  |                 String [] condition = filter.split("\\?");
 | 
	
		
			
				|  |  |                 String[] condition = filter.split("\\?");
 | 
	
		
			
				|  |  |                 MatchPhraseQueryBuilder matchPhraseQueryBuilder = QueryBuilders.matchPhraseQuery(condition[0], condition[1]);
 | 
	
		
			
				|  |  |                 boolQueryBuilder.must(matchPhraseQueryBuilder);
 | 
	
		
			
				|  |  |             } else if (filter.contains("<>")) {
 | 
	
		
			
				|  |  |                 String [] condition = filter.split("<>");
 | 
	
		
			
				|  |  |                 String[] condition = filter.split("<>");
 | 
	
		
			
				|  |  |                 if (condition[1].contains(",")) {
 | 
	
		
			
				|  |  |                     String [] inCondition = condition[1].split(",");
 | 
	
		
			
				|  |  |                     String[] inCondition = condition[1].split(",");
 | 
	
		
			
				|  |  |                     TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery(condition[0], inCondition);
 | 
	
		
			
				|  |  |                     boolQueryBuilder.mustNot(termsQueryBuilder);
 | 
	
		
			
				|  |  |                 } else {
 | 
	
	
		
			
				|  | @ -360,29 +356,29 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |                     boolQueryBuilder.mustNot(termQueryBuilder);
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             } else if (filter.contains(">=")) {
 | 
	
		
			
				|  |  |                 String [] condition = filter.split(">=");
 | 
	
		
			
				|  |  |                 String[] condition = filter.split(">=");
 | 
	
		
			
				|  |  |                 RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(condition[0]);
 | 
	
		
			
				|  |  |                 rangeQueryBuilder.gte(condition[1]);
 | 
	
		
			
				|  |  |                 boolQueryBuilder.must(rangeQueryBuilder);
 | 
	
		
			
				|  |  |             } else if (filter.contains(">")) {
 | 
	
		
			
				|  |  |                 String [] condition = filter.split(">");
 | 
	
		
			
				|  |  |                 String[] condition = filter.split(">");
 | 
	
		
			
				|  |  |                 RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(condition[0]);
 | 
	
		
			
				|  |  |                 rangeQueryBuilder.gt(condition[1]);
 | 
	
		
			
				|  |  |                 boolQueryBuilder.must(rangeQueryBuilder);
 | 
	
		
			
				|  |  |             } else if (filter.contains("<=")) {
 | 
	
		
			
				|  |  |                 String [] condition = filter.split("<=");
 | 
	
		
			
				|  |  |                 String[] condition = filter.split("<=");
 | 
	
		
			
				|  |  |                 RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(condition[0]);
 | 
	
		
			
				|  |  |                 rangeQueryBuilder.lte(condition[1]);
 | 
	
		
			
				|  |  |                 boolQueryBuilder.must(rangeQueryBuilder);
 | 
	
		
			
				|  |  |             } else if (filter.contains("<")) {
 | 
	
		
			
				|  |  |                 String [] condition = filter.split("<");
 | 
	
		
			
				|  |  |                 String[] condition = filter.split("<");
 | 
	
		
			
				|  |  |                 RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(condition[0]);
 | 
	
		
			
				|  |  |                 rangeQueryBuilder.lt(condition[1]);
 | 
	
		
			
				|  |  |                 boolQueryBuilder.must(rangeQueryBuilder);
 | 
	
		
			
				|  |  |             } else if (filter.contains("=")) {
 | 
	
		
			
				|  |  |                 String [] condition = filter.split("=");
 | 
	
		
			
				|  |  |                 String[] condition = filter.split("=");
 | 
	
		
			
				|  |  |                 if (condition[1].contains(",")) {
 | 
	
		
			
				|  |  |                     String [] inCondition = condition[1].split(",");
 | 
	
		
			
				|  |  |                     String[] inCondition = condition[1].split(",");
 | 
	
		
			
				|  |  |                     TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery(condition[0], inCondition);
 | 
	
		
			
				|  |  |                     boolQueryBuilder.must(termsQueryBuilder);
 | 
	
		
			
				|  |  |                 } else {
 | 
	
	
		
			
				|  | @ -396,11 +392,12 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 多条件查询
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param mustMap
 | 
	
		
			
				|  |  |      * @param length
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<String> multiSearch(Map<String,Object> mustMap,int length,String index) {
 | 
	
		
			
				|  |  |     public List<String> multiSearch(Map<String, Object> mustMap, int length, String index) {
 | 
	
		
			
				|  |  |         // 根据多个条件 生成 boolQueryBuilder
 | 
	
		
			
				|  |  |         BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
 | 
	
		
			
				|  |  | 
 | 
	
	
		
			
				|  | @ -416,15 +413,16 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         searchSourceBuilder.size(length);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         // 其中listSearchResult是自己编写的方法,以供多中查询方式使用。
 | 
	
		
			
				|  |  |         return listSearchResult(searchSourceBuilder,index);
 | 
	
		
			
				|  |  |         return listSearchResult(searchSourceBuilder, index);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 用来处理搜索结果,转换成链表
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param builder
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<String> listSearchResult(SearchSourceBuilder builder,String index) {
 | 
	
		
			
				|  |  |     public List<String> listSearchResult(SearchSourceBuilder builder, String index) {
 | 
	
		
			
				|  |  |         // 提交查询
 | 
	
		
			
				|  |  |         SearchRequest searchRequest = new SearchRequest(index);
 | 
	
		
			
				|  |  |         searchRequest.source(builder);
 | 
	
	
		
			
				|  | @ -441,7 +439,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         List<String> list = new LinkedList<>();
 | 
	
		
			
				|  |  |         SearchHits hits = searchResponse.getHits();
 | 
	
		
			
				|  |  |         Iterator<SearchHit> iterator = hits.iterator();
 | 
	
		
			
				|  |  |         while(iterator.hasNext()) {
 | 
	
		
			
				|  |  |         while (iterator.hasNext()) {
 | 
	
		
			
				|  |  |             SearchHit next = iterator.next();
 | 
	
		
			
				|  |  |             list.add(next.getSourceAsString());
 | 
	
		
			
				|  |  |         }
 | 
	
	
		
			
				|  | @ -449,20 +447,20 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * @param boolQueryBuilder  查询参数 build
 | 
	
		
			
				|  |  |      * @param sortName 排序字段名称
 | 
	
		
			
				|  |  |      * @param boolQueryBuilder 查询参数 build
 | 
	
		
			
				|  |  |      * @param sortName         排序字段名称
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<Map<String, Object>> queryList(String index,BoolQueryBuilder boolQueryBuilder,String sortName,Integer size) throws IOException {
 | 
	
		
			
				|  |  |     public List<Map<String, Object>> queryList(String index, BoolQueryBuilder boolQueryBuilder, String sortName, Integer size) throws IOException {
 | 
	
		
			
				|  |  |         //实例化查询请求对象
 | 
	
		
			
				|  |  |         SearchRequest request = new SearchRequest();
 | 
	
		
			
				|  |  |         //实例化SearchSourceBuilder
 | 
	
		
			
				|  |  |         SearchSourceBuilder searchBuilder = new SearchSourceBuilder();
 | 
	
		
			
				|  |  |         //将查询构造器注入SearchSourceBuilder
 | 
	
		
			
				|  |  |         if (StringUtils.isNoneBlank(sortName)){
 | 
	
		
			
				|  |  |         if (StringUtils.isNoneBlank(sortName)) {
 | 
	
		
			
				|  |  |             searchBuilder.query(boolQueryBuilder).sort(sortName, SortOrder.DESC);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (size!=null){
 | 
	
		
			
				|  |  |         if (size != null) {
 | 
	
		
			
				|  |  |             searchBuilder.size(size);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         //设置请求查询的索引(查询构造器中已指定,无需重复设置)
 | 
	
	
		
			
				|  | @ -477,10 +475,10 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         SearchHits hits = searchResponse.getHits();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         SearchHit[] searchHits = hits.getHits();
 | 
	
		
			
				|  |  |         List<Map<String,Object>> listData = new ArrayList<>();
 | 
	
		
			
				|  |  |         List<Map<String, Object>> listData = new ArrayList<>();
 | 
	
		
			
				|  |  |         //遍历查询结果
 | 
	
		
			
				|  |  |         for(SearchHit hit : searchHits){
 | 
	
		
			
				|  |  |             Map<String,Object> datas = hit.getSourceAsMap();
 | 
	
		
			
				|  |  |         for (SearchHit hit : searchHits) {
 | 
	
		
			
				|  |  |             Map<String, Object> datas = hit.getSourceAsMap();
 | 
	
		
			
				|  |  |             listData.add(datas);
 | 
	
		
			
				|  |  |             logger.info(datas.toString());
 | 
	
		
			
				|  |  |         }
 | 
	
	
		
			
				|  | @ -510,16 +508,17 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         /**
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 创建映射
 | 
	
		
			
				|  |  |      *  注意:保存数据之前如果没有创建相应的字
 | 
	
		
			
				|  |  |      *  段映射会导致搜索结果不准确
 | 
	
		
			
				|  |  |      * 注意:保存数据之前如果没有创建相应的字
 | 
	
		
			
				|  |  |      * 段映射会导致搜索结果不准确
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param source
 | 
	
		
			
				|  |  |      * @param setting - 该设置根据需要进行配置
 | 
	
		
			
				|  |  |      * @throws IOException
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public void mapping (String index, Map<String, Map<String, String>> source, Map<String, Object> setting) throws IOException{
 | 
	
		
			
				|  |  |     public void mapping(String index, Map<String, Map<String, String>> source, Map<String, Object> setting) throws IOException {
 | 
	
		
			
				|  |  |         RestHighLevelClient restHighLevelClient1 = elasticSearch7Pool.restHighLevelClient();
 | 
	
		
			
				|  |  |         XContentBuilder xContentBuilder = XContentFactory.jsonBuilder().startObject().startObject("properties");
 | 
	
		
			
				|  |  |         for (String field : source.keySet()) {
 | 
	
	
		
			
				|  | @ -548,8 +547,9 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         /**
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 添加数据
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param source
 | 
	
		
			
				|  |  |      * @return
 | 
	
	
		
			
				|  | @ -560,7 +560,8 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         if (StringUtils.isEmpty(_id)) {
 | 
	
		
			
				|  |  |             IndexRequest request = new IndexRequest(index);
 | 
	
		
			
				|  |  |             request.source(source);
 | 
	
		
			
				|  |  |             IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);;
 | 
	
		
			
				|  |  |             IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |             ;
 | 
	
		
			
				|  |  |             source.put("_id", response.getId());
 | 
	
		
			
				|  |  |         } else {
 | 
	
		
			
				|  |  |             UpdateRequest request = new UpdateRequest();
 | 
	
	
		
			
				|  | @ -573,12 +574,13 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         /**
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 批量删除数据
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param idArr
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public void bulkDelete (String index, String [] idArr) throws IOException {
 | 
	
		
			
				|  |  |     public void bulkDelete(String index, String[] idArr) throws IOException {
 | 
	
		
			
				|  |  |         if (idArr.length > 0) {
 | 
	
		
			
				|  |  |             BulkRequest bulkRequest = new BulkRequest();
 | 
	
		
			
				|  |  |             for (String id : idArr) {
 | 
	
	
		
			
				|  | @ -601,15 +603,16 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         /**
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 根据条件批量删除数据
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param queryBuilder
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public void deleteByFilter(String index,  QueryBuilder queryBuilder) throws IOException {
 | 
	
		
			
				|  |  |     public void deleteByFilter(String index, QueryBuilder queryBuilder) throws IOException {
 | 
	
		
			
				|  |  |         long count = count(index, queryBuilder);
 | 
	
		
			
				|  |  |         long page = count/10000 == 0 ? 1 :count/10000 +1;
 | 
	
		
			
				|  |  |         for (long i =0;i<page;i++) {
 | 
	
		
			
				|  |  |         long page = count / 10000 == 0 ? 1 : count / 10000 + 1;
 | 
	
		
			
				|  |  |         for (long i = 0; i < page; i++) {
 | 
	
		
			
				|  |  |             List<String> idList = getIds(index, queryBuilder);
 | 
	
		
			
				|  |  |             if (idList.size() > 0) {
 | 
	
		
			
				|  |  |                 String[] idArr = new String[idList.size()];
 | 
	
	
		
			
				|  | @ -638,6 +641,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 根据字段批量删除数据
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param type
 | 
	
		
			
				|  |  |      * @param field
 | 
	
	
		
			
				|  | @ -649,6 +653,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 根据条件批量删除数据
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param type
 | 
	
		
			
				|  |  |      * @param filters
 | 
	
	
		
			
				|  | @ -658,7 +663,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         deleteByFilter(index, queryBuilder);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |    /* *//**
 | 
	
		
			
				|  |  |     /* *//**
 | 
	
		
			
				|  |  |      * 根据条件批量删除数据
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param type
 | 
	
	
		
			
				|  | @ -696,41 +701,45 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 更新数据 - 返回最新文档
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param id
 | 
	
		
			
				|  |  |      * @param source
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      * @throws DocumentMissingException
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public Map<String, Object> update(String index,  String id, Map<String, Object> source) throws DocumentMissingException, IOException {
 | 
	
		
			
				|  |  |     public Map<String, Object> update(String index, String id, Map<String, Object> source) throws DocumentMissingException, IOException {
 | 
	
		
			
				|  |  |         source.remove("_id");
 | 
	
		
			
				|  |  |         UpdateRequest request = new UpdateRequest();
 | 
	
		
			
				|  |  |         request.index(index).id("_id");
 | 
	
		
			
				|  |  |         request.doc(JSONObject.toJSONString(source), XContentType.JSON);
 | 
	
		
			
				|  |  |         request.retryOnConflict(5);
 | 
	
		
			
				|  |  |         System.out.println("request==>" + JSON.toJSONString(request));
 | 
	
		
			
				|  |  |         UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         return findById(index,  id);
 | 
	
		
			
				|  |  |         return findById(index, id);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 更新数据 - 不返回文档
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param id
 | 
	
		
			
				|  |  |      * @param source
 | 
	
		
			
				|  |  |      * @throws DocumentMissingException
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public void voidUpdate (String index, String id, Map<String, Object> source) throws IOException {
 | 
	
		
			
				|  |  |     public void voidUpdate(String index, String id, Map<String, Object> source) throws IOException {
 | 
	
		
			
				|  |  |         source.remove("_id");
 | 
	
		
			
				|  |  |         UpdateRequest request = new UpdateRequest();
 | 
	
		
			
				|  |  |         request.index(index);
 | 
	
		
			
				|  |  |         request.id(id);
 | 
	
		
			
				|  |  |         request.doc(source);
 | 
	
		
			
				|  |  |         request.retryOnConflict(5);
 | 
	
		
			
				|  |  |         UpdateResponse response = restHighLevelClient.update(request,RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 批量更新数据
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param source
 | 
	
		
			
				|  |  |      * @throws DocumentMissingException
 | 
	
	
		
			
				|  | @ -739,7 +748,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         if (source.size() > 0) {
 | 
	
		
			
				|  |  |             BulkRequest bulkRequest = new BulkRequest();
 | 
	
		
			
				|  |  |             source.forEach(item -> {
 | 
	
		
			
				|  |  |                 String _id = (String)item.remove("_id");
 | 
	
		
			
				|  |  |                 String _id = (String) item.remove("_id");
 | 
	
		
			
				|  |  |                 if (!org.springframework.util.StringUtils.isEmpty(_id)) {
 | 
	
		
			
				|  |  |                     UpdateRequest request = new UpdateRequest();
 | 
	
		
			
				|  |  |                     request.index(index);
 | 
	
	
		
			
				|  | @ -747,12 +756,13 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |                     bulkRequest.add(request);
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             });
 | 
	
		
			
				|  |  |             BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest,RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |             BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 根据ID查找数据
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param id
 | 
	
		
			
				|  |  |      * @return
 | 
	
	
		
			
				|  | @ -770,6 +780,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 根据字段查找数据
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param field
 | 
	
		
			
				|  |  |      * @param value
 | 
	
	
		
			
				|  | @ -781,28 +792,31 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取文档列表
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param filters
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<Map<String, Object>> list(String index,  String filters) throws IOException {
 | 
	
		
			
				|  |  |     public List<Map<String, Object>> list(String index, String filters) throws IOException {
 | 
	
		
			
				|  |  |         QueryBuilder queryBuilder = getQueryBuilder(filters);
 | 
	
		
			
				|  |  |         System.out.println("queryBuilder==>" + JSON.toJSONString(queryBuilder));
 | 
	
		
			
				|  |  |         return list(index, queryBuilder);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取文档列表
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param queryBuilder
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<Map<String, Object>> list(String index,  QueryBuilder queryBuilder) throws IOException {
 | 
	
		
			
				|  |  |         int size = (int)count(index, queryBuilder);
 | 
	
		
			
				|  |  |     public List<Map<String, Object>> list(String index, QueryBuilder queryBuilder) throws IOException {
 | 
	
		
			
				|  |  |         int size = (int) count(index, queryBuilder);
 | 
	
		
			
				|  |  |         SearchSourceBuilder builder = SearchSourceBuilder(queryBuilder, null, 0, size);
 | 
	
		
			
				|  |  |         SearchRequest request = new SearchRequest(index);
 | 
	
		
			
				|  |  |         request.searchType(SearchType.DFS_QUERY_THEN_FETCH);
 | 
	
		
			
				|  |  |         request.source(builder);
 | 
	
		
			
				|  |  |         SearchResponse response = restHighLevelClient.search(request,RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         SearchHits hits = response.getHits();
 | 
	
		
			
				|  |  |         List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
 | 
	
		
			
				|  |  |         for (SearchHit hit : hits.getHits()) {
 | 
	
	
		
			
				|  | @ -815,6 +829,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取文档分页
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param type
 | 
	
		
			
				|  |  |      * @param filters
 | 
	
	
		
			
				|  | @ -828,6 +843,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取文档分页
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param type
 | 
	
		
			
				|  |  |      * @param filters
 | 
	
	
		
			
				|  | @ -842,6 +858,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取分档分页 - 带分页功能
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param type
 | 
	
		
			
				|  |  |      * @param filters
 | 
	
	
		
			
				|  | @ -858,6 +875,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取分档分页 - 带分页功能
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param type
 | 
	
		
			
				|  |  |      * @param queryBuilder
 | 
	
	
		
			
				|  | @ -871,7 +889,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         SearchRequest request = new SearchRequest(index);
 | 
	
		
			
				|  |  |         request.searchType(SearchType.DFS_QUERY_THEN_FETCH);
 | 
	
		
			
				|  |  |         request.source(builder);
 | 
	
		
			
				|  |  |         SearchResponse response = restHighLevelClient.search(request,RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         SearchHits hits = response.getHits();
 | 
	
		
			
				|  |  |         List<Map<String, Object>> resultList = new ArrayList<>();
 | 
	
		
			
				|  |  |         for (SearchHit hit : hits.getHits()) {
 | 
	
	
		
			
				|  | @ -879,36 +897,37 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |             source.put("_id", hit.getId());
 | 
	
		
			
				|  |  |             resultList.add(source);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         PageRequest pageRequest = PageRequest.of(page-1,size);
 | 
	
		
			
				|  |  |         PageRequest pageRequest = PageRequest.of(page - 1, size);
 | 
	
		
			
				|  |  |         return new PageImpl<>(resultList, pageRequest, hits.getTotalHits().value);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取ID列表
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param filters
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<String> getIds (String index,  String filters) throws IOException {
 | 
	
		
			
				|  |  |     public List<String> getIds(String index, String filters) throws IOException {
 | 
	
		
			
				|  |  |         QueryBuilder queryBuilder = getQueryBuilder(filters);
 | 
	
		
			
				|  |  |         return getIds(index,  queryBuilder);
 | 
	
		
			
				|  |  |         return getIds(index, queryBuilder);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取ID列表
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param queryBuilder
 | 
	
		
			
				|  |  |      * 最多只能一万条
 | 
	
		
			
				|  |  |      * @param queryBuilder 最多只能一万条
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<String> getIds (String index, QueryBuilder queryBuilder) throws IOException {
 | 
	
		
			
				|  |  |         int size = (int)count(index,queryBuilder);
 | 
	
		
			
				|  |  |         size = size > 10000 ? 10000:size;
 | 
	
		
			
				|  |  |     public List<String> getIds(String index, QueryBuilder queryBuilder) throws IOException {
 | 
	
		
			
				|  |  |         int size = (int) count(index, queryBuilder);
 | 
	
		
			
				|  |  |         size = size > 10000 ? 10000 : size;
 | 
	
		
			
				|  |  |         SearchSourceBuilder builder = SearchSourceBuilder(queryBuilder, null, 0, size);
 | 
	
		
			
				|  |  |         SearchRequest request = new SearchRequest(index);
 | 
	
		
			
				|  |  |         request.searchType(SearchType.DFS_QUERY_THEN_FETCH);
 | 
	
		
			
				|  |  |         request.source(builder);
 | 
	
		
			
				|  |  |         SearchResponse response = restHighLevelClient.search(request,RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         SearchHits hits = response.getHits();
 | 
	
		
			
				|  |  |         List<String> resultList = new ArrayList<>();
 | 
	
		
			
				|  |  |         for (SearchHit hit : hits.getHits()) {
 | 
	
	
		
			
				|  | @ -919,6 +938,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取文档数
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param type
 | 
	
		
			
				|  |  |      * @param filters
 | 
	
	
		
			
				|  | @ -926,11 +946,12 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public long count(String index, String type, String filters) throws IOException {
 | 
	
		
			
				|  |  |         QueryBuilder queryBuilder = getQueryBuilder(filters);
 | 
	
		
			
				|  |  |         return count(index,queryBuilder);
 | 
	
		
			
				|  |  |         return count(index, queryBuilder);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取文档数
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param queryBuilder
 | 
	
		
			
				|  |  |      * @return
 | 
	
	
		
			
				|  | @ -940,17 +961,14 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         SearchRequest request = new SearchRequest(index);
 | 
	
		
			
				|  |  |         request.searchType(SearchType.DFS_QUERY_THEN_FETCH);
 | 
	
		
			
				|  |  |         request.source(builder);
 | 
	
		
			
				|  |  |         SearchResponse response = restHighLevelClient.search(request,RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         return response.getHits().getTotalHits().value;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 根据日期分组
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param filters
 | 
	
		
			
				|  |  |      * @param start
 | 
	
	
		
			
				|  | @ -974,7 +992,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         builder.aggregation(dateHistogramBuilder);
 | 
	
		
			
				|  |  |         SearchRequest request = new SearchRequest(index);
 | 
	
		
			
				|  |  |         request.source(builder);
 | 
	
		
			
				|  |  |         SearchResponse response = restHighLevelClient.search(request,RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         Histogram histogram = response.getAggregations().get(index + "-" + field);
 | 
	
		
			
				|  |  |         Map<String, Long> temp = new HashMap<>();
 | 
	
		
			
				|  |  |         histogram.getBuckets().forEach(item -> temp.put(item.getKeyAsString(), item.getDocCount()));
 | 
	
	
		
			
				|  | @ -983,6 +1001,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 查询去重数量
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param filters
 | 
	
		
			
				|  |  |      * @param filed
 | 
	
	
		
			
				|  | @ -995,13 +1014,14 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         builder.aggregation(cardinality);
 | 
	
		
			
				|  |  |         SearchRequest request = new SearchRequest(index);
 | 
	
		
			
				|  |  |         request.source(builder);
 | 
	
		
			
				|  |  |         SearchResponse response = restHighLevelClient.search(request,RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         InternalCardinality internalCard = response.getAggregations().get("cardinality");
 | 
	
		
			
				|  |  |         return new Double(internalCard.getProperty("value").toString()).intValue();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 分组统计
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param filters
 | 
	
		
			
				|  |  |      * @param groupField
 | 
	
	
		
			
				|  | @ -1013,7 +1033,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         AbstractAggregationBuilder aggregation = AggregationBuilders.terms("count").field(groupField);
 | 
	
		
			
				|  |  |         builder.aggregation(aggregation);
 | 
	
		
			
				|  |  |         SearchRequest request = new SearchRequest(index);
 | 
	
		
			
				|  |  |         SearchResponse response = restHighLevelClient.search(request,RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         Terms terms = response.getAggregations().get("count");
 | 
	
		
			
				|  |  |         List<Terms.Bucket> buckets = (List<Terms.Bucket>) terms.getBuckets();
 | 
	
		
			
				|  |  |         Map<String, Long> groupMap = new HashMap<>();
 | 
	
	
		
			
				|  | @ -1026,6 +1046,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 分组求和
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param index
 | 
	
		
			
				|  |  |      * @param filters
 | 
	
		
			
				|  |  |      * @param sumField
 | 
	
	
		
			
				|  | @ -1034,17 +1055,17 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public Map<String, Double> sumByGroup(String index, String filters, String sumField, String groupField) throws IOException {
 | 
	
		
			
				|  |  |         QueryBuilder queryBuilder = getQueryBuilder(filters);
 | 
	
		
			
				|  |  |         SearchSourceBuilder builder = SearchSourceBuilder( queryBuilder, null, null, null);
 | 
	
		
			
				|  |  |         SearchSourceBuilder builder = SearchSourceBuilder(queryBuilder, null, null, null);
 | 
	
		
			
				|  |  |         TermsAggregationBuilder aggregation = AggregationBuilders.terms("sum_query").field(groupField);
 | 
	
		
			
				|  |  |         SumAggregationBuilder sumBuilder= AggregationBuilders.sum("sum_row").field(sumField);
 | 
	
		
			
				|  |  |         SumAggregationBuilder sumBuilder = AggregationBuilders.sum("sum_row").field(sumField);
 | 
	
		
			
				|  |  |         aggregation.subAggregation(sumBuilder);
 | 
	
		
			
				|  |  |         builder.aggregation(aggregation);
 | 
	
		
			
				|  |  |         SearchRequest request = new SearchRequest(index);
 | 
	
		
			
				|  |  |         SearchResponse response = restHighLevelClient.search(request,RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
 | 
	
		
			
				|  |  |         Terms terms = response.getAggregations().get("sum_query");
 | 
	
		
			
				|  |  |         List<Terms.Bucket> buckets = (List<Terms.Bucket>) terms.getBuckets();
 | 
	
		
			
				|  |  |         Map<String, Double> groupMap = new HashMap<>();
 | 
	
		
			
				|  |  |         for (Terms.Bucket bucket : buckets){
 | 
	
		
			
				|  |  |         for (Terms.Bucket bucket : buckets) {
 | 
	
		
			
				|  |  |             Sum sum2 = bucket.getAggregations().get("sum_row");
 | 
	
		
			
				|  |  |             groupMap.put(bucket.getKey().toString(), sum2.getValue());
 | 
	
		
			
				|  |  |         }
 | 
	
	
		
			
				|  | @ -1053,6 +1074,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取基础请求生成器
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param queryBuilder
 | 
	
		
			
				|  |  |      * @param sortBuilders
 | 
	
		
			
				|  |  |      * @return
 | 
	
	
		
			
				|  | @ -1075,6 +1097,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 排序语句转换
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param sorts
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
	
		
			
				|  | @ -1083,7 +1106,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         if (org.springframework.util.StringUtils.isEmpty(sorts)) {
 | 
	
		
			
				|  |  |             return sortBuilderList;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         String [] sortArr = sorts.split(";");
 | 
	
		
			
				|  |  |         String[] sortArr = sorts.split(";");
 | 
	
		
			
				|  |  |         for (String sort : sortArr) {
 | 
	
		
			
				|  |  |             String operator = sort.substring(0, 1);
 | 
	
		
			
				|  |  |             SortBuilder sortBuilder = new FieldSortBuilder(sort.substring(1));
 | 
	
	
		
			
				|  | @ -1100,8 +1123,9 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         /**
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 根据SQL查找数据
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param field
 | 
	
		
			
				|  |  |      * @param sql
 | 
	
		
			
				|  |  |      * @return
 | 
	
	
		
			
				|  | @ -1121,7 +1145,7 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |                 boolQuery = QueryMaker.explan(where);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         } catch (SqlParseException e) {
 | 
	
		
			
				|  |  |             logger.info("ReadES.createQueryBuilderByExpress-Exception,"+e.getMessage());
 | 
	
		
			
				|  |  |             logger.info("ReadES.createQueryBuilderByExpress-Exception," + e.getMessage());
 | 
	
		
			
				|  |  |             e.printStackTrace();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         //实例化查询请求对象
 | 
	
	
		
			
				|  | @ -1142,18 +1166,18 @@ public class ElasticSearch7Util {
 | 
	
		
			
				|  |  |         SearchHits hits = searchResponse.getHits();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         SearchHit[] searchHits = hits.getHits();
 | 
	
		
			
				|  |  |         List<Map<String,Object>> listData = new ArrayList<>();
 | 
	
		
			
				|  |  |         List<Map<String, Object>> listData = new ArrayList<>();
 | 
	
		
			
				|  |  |         //遍历查询结果
 | 
	
		
			
				|  |  |         for(SearchHit hit : searchHits){
 | 
	
		
			
				|  |  |             Map<String,Object> datas = hit.getSourceAsMap();
 | 
	
		
			
				|  |  |             Map<String,Object> result = new HashMap<>();
 | 
	
		
			
				|  |  |         for (SearchHit hit : searchHits) {
 | 
	
		
			
				|  |  |             Map<String, Object> datas = hit.getSourceAsMap();
 | 
	
		
			
				|  |  |             Map<String, Object> result = new HashMap<>();
 | 
	
		
			
				|  |  |             for (String _field : field) {
 | 
	
		
			
				|  |  |                 result.put(_field, datas.get(_field));
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             listData.add(result);
 | 
	
		
			
				|  |  |             logger.info(result.toString());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |       return listData;
 | 
	
		
			
				|  |  |         return listData;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 |