elasticsearch代码片段,及工具类SearchEsUtil.java

时间:2023-03-09 16:46:18
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);
}
}