elasticsearch query related

2023-10-26

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();  
            return false;  
        }  
    }  
    /**  
     * 检查健康状态  
     *   
     * @return  
     */  
    public boolean ping() {  
        try {  
            ActionFuture<ClusterHealthResponse> health = esClient.admin()  
                    .cluster().health(new ClusterHealthRequest());  
            ClusterHealthStatus status = health.actionGet().getStatus();  
            if (status.value() == ClusterHealthStatus.RED.value()) {  
                throw new RuntimeException(  
                        "elasticsearch cluster health status is red.");  
            }  
            return true;  
        } catch (Exception e) {  
            logger.error("ping elasticsearch error.", e);  
            return false;  
        }  
    }  
  
    /**  
     * 条件查询  
     *   
     * @param searchfields  
     *            查询字段  
     * @param filedContentMap  
     *            字段和查询内容  
     * @param sortField  
     *            排序 字段  
     * @param order  
     *            排序  
     * @param from  
     * @param size  
     * @return  
     */  
    @Override  
    public BasePage<T> queryPage(Map<String,Object> filedContentMap, final List<String> heightFields, String sortField, SortOrder order, BasePage<T>basePage) {  
          
        Field[] hfields=new Field[0];  
        if(heightFields!=null)  
        {  
            hfields = new Field[heightFields.size()];  
            for (int i = 0; i < heightFields.size(); i++) {  
                hfields[i] = new HighlightBuilder.Field(heightFields.get(i)).preTags("<em style='color:red'>").postTags("</em>").fragmentSize(250);  
            }  
        }  
        NativeSearchQueryBuilder nsb = new NativeSearchQueryBuilder().withHighlightFields(hfields);//高亮字段  
        if (sortField != null && order != null)//排序  
            nsb.withSort(new FieldSortBuilder(sortField).ignoreUnmapped(true).order(order));  
        if (basePage != null)//分页  
            nsb.withPageable(new PageRequest(basePage.getPageNo(), basePage.getPageSize()));  
        BoolQueryBuilder qb=QueryBuilders. boolQuery();  
        for (String key : filedContentMap.keySet()) {//字段查询  
            qb.must(QueryBuilders.matchQuery(key,filedContentMap.get(key)));  
              
        }  
        //userKey=78e48b85e94911e0d285f4eec990d556  
        //fa6e9c5bb24a21807c59e5fd3b609e12  
        nsb.withQuery(qb);  
        SearchQuery searchQuery = nsb.build();//查询建立  
  
        Page<T> page = null;  
        if (heightFields!=null&&heightFields.size() > 0) {//如果设置高亮  
            page = elasticsearchTemplate.queryForPage(searchQuery,  
                    getEntityClass(), new SearchResultMapper() {  
                        @SuppressWarnings("unchecked")  
                        @Override  
                        public <T> Page<T> mapResults(SearchResponse response,Class<T> clazz, Pageable pageable) {  
                            List<T> chunk = new ArrayList<T>();  
                            for (SearchHit searchHit : response.getHits()) {  
                                if (response.getHits().getHits().length <= 0) {  
                                    return null;  
                                }  
  
                                Map<String, Object> entityMap = searchHit.getSource();  
                                for (String highName : heightFields) {  
                                    Text text[]=searchHit.getHighlightFields().get(highName).fragments();  
                                    if(text.length>0)  
                                    {  
                                        String highValue = searchHit.getHighlightFields().get(highName).fragments()[0].toString();  
                                        entityMap.put(highName, highValue);  
                                    }  
                                }  
                                chunk.add((T) PropertyHelper.getFansheObj(  
                                        getEntityClass(), entityMap));  
                            }  
                            if (chunk.size() > 0) {  
                                return new PageImpl<T>((List<T>) chunk);  
                            }  
                            return new PageImpl<T>(new ArrayList<T>());  
                        }  
  
                    });  
        } else//如果不设置高亮  
        {  
            logger.info("#################"+qb.toString());  
            page = elasticsearchTemplate.queryForPage(searchQuery,getEntityClass());  
        }  
          
  
    //  List<T> ts = page.getContent();  
  
        basePage.setTotalRecord(page.getTotalElements());  
        basePage.setResults(page.getContent());  
        return basePage;  
    }  
  
      
    @Override  
    public List<T> queryList(Map<String, Object> filedContentMap,final List<String> heightFields, String sortField, SortOrder order) {  
        Field[] hfields=new Field[0];  
        if(heightFields!=null)  
        {  
            hfields = new Field[heightFields.size()];  
            for (int i = 0; i < heightFields.size(); i++) {  
                //String o="{\"abc\" : \"[abc]\"}";  
                hfields[i] = new HighlightBuilder.Field(heightFields.get(i)).preTags("<em>").postTags("</em>").fragmentSize(250);  
            }  
        }  
        NativeSearchQueryBuilder nsb = new NativeSearchQueryBuilder().withHighlightFields(hfields);//高亮字段  
        if (sortField != null && order != null)//排序  
            nsb.withSort(new FieldSortBuilder(sortField).ignoreUnmapped(true).order(order));  
        BoolQueryBuilder qb=QueryBuilders. boolQuery();  
        for (String key : filedContentMap.keySet()) {//字段查询  
            qb.must(QueryBuilders.matchQuery(key,filedContentMap.get(key)));  
              
        }  
        nsb.withQuery(qb);  
        SearchQuery searchQuery = nsb.build();//查询建立  
        Page<T> page = null;  
        if (heightFields!=null&&heightFields.size() > 0) {//如果设置高亮  
            page = elasticsearchTemplate.queryForPage(searchQuery,  
                    getEntityClass(), new SearchResultMapper() {  
                        @SuppressWarnings("unchecked")  
                        @Override  
                        public <T> Page<T> mapResults(SearchResponse response,Class<T> clazz, Pageable pageable) {  
                            List<T> chunk = new ArrayList<T>();  
                            for (SearchHit searchHit : response.getHits()) {  
                                if (response.getHits().getHits().length <= 0) {  
                                    return null;  
                                }  
  
                                Map<String, Object> entityMap = searchHit.getSource();  
                                for (String highName : heightFields) {  
                                    String highValue = searchHit.getHighlightFields().get(highName).fragments()[0].toString();  
                                    entityMap.put(highName, highValue);  
                                }  
                                chunk.add((T) PropertyHelper.getFansheObj(getEntityClass(), entityMap));  
                            }  
                            if (chunk.size() > 0) {  
                                return new PageImpl<T>((List<T>) chunk);  
                            }  
                            return null;  
                        }  
  
                    });  
        } else//如果不设置高亮  
            page = elasticsearchTemplate.queryForPage(searchQuery,getEntityClass());  
          
        return page.getContent();  
    }  
    /**  
     * 本类查询  
     *   
     * @param id  
     * @return  
     */  
    public T queryById(String id) {  
        StringQuery stringQuery = new StringQuery("id=" + id);  
        T t = elasticsearchTemplate.queryForObject(stringQuery,  
                getEntityClass());  
        return t;  
  
    }  
  
      
      
    public ElasticsearchTemplate getElasticsearchTemplate() {  
        return elasticsearchTemplate;  
    }  
  
  
    public Client getEsClient() {  
        return esClient;  
    }  
  
  
  
    /**  
     * 得到类型  
     *   
     * @return  
     */  
    public abstract Class<T> getEntityClass();  
    /**  
     * 添加各自类的影射  
     */  
    public abstract void putClassMapping();  
      
  
  
      
  
}  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

