6.2 Spring整合Elasticsearch

springMVC整合elasticsearch,基于maven 简单整合,不是spring-data,无api操作示例 立即下载

1. 引入依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

2. 配置Es

# ElasticsearchProperties
spring.data.elasticsearch.cluster-name=nowcoder
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300

解决es和redis的冲突:

@SpringBootApplication
public class CommunityApplication {

    @PostConstruct
    public void init() {
        // 解决netty启动冲突问题
        // see Netty4Utils.setAvailableProcessors()
        System.setProperty("es.set.netty.runtime.available.processors", "false");
    }

    public static void main(String[] args) {
        SpringApplication.run(CommunityApplication.class, args);
    }

}

 

3.Spring Data Es

1)ElasticsearchTemplate

 

 

2)ElasticsearchRespository

在实体类中上配置

@Document(indexName = "discusspost", type = "_doc", shards = 6, replicas = 3)
public class DiscussPost {

    @Id
    private int id;

    @Field(type = FieldType.Integer)
    private int userId;

    // 互联网校招
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String title;

    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String content;

    @Field(type = FieldType.Integer)
    private int type;

    @Field(type = FieldType.Integer)
    private int status;

    @Field(type = FieldType.Date)
    private Date createTime;

    @Field(type = FieldType.Integer)
    private int commentCount;

    @Field(type = FieldType.Double)
    private double score;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public int getCommentCount() {
        return commentCount;
    }

    public void setCommentCount(int commentCount) {
        this.commentCount = commentCount;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "DiscussPost{" +
                "id=" + id +
                ", userId=" + userId +
                ", title='" + title + '\'' +
                ", content='" + content + '\'' +
                ", type=" + type +
                ", status=" + status +
                ", createTime=" + createTime +
                ", commentCount=" + commentCount +
                ", score=" + score +
                '}';
    }
}

创建接口DiscussPostRepository访问帖子:

@Repository
public interface DiscussPostRepository extends ElasticsearchRepository<DiscussPost, Integer> {

}

测试:

