最近学习了一下elasticsearch使用,网上的资料又很少,真是一个头两个大。好歹最后终于了解了。留个笔记做日后查询。
package com.gooddeep.dev.elasticsearch.commons.dao;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.elasticsearch.action.ActionFuture;
import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest;
import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.cluster.health.ClusterHealthStatus;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.highlight.HighlightBuilder;
import org.elasticsearch.search.highlight.HighlightBuilder.Field;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.SearchResultMapper;
import org.springframework.data.elasticsearch.core.query.Criteria;
import org.springframework.data.elasticsearch.core.query.CriteriaQuery;
import org.springframework.data.elasticsearch.core.query.DeleteQuery;
import org.springframework.data.elasticsearch.core.query.IndexQuery;
import org.springframework.data.elasticsearch.core.query.IndexQueryBuilder;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.data.elasticsearch.core.query.StringQuery;
import org.springframework.stereotype.Component;
import com.gooddeep.dev.core.helper.PropertyHelper;
import com.gooddeep.dev.core.helper.UuidHelper;
import com.gooddeep.dev.core.model.BasePage;
import com.gooddeep.dev.elasticsearch.commons.model.EsBaseBean;
import com.gooddeep.dev.elasticsearch.commons.service.EsBaseService;
@Component("esBaseDao")
public abstract class EsBaseDaoImpl<T> implements EsBaseDao<T> {
private Logger logger = LoggerFactory.getLogger(EsBaseService.class);
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
@Autowired
private Client esClient;
/**
* 插入或等新,需要有id,id需要自己生成
*
* @param tList
* @return
*/
public boolean insertOrUpdate(List<T> tList) {
List<IndexQuery> queries = new ArrayList<IndexQuery>();
for (T t : tList) {
String id = ((EsBaseBean) t).getId();
if (id == null) {
id = UuidHelper.getRandomUUID();
((EsBaseBean) t).setId(id);
}
IndexQuery indexQuery = new IndexQueryBuilder().withId(id).withObject(t).build();
queries.add(indexQuery);
}
elasticsearchTemplate.bulkIndex(queries);
return true;
}
/**
* 插入或更新
*
* @param t
* @return
*/
public boolean insertOrUpdate(T t) {
String id = ((EsBaseBean) t).getId();
if (id == null) {
id = UuidHelper.getRandomUUID();
((EsBaseBean) t).setId(id);
}
try {
IndexQuery indexQuery = new IndexQueryBuilder().withId(id).withObject(t).build();
elasticsearchTemplate.index(indexQuery);
return true;
} catch (Exception e) {
logger.error("insert or update user info error.", e);
return false;
}
}
/**
* 删除
*
* @param id
* @return
*/
public boolean deleteById(String id) {
try {
elasticsearchTemplate.delete(getEntityClass(), id);
return true;
} catch (Exception e) {
logger.error("delete " + getEntityClass() + " by id " + id
+ " error.", e);
return false;
}
}
/**
* 删除ids
* @param idList
* @return
*/
@Override
public boolean deleteByIds(List<String> idList) {
try {
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria());
criteriaQuery.setIds(idList);
elasticsearchTemplate.delete(criteriaQuery, getEntityClass());
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 根据条件查询
* @param filedContentMap 不能为null
* @return
*/
public boolean deleteByQuery(Map<String,Object> filedContentMap) {
try {
DeleteQuery dq = new DeleteQuery();
BoolQueryBuilder qb=QueryBuilders. boolQuery();
if(filedContentMap!=null)
for (String key : filedContentMap.keySet()) {//字段查询
qb.must(QueryBuilders.matchQuery(key,filedContentMap.get(key)));
}
dq.setQuery(qb);;
elasticsearchTemplate.delete(dq, getEntityClass());;
return true;
} catch (Exception e) {
e.printStackTrace(); (((4(5M=Й5!й(M9聡(MY!йС9lM(5С9Y(PA=
5(锠(A%P1P((4(4(zsc4(QE
(4(Р(4(r~4(4(4(4(4(P M(MEEME(PQСE4(
(4(4(4(4(4(QQ(Q(4(4(
ЁР(4(4(4(4(4(z,4(4(4(4(Ё
P
(4(*Bj4(4(Ё5(4(4(4(4(4)4(brZj3ro疒j惚r'&*rokkR2 |