elasticsearch query related 的相关文章

随机推荐

  • 基本ACL与高级ACL

    ACL Acess Control List 即访问控制列表 这张表中包含了匹配关系 条件和查询语句 表只是一个框架结构 其目的是为了对某种访问进行控制 信息点间通信 内外网络的通信都是企业网络中必不可少的业务需求 但是为了保证内网的安全性
  • [SQL报错] SQL报错:could not execute statement 和 query did not return a unique result: 2; nested excepti

    错误信息 操作失败 could not execute statement SQL n a nested exception is org hibernate exception DataExcepti 原因是数据库字段长度的限制 还有可能
  • API的使用

    通过API向第3方服务商请求服务 返回数据JSON格式处理成PHP数组格式
  • 机器学习小组知识点7:伯努利分布(Bernouli Distribution)

    适用环境 伯努利分布是较为简单的一种分布 应用于两种实验结果 要么成功 要么失败 一定程度上是二元的性质 这里 我们假设成功的概率为 p p 显然失败的概率就变成了1 p1 p 概率公式可以表示为 f x px 1 p 1 x f x p
  • Python 字符串去除空格的方法

    在处理Python代码字符串的时候 我们常会遇到要去除空格的情况 所以就总结了多种方法供大家参考 1 strip 方法 去除字符串开头或者结尾的空格 str Hello world str strip 输出 Hello world 2 ls
  • 在Unity3D中控制动画播放

    用Unity3D也算是好久了 但是每次做项目总还是能学到新的东西 这次做一个TPS的项目就遇到了这样一个问题 如何同时在上下半身播放不同的动画 解决方法其实是很简单 但由于对于动画资源的了解不足导致问题不断 最后是彻彻底底的研究了一遍Uni
  • myeclipse或sts启动时building workspace加载很长时间

    解决方法 Preference gt General gt Starup and Shutdown勾选Refresh workspace on startup完成 这样每次启动项目时重新加载工作空间 等于重新导入了一份项目 就省去了代码的校
  • esp32 作 MCU 端 使用 AT 命令对 esp8266 进行 OTA demo

    AT CUSTOTA total len current packet len offset checksum OK MCU 收到 gt 之后发送 data 当前数据写入到 FLASH 之后 打印 RECV OK 当接收到 total le
  • 解决Python OpenCV 读取IP摄像头(RTSP等)出现error while decoding的问题

    先来看一个简单的读取RTSP的示例程序 import cv2 cap cv2 VideoCapture rtsp admin admin 123 172 0 0 0 ret frame cap read while ret ret fram
  • 测试两个容器是否连通

    进入容器查看ip root f2b5cdfdc5ed private geth ip addr 1 lo
  • 如何打开Fedora 15命令行窗口CLI

    如何打开Fedora 15命令行窗口CLI 在DesktopFolder以外的桌面区域 右击可以看到Konsole 点击该快捷键 即可启动命令行窗口CLI 第一步 右击桌面 第二步 点击Konsole
  • python day03

    一 使用字符串 str helllo len str 用len函数求字符串长度 str upper 把字符串中的小写变成大写 str find 查找子串所在位置 str index 与find类似但找不到子串时会报错 str 2 从字符串中
  • c++ string函数详细返回值及用法!

    通过在网站上的资料搜集 得到了很多关于string类用法的文档 通过对这些资料的整理和加入一些自己的代码 就得出了一份比较完整的关于string类函数有哪些和怎样用的文档了 下面先罗列出string类的函数有哪一些 然后再罗列出函数的原型
  • 学习 Python 之 Pygame 开发魂斗罗(一)

    学习 Python 之 Pygame 开发魂斗罗 一 Pygame 回忆Pygame 1 使用pygame创建窗口 2 设置窗口背景颜色 3 获取窗口中的事件 4 在窗口中展示图片 1 pygame中的直角坐标系 2 展示图片 3 给部分区
  • 在中国,把区块链玩得转的公司有这几家

    时下最火的Fintech 金融科技 非区块链莫属 区块链正在成为国家层面规划的重点领域之一 区块链可以简单理解为一个由所有参与者公共维护的账本 账本信息的公开使得所有参与者可以一起来校验记账的正确性 使得区块链成为所有参与者可以信任的载体
  • ubuntu编译和安装opencv-3.4.13

    1 安装相关软件包 打开ubuntu 安装以下工具 sudo apt install build essential sudo apt install cmake git libgtk2 0 dev pkg config libavcode
  • 芯片验证从零开始系列(一)——芯片验证概论

    芯片验证从零开始系列 一 芯片验证概论 芯片开发流程 动态验证技术 静态验证技术 Emulation和FPGA原型开发 测试平台框架 检查设计 回归测试 声明 未经作者允许 禁止转载 推荐一个IC FPGA新手入门的好网站 快 点 击 进
  • STL源码剖析-Allocator

    一 第一级配置器 顾名思义 Allocator是用来做内存分配的 第一级配置器指的是当需要128bytes以上的内存时直接使用malloc和realloc进行内存分配 代码如下 第一级配置器 2023 04 07 template
  • 解决M1处理器款mac安装PR闪退问题 Premier 2020 Mac(已适配M1芯片,支持最新款M1芯片Mac)可稳定运行

    苹果公司最新发布的基于M1芯片的Mac笔记本电脑应该很多小伙伴都入手了 但是最新的Mac由于采用的是基于ARM架构的核心 对很多基于Intel 英特尔 处理器的老款mac的软件应用兼容不太好 导致很多现有软件安装好后无法运行 或者报错和闪退
  • elasticsearch query related

    public abstract class EsBaseDaoImpl