@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class ElasticsearchTests {

    @Autowired
    private DiscussPostMapper discussMapper;

    @Autowired
    private DiscussPostRepository discussRepository;

    @Autowired
    private ElasticsearchTemplate elasticTemplate;

    @Test
    public void testInsert() {
        discussRepository.save(discussMapper.selectDiscussPostById(241));
        discussRepository.save(discussMapper.selectDiscussPostById(242));
        discussRepository.save(discussMapper.selectDiscussPostById(243));
    }

    @Test
    public void testInsertList() {
        discussRepository.saveAll(discussMapper.selectDiscussPosts(101, 0, 100));
        discussRepository.saveAll(discussMapper.selectDiscussPosts(102, 0, 100));
        discussRepository.saveAll(discussMapper.selectDiscussPosts(103, 0, 100));
        discussRepository.saveAll(discussMapper.selectDiscussPosts(111, 0, 100));
        discussRepository.saveAll(discussMapper.selectDiscussPosts(112, 0, 100));
        discussRepository.saveAll(discussMapper.selectDiscussPosts(131, 0, 100));
        discussRepository.saveAll(discussMapper.selectDiscussPosts(132, 0, 100));
        discussRepository.saveAll(discussMapper.selectDiscussPosts(133, 0, 100));
        discussRepository.saveAll(discussMapper.selectDiscussPosts(134, 0, 100));
    }

    @Test
    public void testUpdate() {
        DiscussPost post = discussMapper.selectDiscussPostById(231);
        post.setContent("我是新人,使劲灌水.");
        discussRepository.save(post);
    }

    @Test
    public void testDelete() {
        // discussRepository.deleteById(231);
        discussRepository.deleteAll();
    }

    @Test
    public void testSearchByRepository() {
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.multiMatchQuery("互联网寒冬", "title", "content"))
                .withSort(SortBuilders.fieldSort("type").order(SortOrder.DESC))
                .withSort(SortBuilders.fieldSort("score").order(SortOrder.DESC))
                .withSort(SortBuilders.fieldSort("createTime").order(SortOrder.DESC))
                .withPageable(PageRequest.of(0, 10))
                .withHighlightFields(
                        new HighlightBuilder.Field("title").preTags("<em>").postTags("</em>"),
                        new HighlightBuilder.Field("content").preTags("<em>").postTags("</em>")
                ).build();

        // elasticTemplate.queryForPage(searchQuery, class, SearchResultMapper)
        // 底层获取得到了高亮显示的值, 但是没有返回.

        Page<DiscussPost> page = discussRepository.search(searchQuery);
        System.out.println(page.getTotalElements());
        System.out.println(page.getTotalPages());
        System.out.println(page.getNumber());
        System.out.println(page.getSize());
        for (DiscussPost post : page) {
            System.out.println(post);
        }
    }

    @Test
    public void testSearchByTemplate() {
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.multiMatchQuery("互联网寒冬", "title", "content"))
                .withSort(SortBuilders.fieldSort("type").order(SortOrder.DESC))
                .withSort(SortBuilders.fieldSort("score").order(SortOrder.DESC))
                .withSort(SortBuilders.fieldSort("createTime").order(SortOrder.DESC))
                .withPageable(PageRequest.of(0, 10))
                .withHighlightFields(
                        new HighlightBuilder.Field("title").preTags("<em>").postTags("</em>"),
                        new HighlightBuilder.Field("content").preTags("<em>").postTags("</em>")
                ).build();

        Page<DiscussPost> page = elasticTemplate.queryForPage(searchQuery, DiscussPost.class, new SearchResultMapper() {
            @Override
            public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> aClass, Pageable pageable) {
                SearchHits hits = response.getHits();
                if (hits.getTotalHits() <= 0) {
                    return null;
                }

                List<DiscussPost> list = new ArrayList<>();
                for (SearchHit hit : hits) {
                    DiscussPost post = new DiscussPost();

                    String id = hit.getSourceAsMap().get("id").toString();
                    post.setId(Integer.valueOf(id));

                    String userId = hit.getSourceAsMap().get("userId").toString();
                    post.setUserId(Integer.valueOf(userId));

                    String title = hit.getSourceAsMap().get("title").toString();
                    post.setTitle(title);

                    String content = hit.getSourceAsMap().get("content").toString();
                    post.setContent(content);

                    String status = hit.getSourceAsMap().get("status").toString();
                    post.setStatus(Integer.valueOf(status));

                    String createTime = hit.getSourceAsMap().get("createTime").toString();
                    post.setCreateTime(new Date(Long.valueOf(createTime)));

                    String commentCount = hit.getSourceAsMap().get("commentCount").toString();
                    post.setCommentCount(Integer.valueOf(commentCount));

                    // 处理高亮显示的结果
                    HighlightField titleField = hit.getHighlightFields().get("title");
                    if (titleField != null) {
                        post.setTitle(titleField.getFragments()[0].toString());
                    }

                    HighlightField contentField = hit.getHighlightFields().get("content");
                    if (contentField != null) {
                        post.setContent(contentField.getFragments()[0].toString());
                    }

                    list.add(post);
                }

                return new AggregatedPageImpl(list, pageable,
                        hits.getTotalHits(), response.getAggregations(), response.getScrollId(), hits.getMaxScore());
            }
        });

        System.out.println(page.getTotalElements());
        System.out.println(page.getTotalPages());
        System.out.println(page.getNumber());
        System.out.println(page.getSize());
        for (DiscussPost post : page) {
            System.out.println(post);
        }
    }

}

 

运放+三极管恒流源电路设计实战:从原理到仿真一步到位(附Multisim文件) 本文详细解析了运放与三极管构建恒流源电路的核心原理,重点阐述了负反馈机制如何实现精准的电流控制。通过Multisim仿真实战,从电路搭建、参数计算到负载调整率与动态响应分析,一步步指导设计过程,并提供常见故障的调试技巧与PCB设计要点,帮助工程师从理论平稳过渡到可靠实践。 阅读详情

