根据ElasticsearchRestTemplate封装的工具类

@Slf4j
@Component
public class CommonEsRepositoryUtil {

    private final ElasticsearchRestTemplate elasticsearchRestTemplate;

    public CommonEsRepositoryUtil(ElasticsearchRestTemplate elasticsearchRestTemplate) {
        this.elasticsearchRestTemplate = elasticsearchRestTemplate;
    }

    /**
     * 判断索引是否存在
     * @param indexName 索引名称
     * @return boolean
     */
    public boolean indexExist(String indexName){
        if(StringUtils.isBlank(indexName)){
            return false;
        }
        IndexCoordinates indexCoordinates = IndexCoordinates.of(indexName);
        return elasticsearchRestTemplate.indexOps(indexCoordinates).exists();
    }



    /**
     * 根据索引名称,删除索引
     * @param index 索引类(索引名称 对应实体中的indexName)
     */
    public void indexDelete(String index){
        elasticsearchRestTemplate.indexOps(IndexCoordinates.of(index)).delete();
    }


    /**
     * 索引添加别名
     * @param indexName 索引名
     * @param aliasName 别名
     */
    public boolean indexAddAlias(String indexName,String aliasName){
        if(StringUtils.isBlank(indexName) || StringUtils.isBlank(aliasName)){
            return false;
        }
        // 索引封装类
        IndexCoordinates indexCoordinates = IndexCoordinates.of(indexName);
        // 判断索引是否存在
        if(elasticsearchRestTemplate.indexOps(indexCoordinates).exists()){
            // 索引别名
            AliasQuery query = new AliasQuery(aliasName);
            // 添加索引别名
            boolean bool = elasticsearchRestTemplate.indexOps(indexCoordinates).addAlias(query);
            return bool;
        }
        return false;
    }

    /**
     * 索引别名删除
     * @param indexName 索引名
     * @param aliasName 别名
     */
    public boolean indexRemoveAlias(String indexName,String aliasName){
        if(StringUtils.isBlank(indexName) || StringUtils.isBlank(aliasName)){
            return false;
        }
        // 索引封装类
        IndexCoordinates indexCoordinates = IndexCoordinates.of(indexName);
        // 判断索引是否存在
        if(elasticsearchRestTemplate.indexOps(indexCoordinates).exists()){
            // 索引别名
            AliasQuery query = new AliasQuery(aliasName);
            // 删除索引别名
            boolean bool = elasticsearchRestTemplate.indexOps(indexCoordinates).removeAlias(query);
            return bool;
        }
        return false;
    }

    /**
     * 索引新增数据
     * @param t 索引类
     * @param <T> 索引类
     */
    public <T> void save(T t){
        // 根据索引实体名新增数据
        elasticsearchRestTemplate.save(t);
    }

    /**
     * 批量插入数据
     * @param queries 数据
     * @param index 索引名称
     */
    public void bulkIndex(List<IndexQuery> queries, String index){
        // 索引封装类
        IndexCoordinates indexCoordinates = IndexCoordinates.of(index);
        // 批量新增数据,此处数据,不要超过100m,100m是es批量新增的筏值,修改可能会影响性能
        elasticsearchRestTemplate.bulkIndex(queries,indexCoordinates);
    }

    /**
     * 根据条件删除对应索引名称的数据
     * @param c 索引类对象
     * @param filedName 索引中字段
     * @param val 删除条件
     * @param index 索引名
     */
    public void delete(Class c,String filedName,Object val,String index){
        // 匹配文件查询
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery(filedName, val);
        NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(termQueryBuilder);
        // 删除索引数据
        elasticsearchRestTemplate.delete(nativeSearchQuery,c, IndexCoordinates.of(index));
    }

    /**
     * 根据数据id删除索引
     * @param id 索引id
     * @param index
     */
    public String deleteById(Object id,String index){
        if(null != id && StringUtils.isNotBlank(index)){
            // 根据索引删除索引id数据
          return elasticsearchRestTemplate.delete(id.toString(),IndexCoordinates.of(index));
        }
       return "id或索引为空";
    }

    /**
     * 根据id更新索引数据,不存在则创建索引
     * @param t 索引实体
     * @param id 主键
     * @param index 索引名称
     * @param <T> 索引实体
     */
    public <T> void update(T t,String id,String index){
        // 查询索引中数据是否存在
        Object data = elasticsearchRestTemplate.get(id, t.getClass(), IndexCoordinates.of(index));
        if(data != null){
            // 存在则更新
            UpdateQuery build = UpdateQuery.builder(id).withDocument(Document.parse(JSON.toJSONString(t))).build();
            elasticsearchRestTemplate.update(build,IndexCoordinates.of(index));
        }else {
            // 不存在则创建
            elasticsearchRestTemplate.save(t);
        }
    }

    /**
     * 查询数据根据实际情况自行修改
     * @param c
     * @param search
     * @param index
     * @param <T>
     * @return
     */
    public <T> List<T> getList(Class<T> c,String search,String index){
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", search);
        NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(termQueryBuilder);
        nativeSearchQuery.addSort(Sort.by(Sort.Direction.DESC,"_score"));
        nativeSearchQuery.setTrackTotalHits(true);
        SearchHits<T> tax_knowledge_matter = elasticsearchRestTemplate.search(nativeSearchQuery, c, IndexCoordinates.of(index));
        List<SearchHit<T>> searchHits = tax_knowledge_matter.getSearchHits();
        List<T> returnResult = new ArrayList<>();
        searchHits.forEach(item -> {
            T content = item.getContent();
            returnResult.add(content);
        });
        return returnResult;
    }

    /**
     * 根据多个参数查询
     * @param c
     * @param page 页数
     * @param size 数量
     * @param map 参数和参数值
     * @param index(索引)
     * @param <T>
     * @return
     */
    public <T> List<T> getList(Class<T> c, int page, int size, Map<String,String> map, String index){
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        for (Map.Entry<String,String> entry : map.entrySet()) {
            //match 分词匹配检索
            //wildcard 通配符检索
            //fuzzy 模糊/纠错检索
            String queryColumn =  entry.getKey();
            String queryColumnValue = entry.getValue();
            queryBuilder.must(QueryBuilders.matchQuery(queryColumn, queryColumnValue));
        }
            NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(queryBuilder);
            nativeSearchQuery.setPageable(PageRequest.of(page,size));
            nativeSearchQuery.setTrackTotalHits(true);
            SearchHits<T> tax_knowledge_matter = elasticsearchRestTemplate.search(nativeSearchQuery, c, IndexCoordinates.of(index));
            List<SearchHit<T>> searchHits = tax_knowledge_matter.getSearchHits();
            List<T> returnResult = new ArrayList<>();
            searchHits.forEach(item -> {
                T content = item.getContent();
                returnResult.add(content);
            });
            return returnResult;

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值