`
zysnba
  • 浏览: 179718 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

elasticsearch7.6.2集成springboot2.2.6----demo

 
阅读更多
package com.zys.es.demo762.serviceImpl;

import com.alibaba.fastjson.JSON;
import com.zys.es.demo762.entity.Content;
import com.zys.es.demo762.service.EsService;
import com.zys.es.demo762.utils.JsoupUtil;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.fetch.subphase.highlight.Highlighter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

@Service
public class EsServiceImpl implements EsService {
    @Autowired
    RestHighLevelClient restHighLevelClient;

    /**
     * 批量写入es
     */
    public Boolean parseContent(String keyword) throws Exception {
        //获取京东数据
        List<Content> contents = JsoupUtil.getContent(keyword);
        //获取到的数据写入到es中
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("2s");
        for (int i=0;i<contents.size();i++) {
            bulkRequest.add(new IndexRequest("jd_index").source(JSON.toJSONString(contents.get(i)),XContentType.JSON));

        }
        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);

        return  !bulk.hasFailures();
    }

    /**
     * es分页搜索
     */
    public List<Map<String ,Object>> search(String keyword, int from,int size) throws IOException {
        //搜索
        SearchRequest searchRequest = new SearchRequest("jd_index");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        //分页信息
        searchSourceBuilder.from(from);
        searchSourceBuilder.size(size);
        //精准匹配

//        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", keyword);
        //模糊匹配
        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title", keyword);
        searchSourceBuilder.query(matchQueryBuilder);
        //设置过期时间
        searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        //查询搜索
        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        //解析封装结果
        List<Map<String ,Object>> list = new ArrayList<>();
        for (SearchHit hit : searchResponse.getHits().getHits()) {
            list.add(hit.getSourceAsMap());
            System.out.println(hit.getSourceAsMap().get("title")+"--------------");
        }
        return  list;
    }


    /**
     * es分页高亮搜索
     */
    public List<Map<String ,Object>> searchHighlight(String keyword, int from,int size) throws IOException {
        //搜索
        SearchRequest searchRequest = new SearchRequest("jd_index");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //分页信息
        searchSourceBuilder.from(from);
        searchSourceBuilder.size(size);
        //精准匹配
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", keyword);
        //模糊匹配
//        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title", keyword);
        searchSourceBuilder.query(termQueryBuilder);
        //设置过期时间
        searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        //高亮
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.field("title");
        //多个高亮显示
        highlightBuilder.requireFieldMatch(false);
        highlightBuilder.preTags("<span style='color:red'>");
        highlightBuilder.postTags("</span>");
        searchSourceBuilder.highlighter(highlightBuilder);
        //查询搜索
        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        //解析封装结果
        List<Map<String ,Object>> list = new ArrayList<>();
        for (SearchHit hit : searchResponse.getHits().getHits()) {
            //原来的值
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            //解析高亮的字段
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            HighlightField title = highlightFields.get("title");
            if(title!=null){
                Text[] fragments = title.fragments();
                String newTitle="";
                for (Text text:fragments){
                    newTitle+=text;
                }
                sourceAsMap.put("title",newTitle);
            }
            list.add(hit.getSourceAsMap());
        }
        return  list;
    }
}
分享到:
评论

相关推荐

    elasticsearch-analysis-dynamic-synonym-7.6.2

    `elasticsearch-analysis-dynamic-synonym-7.6.2`是一个专为ES7.6.2版本设计的动态同义词插件,旨在实现同义词的动态加载和管理,使得同义词库可以随着业务需求的变化而实时更新。 **一、动态同义词插件的作用** 1...

    elasticsearch-7.6.2-linux-x86_64.tar.zip.002

    elasticsearch-7.6.2-linux-x86_64.tar.zip.002elasticsearch-7.6.2-linux-x86_64.tar.zip.002elasticsearch-7.6.2-linux-x86_64.tar.zip.002elasticsearch-7.6.2-linux-x86_64.tar.zip.002

    elasticsearch-7.6.2-windows-x86_64安装包,无需积分下载

    Elasticsearch是一个...总之,Elasticsearch-7.6.2是Java平台上的一个强大搜索和分析引擎,适合在Windows x86_64系统上搭建,提供灵活的部署、易用的API、高效的搜索和强大的聚合分析能力,是大数据时代的重要工具。

    Springboot-的各种demo.rar

    Springboot-elasticsearch 与 Elasticsearch 整合 Springboot-i18n SpringBoot 国际化配置 SpringBoot-multi-source SpringBoot 多数据源配置,全局异常自定义处理 SpringBoot2-mybatisplus SpringBoot 与mybatis-...

    Java开发案例-springboot-04-整合Elasticsearch-源代码+文档.rar

    Java开发案例-springboot-04-整合Elasticsearch-源代码+文档.rar Java开发案例-springboot-04-整合Elasticsearch-源代码+文档.rar Java开发案例-springboot-04-整合Elasticsearch-源代码+文档.rar Java开发案例-...

    最新版 elasticsearch-analysis-ik-7.6.2.zip

    "elasticsearch-analysis-ik-7.6.2.zip" 是针对Elasticsearch 7.6.2版本的一个专门用于中文分词的插件,其目的是优化对中文文本的索引和查询性能。 IK分析器是Elasticsearch社区中非常流行的一个中文分词插件,由...

    elasticsearch-analysis-ik-7.6.2

    IK分词器

    elasticsearch-analysis-ik-7.6.2.zip

    此插件在版本 7.6.2 中提供了对 Elasticsearch 7.6.2 的支持,旨在提供更加精准和灵活的中文分词功能。 IK 分词器的核心特性包括: 1. **智能切分**:IK 分词器能够根据上下文智能地进行词语切分,处理多义词问题...

    elasticsearch-springboot-example-master_springboot_集成_elasticsea

    总的来说,"elasticsearch-springboot-example-master"项目是一个很好的学习资源,它涵盖了从基础到进阶的Elasticsearch-SpringBoot集成知识。通过研究这个项目,开发者不仅可以掌握如何集成这两个技术,还能了解到...

    Java开发案例-springboot-05-整合Easy-Es实现搜索-源代码+文档.rar

    Java开发案例-springboot-05-整合Easy-Es实现搜索-源代码+文档.rarJava开发案例-springboot-05-整合Easy-Es实现搜索-源代码+文档.rarJava开发案例-springboot-05-整合Easy-Es实现搜索-源代码+文档.rarJava开发案例-...

    springboot整合es-springboot-elasticsearch.zip

    本项目"springboot-elasticsearch-master"提供了如何将SpringBoot与Elasticsearch集成的示例。 一、SpringBoot简介 SpringBoot是由Pivotal团队提供的全新框架,其设计目标是简化Spring应用的初始搭建以及开发过程。...

    springboot-0.0.1-SNAPSHOT.jar

    springboot-0.0.1-SNAPSHOT.jar

    springboot和一些主流框架的整合的各个基本demo

    hello word 可能性版本 Springboot-web 网页版本 ...Springboot-elasticsearch 与Elasticsearch整合 Springboot-i18n SpringBoot国际化配置 SpringBoot-多源 SpringBoot多数据源配置,全局异常自定义处理

    elasticsearch-7.6.2-linux-x86_64.tar.zip.001

    elasticsearch-7.6.2-linux-x86_64.tar.zip.001elasticsearch-7.6.2-linux-x86_64.tar.zip.001elasticsearch-7.6.2-linux-x86_64.tar.zip.001elasticsearch-7.6.2-linux-x86_64.tar.zip.001

    elasticsearch-7.6.2-windows-x86_64.zip

    elasticsearch最新版:elasticsearch-7.6.2-windows-x86_64.zip。elastic家族其他产品(含windows、linux版)最新版亦可从我的资源页获取https://download.csdn.net/user/u010887744/uploads,如果没找到你想要的...

    Elasticsearch 7.6.2(已集成ik分词器)

    Elasticsearch 7.6.2 已集成ik分词器 解压后运行bin目录下,elasticsearch.bat文件

    elasticsearch-7.6.2+elasticsearch-head

    **Elasticsearch 7.6.2:分布式搜索引擎与分析引擎** Elasticsearch是一个开源的、分布式的全文搜索引擎,基于Lucene构建,提供实时、可扩展的数据搜索和分析能力。在7.6.2版本中,它包含了诸多优化和新特性,使其...

    springboot操作es demo,springboot-elasticsearch

    springboot操作es demo,springboot-elasticsearch

    filebeat-7.6.2-linux-x86_64.tar.gz

    filebeat最新linux版:filebeat-7.6.2-linux-x86_64.tar.gz。elastic家族其他产品(含windows、linux版)最新版亦可从我的资源页获取https://download.csdn.net/user/u010887744/uploads,

    elasticsearch-7.6.2.rar

    这个压缩包"elasticsearch-7.6.2.rar"包含了该版本的完整安装文件,适用于对Elasticsearch进行快速部署和测试。 在Elasticsearch中,分词器扮演了至关重要的角色,它负责将输入的文本拆分成可索引的基本单元——...

Global site tag (gtag.js) - Google Analytics