spring 操作elasticsearch查询使用方法

论坛 期权论坛 脚本     
niminba   2021-5-23 04:10   2765   0

最近学习了一下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
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP