elasticsearch代码片段,及工具类SearchEsUtil.java
Posted xyhero
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearch代码片段,及工具类SearchEsUtil.java相关的知识,希望对你有一定的参考价值。
ElasticSearchClient.java
package com.zbiti.framework.elasticsearch.utils; import java.util.Arrays; import java.util.List; import java.util.Map; import org.apache.commons.collections.CollectionUtils; import org.apache.log4j.Logger; import org.elasticsearch.action.admin.cluster.node.info.NodeInfo; import org.elasticsearch.action.admin.cluster.node.info.NodesInfoRequest; import org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse; import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest; import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequestBuilder; import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse; import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.metadata.IndexMetaData; import org.elasticsearch.cluster.metadata.MappingMetaData; import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.node.Node; import org.elasticsearch.node.NodeBuilder; /** * 创建索引的client * * @author cookey */ public class ElasticSearchClient { private static Logger logger = Logger.getLogger(ElasticSearchClient.class); private static Client searchClient = null; private static List<String> clusterList = null; private ElasticSearchClient() { } /** * 创建client实例 * * @return client * */ public static synchronized Client getInstance() { if (searchClient == null) { open(); } return searchClient; } /* * 创建搜索客户??tcp连接搜索服务??创建索引 创建mapping */ private static void open() { try { /** * 如果100秒没有连接上搜索服务器,则超?? * */ Settings settings = ImmutableSettings .settingsBuilder() // .put(this.searchClientConfigureMap) .put("client.transport.ping_timeout", "100s") .put("client.transport.sniff", "true") .put("cluster.name",PropertyManager.getContextProperty("cluster.name")) // .put("client.transport.ignore_cluster_name", "true") .build(); /* 创建搜索客户??*/ searchClient = new TransportClient(settings); if (CollectionUtils.isEmpty(clusterList)) { String cluster = PropertyManager.getContextProperty("search.clusterList"); if (cluster != null) { clusterList = Arrays.asList(cluster.split(",")); } } for (String item : clusterList) { String address = item.split(":")[0]; int port = Integer.parseInt(item.split(":")[1]); /* 通过tcp连接搜索服务器,如果连接不上,有????可能是服务器端与客户端的jar包版本不匹配 */ searchClient = ((TransportClient) searchClient).addTransportAddress(new InetSocketTransportAddress( address, port)); } } catch (Exception e) { logger.error(e.getMessage()); e.printStackTrace(); } } /** * 创建node对象 * * @return client * */ public static Client createClient() { NodeBuilder builder = NodeBuilder.nodeBuilder(); String clusterName = PropertyManager.getContextProperty("cluster.name"); builder.clusterName(clusterName); Boolean isClient = Boolean.parseBoolean(PropertyManager .getContextProperty("node.client")); builder.client(isClient); Node node = builder.node(); /* * Node node = nodeBuilder().clusterName("yourclustername").node(); * Client client = node.client(); */ return node.client(); } /** * 测试ES可用连接数方??同时也也可以用以校验ES是否可以连接?? */ public static boolean testConnection(Client client) { try { /** * 获得节点信息 * */ NodesInfoResponse response = client.admin().cluster() .nodesInfo(new NodesInfoRequest().timeout("30")) .actionGet(); // 获得集群名称 String cluNameString = response.getClusterNameAsString(); System.out.println(cluNameString); // 获得节点名称 NodeInfo[] indexNameString = response.getNodes(); System.out.println(indexNameString[0].getNode().getName()); Map<String, NodeInfo> nodesMap = response.getNodesMap(); // 打印节点信息 for (Map.Entry<String, NodeInfo> entry : nodesMap.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue().getServiceAttributes()); } if (nodesMap != null) { return true; } /** * 获得Mapping * */ ClusterState cs = client.admin().cluster().prepareState() .setFilterIndices("standard_test").execute().actionGet() .getState(); IndexMetaData imd = cs.getMetaData().index("standard_test"); // type的名?? MappingMetaData mdd = imd.mapping("standard_type_test"); System.out.println(mdd.sourceAsMap()); } catch (Exception e) { e.printStackTrace(); System.out.println("无法连接到Elasticsearch"); } return false; } /** * 索引库是否存?? * * @param client * 客户?? * @param index * 索引库名 * @return 存在则返回true,不存在则返回false */ public static Boolean indexExist(Client client, String index) { IndicesExistsRequest request = new IndicesExistsRequestBuilder(client .admin().indices(), index).request(); IndicesExistsResponse response = client.admin().indices() .exists(request).actionGet(); return response.isExists(); } }
ElasticSearchDao.java
package com.zbiti.framework.elasticsearch.utils; import java.util.List; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.deletebyquery.DeleteByQueryResponse; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.index.query.FilterBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.search.SearchHits; import com.zbiti.framework.base.entity.BaseEntity; /** * ElasticSearch操作接口 * * @author LICHANGWU * */ public interface ElasticSearchDao { // -------------------------创建索引----------------------------- /** * 根据对象实例的json串创建索引(单条索引). * * @param indexName * 索引组名 * @param indexType * 索引类型 * @param indexId * 建立索引的唯一标识ID * @param jsonStr * 索引对象实例的对应json串 * @author LICHANGWU */ public IndexResponse createIndexByJson(String indexName, String indexType, String indexId, String jsonStr); /** * 根据对象集合批量索引(多条批量) * * @param indexName * 索引组名 * @param indexType * 索引类型 * @param surplusGoodsEntitys * 对象集合 */ public void createIndexsByBeans(String indexName, String indexType, List<BaseEntity> entry); // ------------------------------------查询------------------------------------------------- /** * 根据索引唯一标识ID查找对象(). * * @param indexName * 索引组名 * * @param indexType * 索引类型 * @param queryName * 查询字段名 * @param queryValue * 查询字段值 * @param PageInfo * 分页情况 * * @author LICHANGWU */ public List<Object> searchById(String indexName, String indexType, String queryName, String queryValue, PageInfo pageInfo); /** * 根据传入的值进行模糊查询(分页查询). * * @param indexName * 索引组名 * @param indexType * 索引类型 * * @param queryMap * key 查询条件 value 字段域 * @param pageInfo * 分页信息 * @return */ /** * 根据传入的值进行模糊查询(分页查询). * * @param indexName * 索引组名 * @param indexType * 索引类型 * * @param queryMap * key 查询条件 value 字段域 * @param pageInfo * 分页信息 * @return * @throws Exception */ public List search(String indexName, String indexType, List<QueryBuilder> bqbl,List<FilterBuilder> fbList,String[] highLighterFields, PageInfo pageInfo, Class cls,List<Order> orders) throws Exception; /** * 根据传入的值进行模糊查询(分组查询个数). * * @param indexName * 索引组名 * @param indexType * 索引类型 * * @param queryMap * key 查询条件 value 字段域 * @param pageInfo * 分页信息 * * @param groupFiled * 分页字段 * @return * @throws Exception */ public List searchCount(String indexName, String indexType, List<QueryBuilder> bqbl, List<FilterBuilder> fbList,PageInfo pageInfo,String groupFiled); public SearchHits searchByOnlyValue(String indexName, String indexType, String queryValue, PageInfo pageInfo) ; // -----------------------删除---(暂且完结)---------------------- /** * 根据指定属性键值对删除索引(查询删除). * * @param indexName * 索引组名 * @param indexType * 索引类型 * @param name * 删除依据的字段属性名 * @param value * 删除依据的字段属性值 */ public DeleteByQueryResponse deleteIndexByNameAndValue(String indexName, String indexType, String name, String value); /** * 根据索引的Id删除索引(单条删除). * * @param indexName * 索引组名 * @param indexType * 索引类型 * @param Id * 指定索引文档Id */ public DeleteResponse deleteIndexById(String indexName, String indexType, String Id); /** * 根据索引的Id集合删除索引(批量删除). * * @param indexName * 索引组名 * @param indexType * 索引类型 * @param Ids * 指定索引文档Id集合 */ public void deleteIndexByIds(String indexName, String indexType, List<String> Ids); /** * 删除确定索引组和索引类型下所有数据(危险,慎用). * * @param indexName * 索引组名 * @param indexType * 索引类型 */ public void deleteAllIndex(String indexName, String indxType); // --------------------------更新索引------------------------ /** * 根据ID更新索引(单条更新). * * @param indexName * 索引组名 * @param indexType * 索引类型 * @param obj * 更新数据 * @param Id * 更新条件Id * */ public void updateIndex(String indexName, String indexType, BaseEntity entry, String Id); }
ElasticSearchDaoImpl.java
package com.zbiti.framework.elasticsearch.utils; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONObject; import org.elasticsearch.action.bulk.BulkRequestBuilder; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.deletebyquery.DeleteByQueryResponse; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.Client; import org.elasticsearch.common.text.Text; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.FilterBuilder; import org.elasticsearch.index.query.FilterBuilders; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.facet.FacetBuilders; import org.elasticsearch.search.facet.terms.TermsFacet; import org.elasticsearch.search.facet.terms.TermsFacetBuilder; import org.elasticsearch.search.highlight.HighlightField; import org.elasticsearch.search.sort.SortOrder; import org.springframework.stereotype.Service; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.zbiti.framework.base.entity.BaseEntity; /** * ElasticSearch操作接口实现 * * @author LICHANGWU * */ @Service public class ElasticSearchDaoImpl implements ElasticSearchDao { Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create(); // -------------------------创建索引----------------------------- /** * 根据对象实例的json串创建索引. * * @param indexName * 索引组名 * @param indexType * 索引类型 * @param indexId * 建立索引的唯一标识ID * @param jsonStr * 索引对象实例的对应json串 * @author LICHANGWU */ public IndexResponse createIndexByJson(String indexName, String indexType, String indexId, String jsonStr) { Client client = ElasticSearchClient.getInstance(); IndexResponse response = client.prepareIndex(indexName, indexType, indexId).setSource(jsonStr).execute().actionGet(); System.out.println(response.getId()); return response; } /** * 根据对象集合批量索引(多条批量) * * @param indexName * 索引组名 * @param indexType * 索引类型 * @param surplusGoodsEntitys * 对象集合 */ public void createIndexsByBeans(String indexName, String indexType, List<BaseEntity> entry) { Client client = ElasticSearchClient.getInstance(); BulkRequestBuilder builder = client.prepareBulk(); for (BaseEntity g : entry) { String jsonStr = gson.toJson(g); String id = g.getId(); builder.add(client.prepareIndex(indexName, indexType, id) .setSource(jsonStr).request()); } builder.execute().actionGet(); } // ------------------------------------查询------------------------------------------------- /** * 根据索引唯一标识ID查找对象. * * @param indexName * 索引组名 * * @param indexType * 索引类型 * @param queryName * 查询字段名 * @param queryValue * 查询字段值 * @param PageInfo * 分页情况 * * @author LICHANGWU */ public List<Object> searchById(String indexName, String indexType, String queryName, String queryValue, PageInfo pageInfo) { Client client = ElasticSearchClient.getInstance(); return null; } /** * 根据传入的值进行模糊查询(分页查询). * * @param indexName * 索引组名 * @param indexType * 索引类型 * * @param queryMap * key 查询条件 value 字段域 * @param pageInfo * 分页信息 * @return * @throws Exception */ public List search(String indexName, String indexType, List<QueryBuilder> bqbl, List<FilterBuilder> fbList, String[] highLighterFields, PageInfo pageInfo, Class cls, List<Order> orders) throws Exception { Client client = ElasticSearchClient.getInstance(); int pageIndex = 0; int pageSize = 0; int from = 0; BoolQueryBuilder boolQueryBuilderTotal = QueryBuilders.boolQuery(); if (bqbl != null) { for (QueryBuilder bqb : bqbl) { boolQueryBuilderTotal.must(bqb); } } SearchRequestBuilder searchRequestBuilder = client.prepareSearch( indexName).setTypes(indexType); if (fbList != null) { for (FilterBuilder fb : fbList) { searchRequestBuilder.setFilter(fb); } } searchRequestBuilder.setQuery(boolQueryBuilderTotal).setExplain(true); if (pageInfo != null) { pageIndex = pageInfo.getCurrPage(); pageSize = pageInfo.getPageSize(); from = (pageIndex - 1) * pageSize; searchRequestBuilder.setFrom(from).setSize(pageSize); } if (orders != null && orders.size() > 0) { /* 如果需要排序 */ for (Order order : orders) { if (!"".equals(order.getField()) && null != order.getField()) { org.elasticsearch.search.sort.SortOrder sortOrder = "desc" .equals(order.getSort()) ? SortOrder.DESC : SortOrder.ASC; searchRequestBuilder = searchRequestBuilder.addSort(order .getField(), sortOrder); } } } if (highLighterFields != null && highLighterFields.length > 0) { String methodName = Thread.currentThread().getStackTrace()[2].getMethodName(); if(!"genernalReport".equals(methodName)){ //非导出excel表格时,添加样式 // 设置高亮显示 for (String field : highLighterFields) { searchRequestBuilder.addHighlightedField(field); } searchRequestBuilder.setHighlighterPreTags("<span style="color:red;">"); searchRequestBuilder.setHighlighterPostTags("</span>"); } } SearchResponse searchResponse = searchRequestBuilder.execute() .actionGet(); SearchHits hits = searchResponse.getHits(); SearchHit[] hts = hits.getHits(); List list = convert(hts, cls); if (pageInfo != null) { pageInfo.setTotal((int) hits.getTotalHits()); pageInfo.setResult(list); } return list; } /** * 根据传入的值进行模糊查询(分组查询个数). * * @param indexName * 索引组名 * @param indexType * 索引类型 * * @param queryMap * key 查询条件 value 字段域 * @param pageInfo * 分页信息 * * @param groupFiled * 分页字段 * @return * @throws Exception */ public List searchCount(String indexName, String indexType, List<QueryBuilder> bqbl, List<FilterBuilder> fbList,PageInfo pageInfo,String groupFiled){ Client client = ElasticSearchClient.getInstance(); int pageIndex = 0; int pageSize = 0; int from = 0; BoolQueryBuilder boolQueryBuilderTotal = QueryBuilders.boolQuery(); if (bqbl != null) { for (QueryBuilder bqb : bqbl) { boolQueryBuilderTotal.must(bqb); } } SearchRequestBuilder searchRequestBuilder = client.prepareSearch( indexName).setTypes(indexType); if (fbList != null) { for (FilterBuilder fb : fbList) { searchRequestBuilder.setFilter(fb); } } searchRequestBuilder.setQuery(boolQueryBuilderTotal).setExplain(true); if (pageInfo != null) { pageIndex = pageInfo.getCurrPage(); pageSize = pageInfo.getPageSize(); from = (pageIndex - 1) * pageSize; searchRequestBuilder.setFrom(from).setSize(pageSize); } TermsFacetBuilder facetBuilder = FacetBuilders.termsFacet(groupFiled).field(groupFiled).size(Integer.MAX_VALUE); SearchResponse searchResponse = searchRequestBuilder.addFacet(facetBuilder).execute() .actionGet(); List<Map> groupList = new ArrayList<Map>(); List<Map> resultList = new ArrayList<Map>(); TermsFacet tf = (TermsFacet)searchResponse.getFacets().facetsAsMap().get(groupFiled); for (TermsFacet.Entry entry : tf) { Map<String,Object> modelMap = new HashMap<String,Object>(); modelMap.put(groupFiled, entry.getTerm().toString()); modelMap.put("count", entry.getCount()); groupList.add(modelMap); } for(int i=0; i<10; i++){ int index = from + i; if(index >= groupList.size()){ break; } resultList.add(groupList.get(index)); } if (pageInfo != null) { pageInfo.setTotal(groupList.size()); pageInfo.setResult(resultList); } return resultList; } /** * 根据传入的值进行模糊查询(分页查询). * * @param indexName * 索引组名 * @param indexType * 索引类型 * * @param queryMap * key 查询条件 value 字段域 * @param pageInfo * 分页信息 * @return * @throws Exception */ public SearchHits searchByOnlyValue(String indexName, String indexType, String queryValue, PageInfo pageInfo) { Client client = ElasticSearchClient.getInstance(); int pageIndex = pageInfo.getCurrPage(); int pageSize = pageInfo.getPageSize(); int from = (pageIndex - 1) * pageSize; BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); QueryBuilder qu = QueryBuilders.fuzzyQuery("deviceName", queryValue); boolQueryBuilder.should(qu); SearchRequestBuilder searchRequestBuilder = client.prepareSearch( indexName).setTypes(indexType).setQuery(boolQueryBuilder) .setFrom(from).setSize(pageSize).addHighlightedField( "deviceName").setHighlighterEncoder("UTF-8") .setHighlighterPreTags("<font class=‘font-highlight‘>") .setHighlighterPostTags("</font>").setExplain(true); SearchResponse searchResponse = searchRequestBuilder.execute() .actionGet(); SearchHits hits = searchResponse.getHits(); return hits; } /** * 转化成实例对象的集合 * * @param hts * @param cls * @return * @throws Exception */ private List convert(SearchHit[] hts, Class cls) throws Exception { List list = new ArrayList(); List<Field> fields = new ArrayList<Field>(); getAllFields(cls, fields); for (SearchHit sh : hts) { Object obj = cls.newInstance(); // 获取对应的高亮域 Map<String, HighlightField> result = sh.highlightFields(); for (Field f : fields) { Object value = ""; if (result != null && result.size() > 0) { // 从设定的高亮域中取得指定域 HighlightField titleField = result.get(f.getName()); if (titleField != null) { // 取得定义的高亮标签 Text[] titleTexts = titleField.fragments(); // 为title串值增加自定义的高亮标签 for (Text text : titleTexts) { value = String.valueOf(value) + text; } } } if ("".equals(value) || null == value) { value = sh.getSource().get(f.getName()); } Class<?> type = f.getType(); Method m = cls.getMethod("set".concat( f.getName().substring(0, 1).toUpperCase()).concat( f.getName().substring(1)), new Class[] { type }); if (m != null) { if (value != null && !"".equals(value)) { if (type == String.class) { m.invoke(obj, new Object[] { String.valueOf(value) }); } else if (type == Integer.class || type == int.class) { m.invoke(obj, new Object[] { new Integer(String .valueOf(value)) }); } else if (type == Double.class || type == double.class) { m.invoke(obj, new Object[] { new Double(String .valueOf(value)) }); } else if (type == Date.class) { Map timeMap = (Map) value; Long time = (Long) timeMap.get("time"); m.invoke(obj, new Object[] { new Date(time) }); } else if (type == Boolean.class || type == boolean.class) { m.invoke(obj, new Object[] { new Boolean(String .valueOf(value)) }); } else if (type == Long.class || type == long.class) { m.invoke(obj, new Object[] { new Long(String .valueOf(value)) }); } else { throw new Exception("暂时无法赋值到" + type.getName() + "类型的属性中"); } } } } list.add(obj); } return list; } /** * 递归获取类所有属性包含父类属性 * * @param cls * @param list */ private void getAllFields(Class cls, List<Field> list) { Field[] f = cls.getDeclaredFields(); List<Field> l = Arrays.asList(f); list.addAll(l); Class superc = cls.getSuperclass(); if (superc != null) { getAllFields(superc, list); } } // -----------------------删除---(暂且完结)---------------------- /** * 根据指定属性键值对删除索引(查询删除). * * @param indexName * 索引组名 * @param indexType * 索引类型 * @param name * 删除依据的字段属性名 * @param value * 删除依据的字段属性值 */ public DeleteByQueryResponse deleteIndexByNameAndValue(String indexName, String indexType, String name, String value) { Client client = ElasticSearchClient.getInstance(); QueryBuilder queryBuiler = QueryBuilders.fieldQuery(name, value); DeleteByQueryResponse response = client.prepareDeleteByQuery(indexName) .setQuery(queryBuiler).execute().actionGet(); return response; } /** * 根据索引的Id删除索引. * * @param indexName * 索引组名 * @param indexType * 索引类型 * @param Id * 指定索引文档Id */ public DeleteResponse deleteIndexById(String indexName, String indexType, String Id) { Client client = ElasticSearchClient.getInstance(); DeleteResponse response = client .prepareDelete(indexName, indexType, Id).execute().actionGet(); return response; } /** * 根据索引的Id集合删除索引(批量删除). * * @param indexName * 索引组名 * @param indexType * 索引类型 * @param Ids * 指定索引文档Id集合 */ public void deleteIndexByIds(String indexName, String indexType, List<String> Ids) { Client client = ElasticSearchClient.getInstance(); BulkRequestBuilder builder = client.prepareBulk(); for (String id : Ids) { builder.add(client.prepareDelete(indexName, indexType, id) .request()); } builder.execute().actionGet(); } /** * 删除确定索引组和索引类型下所有数据(危险,慎用). * * @param indexName * 索引组名 * @param indexType * 索引类型 */ public void deleteAllIndex(String indexName, String indxType) { Client client = ElasticSearchClient.getInstance(); client.prepareDeleteByQuery(indexName).setTypes(indxType).setQuery( QueryBuilders.matchAllQuery()).execute().actionGet(); } /** * 根据ID更新索引(单条更新). * * @param indexName * 索引组名 * @param indexType * 索引类型 * @param obj * 更新数据 * @param Id * 更新条件Id * */ public void updateIndex(String indexName, String indexType, BaseEntity entry, String Id) { Client client = ElasticSearchClient.getInstance(); client.prepareDelete(indexName, indexType, Id).execute().actionGet(); JSONObject jsonstr = JSONObject.fromObject(entry); IndexResponse response = client.prepareIndex(indexName, indexType, Id) .setSource(jsonstr.toString()).execute().actionGet(); System.out.println(response.getId()); } public static void main(String[] args) { ElasticSearchDaoImpl ed = new ElasticSearchDaoImpl(); // ed.deleteAllIndex("supdem_index","supdem_index_type"); } }
Order.java
package com.zbiti.framework.elasticsearch.utils; public class Order { private String field; private String sort; public Order(){} public Order(String field,String sort){ this.field = field; this.sort = sort; } public String getField() { return field; } public void setField(String field) { this.field = field; } public String getSort() { return sort; } public void setSort(String sort) { this.sort = sort; } }
OrderInfo.java
package com.zbiti.framework.elasticsearch.utils; public class OrderInfo { private String field; private boolean sort; public String getField() { return field; } public void setField(String field) { this.field = field; } public boolean isSort() { return sort; } public void setSort(boolean sort) { this.sort = sort; } }
PageInfo.java
package com.zbiti.framework.elasticsearch.utils; import java.util.List; /** * ElasticSearch查询分页信息 * * @author LICHANGWU * */ public class PageInfo { private int pageSize; private int total; private int totalPage; private int currPage; private List result; public PageInfo(){ } public PageInfo(int currPage,int pageSize){ this.currPage= currPage; this.pageSize = pageSize; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; this.totalPage = this.total%this.pageSize == 0?this.total/this.pageSize : this.total/this.pageSize + 1; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getCurrPage() { return currPage; } public void setCurrPage(int currPage) { this.currPage = currPage; } public List getResult() { return result; } public void setResult(List result) { this.result = result; } }
SearchEsUtil.java
package com.zbiti.framework.elasticsearch.utils; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.elasticsearch.index.query.BoolFilterBuilder; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.FilterBuilder; import org.elasticsearch.index.query.FilterBuilders; import org.elasticsearch.index.query.MultiMatchQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; public class SearchEsUtil { /** * 多个查询条件在一个域中查询 :或关系 * @param query * @return */ public static QueryBuilder appendMulToOneOrRelation(String[] query,String queryArea){ BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); for(String que : query){ QueryBuilder qu =QueryBuilders.fieldQuery(queryArea,"""+que+""").analyzer(null).analyzeWildcard(false); boolQueryBuilder.should(qu); } return boolQueryBuilder; } /** * 一个查询条件在多个域中查询 :或关系 * @param query * @return */ public static QueryBuilder appendOneToMulOrRelation(String query,String[] queryArea,boolean fz){ BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); if(!fz){ query = """+query+"""; for(String que : queryArea){ QueryBuilder qu =QueryBuilders.fieldQuery(que,query).analyzer(null).analyzeWildcard(false); boolQueryBuilder.should(qu); } return boolQueryBuilder; }else{ MultiMatchQueryBuilder mulqueryBuilder = QueryBuilders.multiMatchQuery(query, queryArea); BoolQueryBuilder builder = boolQueryBuilder.should(mulqueryBuilder); return builder; } } /** * 一个查询条件在一个域中查询:且关系 * @param query * @param queryArea * @return */ public static QueryBuilder appendOneToOneAndRelation(String query,String queryArea){ BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); QueryBuilder qu =QueryBuilders.fieldQuery(queryArea,"""+query+""").analyzer(null).analyzeWildcard(false); boolQueryBuilder.must(qu); return boolQueryBuilder; } /** * 时间过滤 * @param start * @param end * @param queryArea * @return */ public static FilterBuilder appendTimeRelation(String start,String end,String queryArea){ BoolFilterBuilder qu = FilterBuilders.boolFilter().must(FilterBuilders.rangeFilter(queryArea).from(start).to(end)); return qu; } /** * 组合查询条件分组转化 * @param mulQuery * @return */ public static Map<String,String[]> mulQueryToMap(String mulQuery){ Map<String,String[]> mulMap = new HashMap<String,String[]>(); if(null != mulQuery && !"".equals(mulQuery)){ String[] querys = mulQuery.split(","); Set<String> keyS = new HashSet<String>(); List<String> vals = new ArrayList<String>(); for(String query:querys){ if(null != query && !"".equals(query)){ String[] s = query.split("_"); keyS.add(s[0]); vals.add(query); } } for(String key:keyS){ List<String> tol = new ArrayList<String>(); for(String val : vals){ if(val.contains(key)){ tol.add(val.split("_")[1]); } } mulMap.put(key,tol.toArray(new String[tol.size()])); } } return mulMap; } }
SurplusGoodsEntity.java
package com.zbiti.framework.elasticsearch.utils; import java.io.Serializable; import java.util.Date; /** * 闲置资源实体类. * * @author LICHANGWU * */ public class SurplusGoodsEntity implements Serializable { /** * serialVersionUID. */ private static final long serialVersionUID = -5266853903541167616L; /** * 唯一标识ID */ private String id; /** * 正式库资源ID. */ private int deviceId; /** * 资源编号. */ private String deviceNo; /** * 专业. */ private String specialty; /** * 网元. */ private String netType; /** * 设备型号. */ private int modelId; /** * 资产目录. */ private int assId; /** * 设备名称. */ private String deviceName; /** * 干线级别. */ private String trunkLine; /** * 公司编码. */ private String companyCode; /** * 部门编码. */ private String departmentCode; /** * 维护人. */ private String maintenceMan; /** * 存放位置. */ private String place; /** * 原值. */ private double originalValue; /** * 净值. */ private double netValue; /** * 数据来源. */ private String dataSource; /** * 开始使用时间. */ private Date useDate; /** * 开始闲置时间. */ private Date beginDate; /** * 资源卡片编号. */ private String cardNo; /** * 资产属性. */ private String assetProperty; /** * 计量单位. */ private String unit; /** * 录入方式. */ private String inputWay; /** * 闲置原因. */ private String leaveuseWhy; /** * 使用年限. */ private String liftSpan; /** * 库存. */ private int ctockNum; /** * 是否可用. */ private String disable; /** * 调拨次数. */ private String allocateCount; /** * 是否上架. */ private String isShelves; /** * 浏览次数. */ private int browseCount; /** * 点击量. */ private int scanTotal; /** * 排序. */ private int sort; /** * 获取唯一标识ID. */ public String getId() { return id; } /** * 设置唯一标识ID. */ public void setId(String id) { this.id = id; } /** * 获取正式库资源ID. */ public int getDeviceId() { return deviceId; } /** * 设置正式库资源ID. */ public void setDeviceId(int deviceId) { this.deviceId = deviceId; } /** * 获取资源编号. */ public String getDeviceNo() { return deviceNo; } /** *设置 资源编号. */ public void setDeviceNo(String deviceNo) { this.deviceNo = deviceNo; } /** * 获取专业. */ public String getSpecialty() { return specialty; } /** * 设置专业. */ public void setSpecialty(String specialty) { this.specialty = specialty; } /** * 获取网元. */ public String getNetType() { return netType; } /** *设置 网元. */ public void setNetType(String netType) { this.netType = netType; } /** * 获取设备型号. */ public int getModelId() { return modelId; } /** * 设置设备型号. */ public void setModelId(int modelId) { this.modelId = modelId; } /** * 获取资产目录. */ public int getAssId() { return assId; } /** * 设置资产目录. */ public void setAssId(int assId) { this.assId = assId; } /** * 获取设备名称. */ public String getDeviceName() { return deviceName; } /** * 设置设备名称. */ public void setDeviceName(String deviceName) { this.deviceName = deviceName; } /** * 获取干线级别. */ public String getTrunkLine() { return trunkLine; } /** * 设置干线级别. */ public void setTrunkLine(String trunkLine) { this.trunkLine = trunkLine; } /** * 获取公司编码. */ public String getCompanyCode() { return companyCode; } /** * 设置公司编码. */ public void setCompanyCode(String companyCode) { this.companyCode = companyCode; } /** * 获取部门编码. */ public String getDepartmentCode() { return departmentCode; } /** * 设置部门编码. */ public void setDepartmentCode(String departmentCode) { this.departmentCode = departmentCode; } /** * 获取维护人. */ public String getMaintenceMan() { return maintenceMan; } /** * 设置维护人. */ public void setMaintenceMan(String maintenceMan) { this.maintenceMan = maintenceMan; } /** * 获取存放位置. */ public String getPlace() { return place; } /** * 设置存放位置. */ public void setPlace(String place) { this.place = place; } /** * 获取原值. */ public double getOriginalValue() { return originalValue; } /** *设置 原值. */ public void setOriginalValue(double originalValue) { this.originalValue = originalValue; } /** * 获取净值. */ public double getNetValue() { return netValue; } /** * 设置净值. */ public void setNetValue(double netValue) { this.netValue = netValue; } /** * 获取数据来源. */ public String getDataSource() { return dataSource; } /** * 设置数据来源. */ public void setDataSource(String dataSource) { this.dataSource = dataSource; } /** * 获取开始使用时间. */ public Date getUseDate() { return useDate; } /** * 设置开始使用时间. */ public void setUseDate(Date useDate) { this.useDate = useDate; } /** * 获取开始闲置时间. */ public Date getBeginDate() { return beginDate; } /** * 设置开始闲置时间. */ public void setBeginDate(Date beginDate) { this.beginDate = beginDate; } /** * 获取资源卡片编号. */ public String getCardNo() { return cardNo; } /** *设置 资源卡片编号. */ public void setCardNo(String cardNo) { this.cardNo = cardNo; } /** * 获取资产属性. */ public String getAssetProperty() { return assetProperty; } /** * 设置资产属性. */ public void setAssetProperty(String assetProperty) { this.assetProperty = assetProperty; } /** * 获取计量单位. */ public String getUnit() { return unit; } /** * 设置计量单位. */ public void setUnit(String unit) { this.unit = unit; } /** * 获取录入方式. */ public String getInputWay() { return inputWay; } /** * 设置录入方式. */ public void setInputWay(String inputWay) { this.inputWay = inputWay; } /** * 获取闲置原因. */ public String getLeaveuseWhy() { return leaveuseWhy; } /** * 设置闲置原因. */ public void setLeaveuseWhy(String leaveuseWhy) { this.leaveuseWhy = leaveuseWhy; } /** * 获取使用年限. */ public String getLiftSpan() { return liftSpan; } /** * 设置使用年限. */ public void setLiftSpan(String liftSpan) { this.liftSpan = liftSpan; } /** * 获取库存. */ public int getCtockNum() { return ctockNum; } /** * 设置库存. */ public void setCtockNum(int ctockNum) { this.ctockNum = ctockNum; } /** * 获取是否可用. */ public String getDisable() { return disable; } /** * 设置是否可用. */ public void setDisable(String disable) { this.disable = disable; } /** * 获取调拨次数. */ public String getAllocateCount() { return allocateCount; } /** * 设置调拨次数. */ public void setAllocateCount(String allocateCount) { this.allocateCount = allocateCount; } /** * 获取是否上架. */ public String getIsShelves() { return isShelves; } /** * 设置是否上架. */ public void setIsShelves(String isShelves) { this.isShelves = isShelves; } /** *获取 浏览次数. */ public int getBrowseCount() { return browseCount; } /** * 设置浏览次数. */ public void setBrowseCount(int browseCount) { this.browseCount = browseCount; } /** * 获取点击量. */ public int getScanTotal() { return scanTotal; } /** * 设置点击量. */ public void setScanTotal(int scanTotal) { this.scanTotal = scanTotal; } /** * 获取排序. */ public int getSort() { return sort; } /** * 设置排序. */ public void setSort(int sort) { this.sort = sort; } }
PropertyManager.java
package com.zbiti.framework.elasticsearch.utils; import java.io.File; import java.io.FileInputStream; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.Properties; /** * 资源文件管理 * * @author LICHANGWU * */ public class PropertyManager { private static Map<String, String> ctxPropertiesMap = null; static { try { String path = PropertyManager.class.getResource("/").getPath(); File dic = new File(path); ctxPropertiesMap = new HashMap<String, String>(); for (File file : dic.listFiles()) { if (file.getName().endsWith(".properties")) { Properties prop = new Properties(); prop.load(new FileInputStream(file)); Enumeration<Object> keys = prop.keys(); while (keys.hasMoreElements()) { String key = keys.nextElement().toString(); String value = prop.getProperty(key); value = new String(value.getBytes("ISO-8859-1"),"UTF-8"); ctxPropertiesMap.put(key, value); } } } } catch (Exception e) { e.printStackTrace(); } } /** * 获取配置属 * * @param name * @return String */ public static String getContextProperty(String name) { return (String) ctxPropertiesMap.get(name); } }
以上是关于elasticsearch代码片段,及工具类SearchEsUtil.java的主要内容,如果未能解决你的问题,请参考以下文章
java调用Linux执行Python爬虫,并将数据存储到elasticsearch中--(java后台代码)
solr分布式索引实战分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例
ElasticSearch学习问题记录——Invalid shift value in prefixCoded bytes (is encoded value really an INT?)(代码片段