相关推荐

MTK手机传感器驱动开发避坑指南:从SCP代码大小限制到Overlay加载流程详解

本文详细解析了MTK平台传感器驱动开发中的常见问题,包括SCP代码大小限制、Overlay加载流程及客制化传感器集成。通过实战案例和优化策略,帮助开发者高效解决MTK传感器驱动开发中的技术难题,提升开发效率。

weixin_42522374的博客 400

Spring整合Elasticsearch

Spring整合Elasticsearch对索引库的新增和简单查询

有趣的灵魂万里挑一,好看的皮囊你又没有 2867

Creo二次开发环境配置与DLL项目实战指南(Creo8.0+VS2019)

本文详细介绍了Creo8.0与VS2019环境下的二次开发配置与DLL项目实战指南,涵盖环境准备、版本匹配、DLL项目创建、核心代码编写、部署调试及常见报错处理。重点解析了Creo二次开发中的关键配置和优化技巧,帮助开发者高效解决实际问题。

weixin_28432777的博客 516

SpringBoot整合Elasticsearch(最新最全,高效安装到使用)

在node安装路径下,使用命令安装:npm install -g grunt-cli 安装grunt。为了避免使用的Elasticsearch版本和SpringBoot采用的版本不一致导致的问题,尽量使用一致的版本。安装过程结束后,在dos窗口查看是否安装成功,使用命令:node -v,出现如下截图,则说明安装成功。es5以上就需要安装node和grunt,所以安装head插件的前提,是需要把该两项配置好。-version查看是否安装成功,出现如下截图,说明安装成功。下载对应环境的node版本安装即可。

whatevery的博客 3万+

OpenAI,从推出更强大的Sora 2模型展开探索与未来发展前景+部署方法大全+文末邀请码*12

摘要 OpenAI推出的Sora 2是第二代AI视频生成模型,在多模态内容生成领域实现重大突破。文末足足有12个邀请码,速来速享!!!

aqfcca的博客 2247

BMW Standard Tools 宝马FSC工具套装下载

这是一款非常专业的一套宝马编码工具,懂行的人自然知道他的用处,不懂行的人,我解释再多也不会明白的,需要的拿去吧。软件名:BMW Standard Tools包含工具:BMW Coding Tool v2.50、change Language、CIC Mafia、Dr.Gini B021、EasyConnect、EDIABAS Konfigurator v1.1、EDIABAS Konfigurator v2.0.0、FSC-Tools_2.18、FSTool_v2_CarServer、INPA、ITool

Zj_arrow的博客 6992

SpringBoot:SpringBoot整合Elasticsearch案例

声明:原作者:微信公众号:悟空聊架构 文章目录声明:原作者:微信公众号:悟空聊架构前言一、Elasticsearch 组件库介绍二、整合检索服务1.1 添加搜索服务模块1.2 配置 Maven 依赖1.3 注册搜索服务到注册中心1.4 添加 ES 配置类1.5 测试 ES Client 自动加载1.6 测试 ES 简单插入数据1.7 测试 ES 查询复杂语句1.7.1 构造检索条件17.2 获取命中记录的详情1.7.3 获取年龄分布聚合信息1.7.4 获取平均薪资聚合信息三、实战:同步 ES 数据3.1 定

欢迎来到 ABin-阿斌的博客:写一生代码,创一世佳话,筑一览芳华。 2万+

工业产线瑕疵检测:基于 YOLO 的自动化质检系统实战

从工业瑕疵数据集构建到模型训练,从桌面检测界面到产线适用性优化,本文覆盖了一套工业质检系统的完整路线。这个场景的核心评价指标不是最高精度,而是在保证 recall ≥ 0.95 的前提下尽可能压低 false positive——因为漏检的直接成本(客户投诉、质量事故)远高于误报的成本(人工复检)。部署时先设一个偏低的置信度阈值确保覆盖,再通过持续收集人工复检数据来逐步调优。

