SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)

这篇具有很好参考价值的文章主要介绍了SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

最近在单位搞日志相关的东西,然后部分日志就存储到了elasticsearch索引库,慢慢发觉索引库用着是真香,写这篇文章的目的就是记录一下关于ElasticsearchRestTemplate Api的使用

  • 下载及整合ElasticSearch SpringBoot2.3.x整合ElasticSearch

🐳创建索引并推送映射

/**
 * 创建索引并推送映射
 * @return
 */
@Override
public boolean createIndexAndPushMapping() {

    IndexOperations indexOperations = elasticsearchRestTemplate.indexOps(Item.class);
    //创建索引
    boolean a = indexOperations.create();
    if (a){
        //生成映射
        Document mapping = indexOperations.createMapping();
        //推送映射
        boolean b = indexOperations.putMapping(mapping);
        return b;
    }else {
        return a;
    }
}

SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)

SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)


🍒删除索引

/**
 * 删除索引
 * @param index
 * @return
 */
@Override
public boolean deleteIndex(String index) {
    IndexOperations indexOperations = elasticsearchRestTemplate.indexOps(Item.class);
    boolean delete = indexOperations.delete();
    return delete;
}

SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)
SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)


🐳添加或修改文档

/**
 * 添加或修改文档
 * @param index
 * @return
 */
@Override
public boolean addOrUpdate(Item item,String index) {

    item.setTime(new Date());

    try {
        elasticsearchRestTemplate.save(item, IndexCoordinates.of(index));
        return true;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}

SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)
SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)


🍒根据id删除文档

/**
 * 删除文档
 * @param index
 * @return
 */
@Override
public boolean delete(String id,String index) {

    try {
        elasticsearchRestTemplate.delete(id, IndexCoordinates.of(index));
        return true;
    } catch (Exception e) {
        e.printStackTrace();
    }

    return false;
}

SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)


🌳根据id查询

/**
 * 根据id查询
 *
 * @param id
 * @param index
 * @return
 */
@Override
public ItemVO selectAllById(String id, String index) {

    IdsQueryBuilder idsQueryBuilder = QueryBuilders.idsQuery();
    idsQueryBuilder.addIds(id);

    NativeSearchQuery query = new NativeSearchQueryBuilder()
            .withQuery(idsQueryBuilder)
            .build();

    SearchHit<ItemVO> itemSearchHit = elasticsearchRestTemplate.searchOne(query, ItemVO.class, IndexCoordinates.of(index));
    ItemVO content = itemSearchHit.getContent();
    return content;
}

SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)


🐸高亮查询

/**
 * 高亮查询
 * @param keyword
 * @param index
 * @return
 */
@Override
public List<ItemVO> searchHighlight(String keyword, String index) {
    ArrayList<ItemVO> itemVOS = new ArrayList<>();

    MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("requestBody", keyword);

    //高亮
    HighlightBuilder highlightBuilder = new HighlightBuilder();
    highlightBuilder.field("requestBody");
    highlightBuilder.requireFieldMatch(false);//多个高亮关闭
    highlightBuilder.preTags("<span style='color:red'>");
    highlightBuilder.postTags("</span>");


    NativeSearchQuery query = new NativeSearchQueryBuilder()
            .withQuery(matchQueryBuilder)
            .build();
    query.setHighlightQuery(new HighlightQuery(highlightBuilder));

    SearchHits<ItemVO> search = elasticsearchRestTemplate.search(query, ItemVO.class, IndexCoordinates.of(index));
    
    for (SearchHit<ItemVO> searchHit : search) {
        ItemVO content = searchHit.getContent();
        //将高亮的字段取出来
        List<String> requestBody = searchHit.getHighlightField("requestBody");
        String highText = "";
        for (String s : requestBody) {
            highText = highText += s;
        }
        //重新对字段赋值
        content.setRequestBody(highText);
        itemVOS.add(content);
    }
    return itemVOS;
}

SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)


🍈分页查询

/**
 * 分页查询
 * @param page
 * @param size
 * @param index
 * @return
 */
@Override
public List<ItemVO> selectByPage(int page, int size,String index) {

    List<ItemVO> itemVOS = new ArrayList<>();

    try {
        NativeSearchQuery query = new NativeSearchQueryBuilder().withPageable(PageRequest.of(page - 1, size))
                .build();

        SearchHits<ItemVO> search = elasticsearchRestTemplate.search(query, ItemVO.class, IndexCoordinates.of(index));

        search.forEach((hits)->itemVOS.add(hits.getContent()));
    } catch (Exception e) {
        e.printStackTrace();
    }

    return itemVOS;
}

SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)


🌴数据排序

