springboot2.2.6 elasticsearch 6.8.7 多条件查询、高亮显示、分页

摘要:
最近,我做了一个爬虫项目。我需要将数据存储在ES中。在互联网上很难找到信息。大多数文章只是发布了代码,并没有讨论springboot和es之间的版本关系。ES本身更新得非常快,而且有很多漏洞。新版本中放弃了许多方法。最后,冷静下来,最终解决各种问题。

相关版本

最近做了一个爬虫项目,需要把数据存入ES中,在网上找资料的过程中挺辛苦的,大部分文章上来就是贴代码,没有讲springboot和es之间版本关系,而本身ES更新真的是快,坑是真的多(自我学习能力不强,见谅),很多方法在新版本中都被弃用,最后冷静下来,也算是终于解决了各种问题吧。

博客园...

`

    @Autowired
    private ElasticsearchRestTemplate elasticsearchRestTemplate;

    // 高亮、分页、条件查询 从es查询
    public PageInfo resultSearch(int pageNum, int pageSize, String query, String relationSiteNames) {
        log.info(query);
        log.info(relationSiteNames);

        // (a or b) and c 条件查询
        BoolQueryBuilder filterBuilder = QueryBuilders.boolQuery();

        BoolQueryBuilder filterCaseBuilder = QueryBuilders.boolQuery();
        filterCaseBuilder.should(QueryBuilders.matchQuery("title", query));
        filterCaseBuilder.should(QueryBuilders.matchQuery("content", query));

        BoolQueryBuilder filterPhoneBuilder = QueryBuilders.boolQuery();
        if (StrUtil.isNotBlank(relationSiteNames)) {
            // 模糊匹配
            MatchPhraseQueryBuilder relationSiteNames1 = QueryBuilders.matchPhraseQuery("relationSiteNames", relationSiteNames);
            filterPhoneBuilder.must(relationSiteNames1);
        }

        filterBuilder.must(filterCaseBuilder).must(filterPhoneBuilder);
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        boolQueryBuilder.must(filterBuilder);

        // 高亮显示
        HighlightBuilder.Field message = new HighlightBuilder.Field("title").preTags("<span style="color:red">").postTags("</span>");
        // 分页查询
        pageNum = pageNum - 1;
        Pageable of = PageRequest.of(pageNum, pageSize);
        // 构建查询条件
        NativeSearchQuery query2 = new NativeSearchQueryBuilder()
                .withQuery(boolQueryBuilder)
                .withHighlightFields(message)
                .withPageable(of)
                .build();
        // 分页查询
        AggregatedPage<LawRegulationResultEs> lawRegulationResultEs = elasticsearchRestTemplate
                .queryForPage(query2, LawRegulationResultEs.class, new HighlightResultMapper());
        List<LawRegulationResultEs> resultEsList = lawRegulationResultEs.getContent();
        resultEsList.stream().forEach(e -> e.setContent(""));
        PageInfo pageHelper = new PageInfo();
        pageHelper.setList(resultEsList);
        pageHelper.setPages(lawRegulationResultEs.getTotalPages());
        pageHelper.setTotal(lawRegulationResultEs.getTotalElements());
        return pageHelper;
    }
`
public class HighlightResultMapper extends DefaultResultMapper {

@Override
public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) {
    for (SearchHit hit : response.getHits()) {
        Map<String, Object> sourceMap = hit.getSourceAsMap();
        for (Map.Entry<String, HighlightField> entry : hit.getHighlightFields().entrySet()) {
            String key = entry.getKey();
            if (sourceMap.containsKey(key)) {
                Text[] fragments = entry.getValue().getFragments();
                sourceMap.put(key, transTextArrayToString(fragments));
            }
        }
        hit.sourceRef(new ByteBufferReference(ByteBuffer.wrap(JSONObject.toJSONString(sourceMap).getBytes())));
    }
    return super.mapResults(response, clazz, pageable);
}

private String transTextArrayToString(Text[] fragments) {
    if (null == fragments) {
        return "";
    }
    StringBuffer buffer = new StringBuffer();
    for (Text fragment : fragments) {
        buffer.append(fragment.string());
    }
    return buffer.toString();
}

免责声明:文章转载自《springboot2.2.6 elasticsearch 6.8.7 多条件查询、高亮显示、分页》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇h264格式的flv和mkv无损转换成mp4的方法id_rsa 与 id_rsa.pub 文件详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

prometheus监控elasticsearch

prometheus监控es,同样采用exporter的方案。 项目地址: elasticsearch_exporter:https://github.com/justwatchcom/elasticsearch_exporter 1、安装部署 现有es三节点的集群,环境大概如下: 主机 组件 192.168.75.11 prometheus...

【推荐】开源项目ElasticAmbari助力 ElasticSearch、Kibana、ambari服务高效运维管理

此文转载自:https://zyc88.blog.csdn.net/article/details/112007608 概述 ElasticAmbari为Ambari的一组自定义服务,为Elastic的产品提供安装和管理的支持。 项目地址: https://github.com/ChengYingOpenSource/ElasticAmbari 开源不易...

通过docker安装elasticsearch和安装ik分词器插件及安装kibana

前提: 已经安装好docker运行环境; 步骤: 1.安装elasticsearch 6.2.2版本,目前最新版是7.2.0,这里之所以选择6.2.2是因为最新的SpringBoot2.1.6默认支持的就是6.2.2的,而7.x是有很大更新的,SpringBoot正常集成的情况下无法和es最新版本兼容; 这里只需要记住Document的一个index只能创...

从零搭建 ES 搜索服务(二)基础搜索

一、前言 上篇介绍了 ES 的基本概念及环境搭建,本篇将结合实际需求介绍整个实现过程及核心代码。 二、安装 ES ik 分析器插件 2.1 ik 分析器简介 GitHub 地址:https://github.com/medcl/elasticsearch-analysis-ik 提供两种分词模式:「 ik_max_word 」及「 ik_smart 」...

ElasticSearch(三):ES单机版本基本操作之删除,修改,插入

1. 创建索引 1.1 直接创建索引 可以直接使用head插件创建索引,指定分片数和备份数即可。如下图: 1.2 创建结构化索引 上图创建的索引,点开索引信息,mapping是空的,表示该索引的字段并没有指定,我们可以在创建索引的时候直接指定其字段名来创建。 使用POSTMAN进行创建(任何工具都行,习惯) 请求路径:localhost:9200/bo...

在Windows系统下搭建ELK日志分析平台

再记录一下elk的搭建,个人觉得挺麻烦的,建议还是在linux系统下搭建,性能会好一些,但我是在windows下搭建的,还是记录一下吧,像我这种记性差的人还是得靠烂笔头 简介: ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成:     Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零...