m0_71589036的博客 63

springboot整合elasticsearch

spring boot整合elasticsearch详细教程讲解,本文重点讲怎么利用官方文档来写出自己的方法,不用看复杂的文章,只需要搞清楚流程套路,再复杂的方法都能实现,不明白流程套路,怎么写都不顺畅。

zwjzone的博客 2万+

Allegro如何使用Cross Copy命令快速复制器件的位号和丝印外形其他层

在Allegro做PCB设计的时候,如果需要复制器件的位号到其它层是无法直接实现的,如果直接拷贝器件的位号的话,效果如下。但是Allegro的Cross Copy命令是支持复制任何属性的图形到其它层的,下面以复制器件位号和丝印外框为例说明。同样如果使用Z-copy命令,也是无法Z-copy text的,Finds下方texts是灰色的。如何使用Cross Copy命令快速复制器件的位号和丝印外形其他层。另外cap处可以选择线段的端点是圆形,八角形,或者方形的铜皮。拷贝C1013,出现的是C*

weixin_54787054的博客 2671

Ego Planner规划算法(下)——Ego Planner程序框架

本系列文章用于学习记录Ego-Planner规划算法的相关内容,本系列文章是在在Fast Planner规划算法系列文章的基础上,展开对Ego Planner的相关介绍,主要包括Ego Planner算法流程和程序框架两部分,主要学习资料是深蓝学院的移动机器人运动规划课程

慕羽★的博客 7256

Spring整合ElasticSearch

ES集群: ES为Java内置了两套客户端(通过9300端口通信) ps:其他语言使用9200端口与ES通信 集群状态 结构化语句: 项目 结构化查询(Query DSL) 结构化过滤(Filter DSL) 目的 询问每个文档目标字段的值与目标值的匹配程度如何 检查是否包含特定值 适用范围 全文本搜索,相关性评分 剩下的所有 性能 因为需要计算相关性,耗时,且不可缓...

码农的在线笔记 1610

Windows配置L2TP/IPsec连接

Windows 系统的 L2TP/IPsec 功能,通过配置即可构建加密 VPN 通道。

m0_61806534的博客 1666

【项目】仿牛客网社区开发 第6章 Elasticsearch 分布式搜索引擎 2 Spring整合Elasticsearch

【项目】仿牛客网社区开发 第6章 Elasticsearch 分布式搜索引擎 2 Spring整合Elasticsearch

代码改变世界 396

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

springboot整合Elasticsearch介绍

上一篇博客介绍了elasticsearch及其安装部署(),这次就介绍了一下如何将ES和我们的springboot项目整合使用。

chengpei147的博客 1039

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

项目1在线交流平台-6.Elasticsearch分布式搜索引擎-2.Spring整合Elasticsearch测试

文章目录一、导入依赖和配置1. 导入依赖2. 配置连接3. 解决启动Netty冲突二、SpringData集成ES测试1. 配置实体类与ES索引字段相对应`@Document(indexName = "discusspost", type = "_doc", shards = 5, replicas = 2)``@Id``@Field(type = FieldType.Integer)``analyzer = "ik_max_word", searchAnalyzer = "ik_smart"`2. dao

xingzhes_的博客 3254

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

springboot整合elasticsearch_SpringBoot2.0整合ElasticSearch5.x

1.前言网上很多整合教程都是基于SpringBoot1.5的,而SpringBoot1.5只支持2.x版本的ElasticSearch,而我想要使用5.x系的ES,折腾半天终于弄好了,这里记录一下2.项目环境JDK 1.8Spring Boot 2.0.0.RELEASEElasticSearch 5.6.8Deepin Linux 15.53.搭建SpringBoot骨架用idea创建新项目,勾...

weixin_39625172的博客 259

6.2spring整合elasticsearch