/**
 * 排序查询
 * @param index
 * @return
 */
@Override
public List<ItemVO> selectByTimeDesc(String index) {
    List<ItemVO> itemVOS = new ArrayList<>();

    try {
        NativeSearchQuery query = new NativeSearchQueryBuilder().withSort(SortBuilders.fieldSort("time").order(SortOrder.DESC))
                .build();

        SearchHits<ItemVO> search = elasticsearchRestTemplate.search(query, ItemVO.class, IndexCoordinates.of(index));

        search.forEach((hits)->itemVOS.add(hits.getContent()));
    } catch (Exception e) {
        e.printStackTrace();
    }

    return itemVOS;
}

SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)


🏝️时间区间查询

/**
 * 时间区间查询
 * @param begin
 * @param end
 * @param index
 * @return
 */
@Override
public List<ItemVO> selectByTimeFromTo(String begin, String end, String index) {
    List<ItemVO> itemVOS = new ArrayList<>();

    try {
        NativeSearchQuery query = new NativeSearchQueryBuilder().withSort(SortBuilders.fieldSort("time").order(SortOrder.DESC))
                .withFilter(QueryBuilders.rangeQuery("time").timeZone("+08:00").format("yyyy-MM-dd HH:mm:ss").gt(begin).lt(end))
                .build();

        SearchHits<ItemVO> search = elasticsearchRestTemplate.search(query, ItemVO.class, IndexCoordinates.of(index));

        search.forEach((hits) -> itemVOS.add(hits.getContent()));
    } catch (Exception e) {
        e.printStackTrace();
    }

    return itemVOS;
}

SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)文章来源地址https://www.toymoban.com/news/detail-513531.html

🐴多条件查询示例例

public BaseQueryPageVO<List<LogDataVO>> searchApiLogData(LogDataPageDTO logDataPageDTO) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException {
    ArrayList<LogDataDO> logDataDOS = new ArrayList<>();

    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
    boolQueryBuilder
            .filter(QueryBuilders.rangeQuery("time").timeZone("+08:00").format("yyyy-MM-dd HH:mm:ss").gt(logDataPageDTO.getBegin()).lt(logDataPageDTO.getEnd()))
            .must(QueryBuilders.matchQuery("requestBody", logDataPageDTO.getKeyword()));


    NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
            .withSort(SortBuilders.fieldSort("time").order(SortOrder.DESC))
            .withPageable(PageRequest.of(logDataPageDTO.getCurrent()-1,logDataPageDTO.getSize()))
            .withQuery(boolQueryBuilder)
            .build();

    //高亮
    HighlightBuilder highlightBuilder = new HighlightBuilder();
    highlightBuilder.field("requestBody");
    highlightBuilder.requireFieldMatch(false);//多个高亮关闭
    highlightBuilder.preTags("<span style='color:red'>");
    highlightBuilder.postTags("</span>");
    // 返回实际命中数
    searchQuery.setTrackTotalHits(true);
    searchQuery.setHighlightQuery(new HighlightQuery(highlightBuilder));

    SearchHits<LogDataDO> search = elasticsearchRestTemplate.search(searchQuery, LogDataDO.class, IndexCoordinates.of(logDataPageDTO.getIndexName()));

    List<SearchHit<LogDataDO>> searchHits = search.getSearchHits();
    for (SearchHit<LogDataDO> searchHit : searchHits) {
        LogDataDO content = searchHit.getContent();

        List<String> requestBody = searchHit.getHighlightField("requestBody");
        String highText = "";
        for (String s : requestBody) {
            highText = highText += s;
        }
        content.setResultData(null);
        content.setRequestBody(highText);
        logDataDOS.add(content);
    }

    BaseQueryPageVO baseQueryPageVO = new BaseQueryPageVO();
    baseQueryPageVO.setTotal(search.getTotalHits());
    baseQueryPageVO.setSize(Long.valueOf(logDataPageDTO.getSize()));
    baseQueryPageVO.setCurrent(Long.valueOf(logDataPageDTO.getCurrent()));
    baseQueryPageVO.setTotal(search.getTotalHits());
    baseQueryPageVO.setRecords(CopyUtils.do2DtoList(logDataDOS, LogDataVO.class));

    return baseQueryPageVO;
}


