diff --git a/src/main/java/com/gzzn/omms/adminapi/elasticsearch/ElasticsearchUtil.java b/src/main/java/com/gzzn/omms/adminapi/elasticsearch/ElasticsearchUtil.java index ec36955..6f507a3 100644 --- a/src/main/java/com/gzzn/omms/adminapi/elasticsearch/ElasticsearchUtil.java +++ b/src/main/java/com/gzzn/omms/adminapi/elasticsearch/ElasticsearchUtil.java @@ -1,35 +1,18 @@ package com.gzzn.omms.adminapi.elasticsearch; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; import java.util.UUID; import javax.annotation.PostConstruct; import org.elasticsearch.action.admin.indices.create.CreateIndexResponse; -import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse; import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest; import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse; -import org.elasticsearch.action.delete.DeleteResponse; -import org.elasticsearch.action.get.GetRequestBuilder; -import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexResponse; -import org.elasticsearch.action.search.SearchRequestBuilder; -import org.elasticsearch.action.search.SearchResponse; -import org.elasticsearch.action.search.SearchType; -import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.client.transport.TransportClient; -import org.elasticsearch.common.text.Text; -import org.elasticsearch.index.query.QueryBuilder; -import org.elasticsearch.search.SearchHit; -import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; -import org.elasticsearch.search.sort.SortOrder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; import com.alibaba.fastjson.JSONObject; @@ -65,25 +48,6 @@ public class ElasticsearchUtil { return indexresponse.isAcknowledged(); } - /** - * 删除索引 - * - * @param index - * @return - */ - public static boolean deleteIndex(String index) { - if (!isIndexExist(index)) { - LOGGER.info("Index is not exits!"); - } - DeleteIndexResponse dResponse = client.admin().indices().prepareDelete(index).execute().actionGet(); - if (dResponse.isAcknowledged()) { - LOGGER.info("delete index " + index + " successfully!"); - } else { - LOGGER.info("Fail to delete index " + index); - } - return dResponse.isAcknowledged(); - } - /** * 判断索引是否存在 * @@ -100,18 +64,6 @@ public class ElasticsearchUtil { return inExistsResponse.isExists(); } - /** - * @Author: LX - * @Description: 判断inde下指定type是否存在 - * @Date: 2018/11/6 14:46 - * @Modified by: - */ - public boolean isTypeExist(String index, String type) { - return isIndexExist(index) - ? client.admin().indices().prepareTypesExists(index).setTypes(type).execute().actionGet().isExists() - : false; - } - /** * 数据添加,正定ID * @@ -121,7 +73,7 @@ public class ElasticsearchUtil { * @param id 数据ID * @return */ - public static String addData(JSONObject jsonObject, String index, String type, String id) { + private static String addData(JSONObject jsonObject, String index, String type, String id) { IndexResponse response = client.prepareIndex(index, type, id).setSource(jsonObject).get(); LOGGER.info("addData response status:{},id:{}", response.status().getStatus(), response.getId()); return response.getId(); @@ -139,229 +91,6 @@ public class ElasticsearchUtil { return addData(jsonObject, index, type, ElasticsearchUtil.getUUID32()); } - /** - * 通过ID删除数据 - * - * @param index 索引,类似数据库 - * @param type 类型,类似表 - * @param id 数据ID - */ - public static void deleteDataById(String index, String type, String id) { - - DeleteResponse response = client.prepareDelete(index, type, id).execute().actionGet(); - - LOGGER.info("deleteDataById response status:{},id:{}", response.status().getStatus(), response.getId()); - } - - /** - * 通过ID 更新数据 - * - * @param jsonObject 要增加的数据 - * @param index 索引,类似数据库 - * @param type 类型,类似表 - * @param id 数据ID - * @return - */ - public static void updateDataById(JSONObject jsonObject, String index, String type, String id) { - - UpdateRequest updateRequest = new UpdateRequest(); - - updateRequest.index(index).type(type).id(id).doc(jsonObject); - - client.update(updateRequest); - - } - - /** - * 通过ID获取数据 - * - * @param index 索引,类似数据库 - * @param type 类型,类似表 - * @param id 数据ID - * @param fields 需要显示的字段,逗号分隔(缺省为全部字段) - * @return - */ - public static Map searchDataById(String index, String type, String id, String fields) { - - GetRequestBuilder getRequestBuilder = client.prepareGet(index, type, id); - - if (!StringUtils.isEmpty(fields)) { - getRequestBuilder.setFetchSource(fields.split(","), null); - } - - GetResponse getResponse = getRequestBuilder.execute().actionGet(); - - return getResponse.getSource(); - } - - - /** - * 使用分词查询,并分页 - * - * @param index 索引名称 - * @param type 类型名称,可传入多个type逗号分隔 - * @param startPage 当前页 - * @param pageSize 每页显示条数 - * @param query 查询条件 - * @param fields 需要显示的字段,逗号分隔(缺省为全部字段) - * @param sortField 排序字段 - * @param highlightField 高亮字段 - * @return - */ - public static EsPage searchDataPage(String index, String type, int startPage, int pageSize, QueryBuilder query, String fields, String sortField, String highlightField) { - SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index); - if (!StringUtils.isEmpty(type)) { - searchRequestBuilder.setTypes(type.split(",")); - } - searchRequestBuilder.setSearchType(SearchType.QUERY_THEN_FETCH); - - // 需要显示的字段,逗号分隔(缺省为全部字段) - if (!StringUtils.isEmpty(fields)) { - searchRequestBuilder.setFetchSource(fields.split(","), null); - } - - //排序字段 - if (!StringUtils.isEmpty(sortField)) { - searchRequestBuilder.addSort(sortField, SortOrder.DESC); - } - - // 高亮(xxx=111,aaa=222) - if (!StringUtils.isEmpty(highlightField)) { - HighlightBuilder highlightBuilder = new HighlightBuilder(); - - //highlightBuilder.preTags("");//设置前缀 - //highlightBuilder.postTags("");//设置后缀 - - // 设置高亮字段 - highlightBuilder.field(highlightField); - searchRequestBuilder.highlighter(highlightBuilder); - } - - //searchRequestBuilder.setQuery(QueryBuilders.matchAllQuery()); - searchRequestBuilder.setQuery(query); - - // 分页应用 - searchRequestBuilder.setFrom(startPage).setSize(pageSize); - - // 设置是否按查询匹配度排序 - searchRequestBuilder.setExplain(true); - - //打印的内容 可以在 Elasticsearch head 和 Kibana 上执行查询 - LOGGER.info("\n{}", searchRequestBuilder); - - // 执行搜索,返回搜索响应信息 - SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - - long totalHits = searchResponse.getHits().totalHits; - long length = searchResponse.getHits().getHits().length; - - LOGGER.debug("共查询到[{}]条数据,处理数据条数[{}]", totalHits, length); - - if (searchResponse.status().getStatus() == 200) { - // 解析对象 - List> sourceList = setSearchResponse(searchResponse, highlightField); - - return new EsPage(startPage, pageSize, (int) totalHits, sourceList); - } - - return null; - - } - - - /** - * 使用分词查询 - * - * @param index 索引名称 - * @param type 类型名称,可传入多个type逗号分隔 - * @param query 查询条件 - * @param size 文档大小限制 - * @param fields 需要显示的字段,逗号分隔(缺省为全部字段) - * @param sortField 排序字段 - * @param highlightField 高亮字段 - * @return - */ - public static List> searchListData( - String index, String type, QueryBuilder query, Integer size, - String fields, String sortField, String highlightField) { - - SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index); - if (!StringUtils.isEmpty(type)) { - searchRequestBuilder.setTypes(type.split(",")); - } - - if (!StringUtils.isEmpty(highlightField)) { - HighlightBuilder highlightBuilder = new HighlightBuilder(); - // 设置高亮字段 - highlightBuilder.field(highlightField); - searchRequestBuilder.highlighter(highlightBuilder); - } - - searchRequestBuilder.setQuery(query); - - if (!StringUtils.isEmpty(fields)) { - searchRequestBuilder.setFetchSource(fields.split(","), null); - } - searchRequestBuilder.setFetchSource(true); - - if (!StringUtils.isEmpty(sortField)) { - searchRequestBuilder.addSort(sortField, SortOrder.DESC); - } - - if (size != null && size > 0) { - searchRequestBuilder.setSize(size); - } - - //打印的内容 可以在 Elasticsearch head 和 Kibana 上执行查询 - LOGGER.info("\n{}", searchRequestBuilder); - - SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - - long totalHits = searchResponse.getHits().totalHits; - long length = searchResponse.getHits().getHits().length; - - LOGGER.info("共查询到[{}]条数据,处理数据条数[{}]", totalHits, length); - - if (searchResponse.status().getStatus() == 200) { - // 解析对象 - return setSearchResponse(searchResponse, highlightField); - } - return null; - - } - - - /** - * 高亮结果集 特殊处理 - * - * @param searchResponse - * @param highlightField - */ - private static List> setSearchResponse(SearchResponse searchResponse, String highlightField) { - List> sourceList = new ArrayList>(); - StringBuffer stringBuffer = new StringBuffer(); - - for (SearchHit searchHit : searchResponse.getHits().getHits()) { - searchHit.getSourceAsMap().put("id", searchHit.getId()); - - if (!StringUtils.isEmpty(highlightField)) { - - System.out.println("遍历 高亮结果集,覆盖 正常结果集" + searchHit.getSourceAsMap()); - Text[] text = searchHit.getHighlightFields().get(highlightField).getFragments(); - - if (text != null) { - for (Text str : text) { - stringBuffer.append(str.string()); - } - //遍历 高亮结果集,覆盖 正常结果集 - searchHit.getSourceAsMap().put(highlightField, stringBuffer.toString()); - } - } - sourceList.add(searchHit.getSourceAsMap()); - } - return sourceList; - } - private static String getUUID32(){ String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase(); return uuid;