踩坑:springboot2.2.0版本中 data: elasticsearch:cluster-name: 和cluster-nodes: 被横线划掉 解决:spring-boot-version 换成2.1.5 es的9200和9300端口 9200:使用http请求,所以我们的rest方式的client要使用这个端口进行访问 9300:使用tcp请求,是系统预留给es内部组件之间的通信方式 配置 # ElasticsearchProperties spring.data.elasticsearch.

weixin_44114392的博客 412

Spring boot整合ElasticSearch6.3.2(查询SQL语句关键字与ElasticSearch6.3.2 API对应)

文章目录前言一、spring boot配置文件1、pom文件2、Application.yml中的配置二、查询语句和SQL做对比1、字段函数统计,就是count(字段)2、where语句(1)等于(2)大于等于(3)小于等于(4)大于(5)小于(6)时间范围(7)不等于(8)模糊匹配(9)and(10)or(11)and和or混用(12)in3、group语句4、having语句5、降升排序,多字段排序(1)不分组排序(2)分组后再求和,每个组按求和值排序 前言 ElasticSearch的版本是6.3.

胖墩的IT博客 3018

Springboot2.5.6整合Elasticsearch7.12.1完整示例

Springboot2.5.6整合Elasticsearch7.12.1完整示例

YIYIYI 1125

spring boot 2.0 整合 elasticsearch6.5.3,spring boot 2.0 整合 elasticsearch NoNodeAvailableException...

原文地址:spring boot 2.0 整合 elasticsearch NoNodeAvailableException 原文说的有点问题,下面贴出我的配置: 原码云项目地址:https://gitee.com/11230595/springboot-elasticsearch 我的码云项目地址,在原来基础上进行了修改和优化 elasticsearch.yml cluste...

haoweng4800的博客 450

社区网站项目6.2 Spring整合ElasticSearch

  引入依赖 spring-boot-starter-data-elasticsearch   配置Elasticsearch -cluster-name、cluster-nodes   Spring Data Elasticsearch ElasticsearchTemplate ElasticsearchRepository 其中ElasticsearchRepository是比较方便的接口,底层依赖于ElasticsearchTemplate;当ElasticsearchRepository不适用时,

xiaoshuzi666的博客 380

Spring Boot2.X整合ElasticSearch6.X示例

介绍(官网翻译) 用于Elasticsearch的Spring Data是Spring Data项目的一部分,该项目旨在为新数据存储提供熟悉且一致的基于Spring的编程模型,同时保留特定于存储的功能。 Spring Data Elasticsearch项目提供了与Elasticsearch搜索引擎的集成。Spring Data Elasticsearch的关键功能区域是一个以POJO为中心的模型,该模型用于与Elastichsearch文档进行交互并轻松编写存储库样式的数据访问层。 官方文档:ht.

不会飞的小龙人的博客 957

spring2.x整合elasticsearch6.5.3

1:首页安装elasticsearch6.5.3,下载页面 https://elasticsearch.cn/download/ 2:配置 解压后,打开config/elasticsearch.yml,对其中两项配置进行修改cluster.name集群名称,随便填写,或者使用默认的“my-application”,注意,后面Java链接elasticsearch时,需要该配network....

dulihanjiang666的专栏 744

Elasticsearch-06 Spring Boot 2.0.9整合ElasticSearch5.6.16

文章目录概述官方JAVA API文档工程pom.xml 概述 前面几篇,学习了ES的基本操作,那我们这里集成到代码中吧。 我们这里没有使用Spring 提供的 spring-boot-starter-data-elasticsearch,使用的是ES原生的API 。 官方JAVA API文档 当前7.0 https://www.elastic.co/guide/en/elasticsearch/...

小工匠 2万+

springboot2整合elasticsearch6.x(spring-boot-starter-data-elasticsearch)

springboot2整合elasticsearch6.x(spring-boot-starter-data-elasticsearch)

tommer911 4065
上一篇: 6.1 Elasticsearch入门
下一篇: 6.3 开发社区搜索功能
shell33168
博客等级 码龄9年 33粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值