到了这里,关于SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot 整合ElasticSearch实现模糊查询,批量CRUD,排序,分页,高亮

    准备一个空的SpringBoot项目 写入依赖 注意你的SpringBoot和你的es版本,一定要对应,如果不知道的可以查看这篇文章:https://blog.csdn.net/u014641168/article/details/130386872 我的版本是2.2.6,所以用的ES版本是 6.8.12,安装es请看这篇文章:https://blog.csdn.net/u014641168/article/details/130622430 查看

    2024年02月08日
    浏览(53)
  • 记录Springboot使用ElasticsearchRestTemplate的updateByQuery的用法的坑

    由于ElasticsearchRestTemplate对 RestHighLevelClient 进一步的封装,因此对updateByQuery的摸索过程记录 如果使用如下图的方式,会导致script构造的时候出现语法错误 此测试过程历时几个小时 ** 另外还需要注意elasticsearch中该字段的数据类型存储,在进行Query构建时,需要与elasticsearch中

    2024年02月07日
    浏览(42)
  • Elasticsearch 7.X SpringBoot 使用 ElasticsearchRestTemplate 操作 ES

    前面学习了es rest接口对es进行操作的方式,并且还学习了es的分片及扩容,有讲解了几种常见的分词器,喜欢的小伙伴可以看下本专栏的其他文章,本篇主要将 在 SpringBoot 中使用 ElasticsearchRestTemplate 对ES进行操作。 对于SpringBoot对ES的操作早在以前我就写过一篇文章,但那时基

    2023年04月09日
    浏览(43)
  • ElasticsearchRestTemplate导致的查询超时

    接手老代码,发现有一个接口查询一直超时,调查发现是es聚合value_count查询超时(3分钟以上),同时log输入es警告信息。 注:es版本7.17.5 调查之后考虑是es客户端版本低,支持不好,将ElasticsearchRestTemplate更换为 RestHighLevelClient ,并重写查询语句,查询时间优化到100+ms。

    2024年02月11日
    浏览(39)
  • spring boot使用elasticsearch分词,排序,分页,高亮简单示例

    记,写一个简单的es分词demo,es版本6.8.12 如果使用es7有些方法可能会有所改变,请参考7的文档 es安装教程:http://t.csdn.cn/BSh12 怎么简单怎么来 商品名称加了 @Field(type = FieldType.Text, analyzer = “ik_max_word”) 会自动分词 分页处理 3.2.1 分词 当输入衣服鞋子的时候会将分

    2024年02月08日
    浏览(40)
  • 【ES常用查询】基于ElasticsearchRestTemplate及NativeSearchQuery的查询

    包含当前es所有的查询, 需要什么代码直接照搬,改个参数就行! 用的好请务必给我点赞!!!感谢爱你们!!! 为啥写这篇文章呢: 大概是因为目前公司用的api跟以前的不太一样, 以前我们是基于高标准客户端直接做的, 但是目前这边同事是基于ElasticsearchRestTemplate跟

    2024年02月03日
    浏览(42)
  • (十)ElasticSearch高级使用【别名,重建索引,refresh操作,高亮查询,查询建议】

    在开发中,随着业务需求的迭代,较⽼的业务逻辑就要⾯临更新甚⾄是重构,⽽对于es来说,为了 适应新的业务逻辑,可能就要对原有的索引做⼀些修改,⽐如对某些字段做调整,甚⾄是重建索 引。⽽做这些操作的时候,可能会对业务造成影响,甚⾄是停机调整等问题。由此

    2024年02月02日
    浏览(73)
  • 【el-tree查询并高亮】vue使用el-tree组件,搜索展开并选中对应节点,高亮搜索的关键字,过滤后高亮关键字,两种方法

    效果图这样的,会把所有的有这些的节点都展开 代码: 这里的逻辑就是通过递归循环把所有和匹配的节点筛选出来 然后通过setCheckedKeys方法把他展开选中 然后通过filterReal把高亮标蓝 这个是用的官方文档的那个过滤方式,可以参考官方文档看一下。 只不

    2024年02月15日
    浏览(74)
  • es查询语法笔记之常使用的增删改查~

    最近测的项目数据流是先缓存到MQ,可通过es查询,以下是es查询语法做的笔记。 首先es中的search主要分为URI Search和 body Search URI Search 查询条件跟在_search?后面, 例如: GET 索引名称/_search?1=1 GET 索引名称 就像是select * from emp 注意这个索引名称可以是一个,也可以是多个 如 /

    2024年02月09日
    浏览(80)
  • python:使用Flask-SQLAlchemy对数据库增删改查的简单示例

    以下将介绍Flask-SQLAlchemy对数据库增删改查的简单示例。 一、安装所需的库 pip install flask flask-sqlalchemy flask-mysql 二、创建数据表 本示例使用mysql创建数据库和表 CREATE TABLE `user` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `name` varchar(255) DEFAULT NULL,   `age` int(11) DEFAULT NULL,   PRIMARY KEY (`id

    2024年02月07日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包