文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot初级开发--加入ElasticSearch数据源(4)

2023-08-30 16:20

关注

  ES就不用我说了吧,如果是安装的话可以参考我这边blog《Centos7.9安装ElasticSearch6》,安装好ES,接下来我们配置SpringBoot.在配置之前,先看看版本对应表。
在这里插入图片描述
1.修改POM文件的依赖

  <dependency>     <groupId>org.springframework.bootgroupId>     <artifactId>spring-boot-starter-data-elasticsearchartifactId>  dependency>

增加application.properties配置文件属性值

spring.elasticsearch.uris=http://10.10.52.155:9200spring.data.elasticsearch.repositories.enabled=truespring.data.elasticsearch.repositories.cluster-name=elasticsearchspring.data.elasticsearch.repositories.cluster-nodes=10.10.52.155:9300

紧接上一章的工程,我们在model层下增加一个po实体

package com.example.firstweb.model.po;import lombok.Data;import lombok.Getter;import lombok.Setter;import org.springframework.data.annotation.Id;import org.springframework.data.elasticsearch.annotations.Document;import org.springframework.data.elasticsearch.annotations.Field;import org.springframework.data.elasticsearch.annotations.FieldType;@Getter@Setter@Data@Document(indexName = "esinfoindex")public class EsInfoPo {    @Id    private  Long id;    @Field(type = FieldType.Keyword)    private String title;    @Field(type = FieldType.Text,analyzer = "ik_max_word")    private String content;}

Spring Data通过注解来声明字段的映射属性,有下面的三个注解:
@Document 作用在类,标记实体类为文档对象,一般有两个属性
    indexName:对应索引库名称
    type:对应在索引库中的类型
    shards:分片数量,默认5
    replicas:副本数量,默认1
  
@Id 作用在成员变量,标记一个字段作为id主键
  
@Field 作用在成员变量,标记为文档的字段,并指定字段映射属性:
    type:字段类型,是枚举:FieldType,可以是text、long、short、date、integer、object等
    
text:存储数据时候,会自动分词,并生成索引
    
keyword:存储数据时候,不会分词建立索引
    
Numerical:数值类型,分两类
      基本数据类型:long、interger、short、byte、double、float、half_float
      浮点数的高精度类型:scaled_float
      需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
    
Date:日期类型
      elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
    
index:是否索引,布尔类型,默认是true
    
store:是否存储,布尔类型,默认是false
    
analyzer:分词器名称,这里的ik_max_word即使用ik分词器

接下来编些DAO层的代码EsInfoDao

package com.example.firstweb.dao;import com.example.firstweb.model.po.EsInfoPo;import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;import org.springframework.stereotype.Repository;@Repositorypublic interface EsInfoDao extends ElasticsearchRepository<EsInfoPo, Long> {}

在编写完Dao层代码后,开始编写Service代码

package com.example.firstweb.service;import com.example.firstweb.dao.EsInfoDao;import com.example.firstweb.model.po.EsInfoPo;import org.elasticsearch.index.query.MultiMatchQueryBuilder;import org.elasticsearch.index.query.QueryBuilders;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.domain.PageRequest;import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;import org.springframework.data.elasticsearch.core.SearchHits;import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;import org.springframework.data.elasticsearch.core.SearchHit;import org.springframework.stereotype.Service;import java.util.stream.Collectors;@Servicepublic class EsInfoService {    @Autowired    private EsInfoDao esInfoDao;    @Autowired    private ElasticsearchRestTemplate elasticsearchRestTemplate;    public EsInfoPo save(EsInfoPo esInfo){        return  esInfoDao.save(esInfo);    }    public void searchContent(){        MultiMatchQueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery("长城","title","content");        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()                .withQuery(multiMatchQuery)                .withPageable(PageRequest.of(0, 10))//分页                .build();        SearchHits<EsInfoPo> search = elasticsearchRestTemplate.search(searchQuery,EsInfoPo.class);        System.out.println("total hits:"+search.getTotalHits());        System.out.println(search.getSearchHits().stream().map(SearchHit::getContent).collect(Collectors.toList()));    }}

Service代码写完后,直接写测试用例代码,然后运行测试用例。这里有个注意的地方就是在运行之前,要去建立索引,可以用ElasticSearch-Head去建立 一个esinfoindex的索引,并且运行的ES在elasticsearch.yml属性中加上xpack.security.enabled: false属性。

Elasticsearch现在的新版本已经弃用了ElasticsearchTemplate类,Repository里原来的search方法也已经弃用了。现在都是用ElasticsearchRestTemplate类实现。

package com.example.firstweb;import com.example.firstweb.dao.EsInfoDao;import com.example.firstweb.model.po.EsInfoPo;import com.example.firstweb.service.EsInfoService;import org.junit.jupiter.api.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;import org.springframework.test.context.junit4.SpringRunner;@SpringBootTestclass FirstwebApplicationTests {    @Autowired    private EsInfoService esInfoService;    @Test    void contextLoads() {    }    @Test    void testEs(){        EsInfoPo esi= new EsInfoPo();        esi.setId(new Long(1));        esi.setTitle("中国长城");        esi.setContent("姚明夺得男篮世界杯八强");        esInfoService.save(esi);        esInfoService.searchContent();    }}

在Springboot中直接运行FirstwebApplicationTests ,得到如下结果
在这里插入图片描述
并且在ElasticSearch-Head中可以查看到建立的那条索引
在这里插入图片描述
工程源代码可以在这里获得:链接: https://pan.baidu.com/s/1hAvFotdKwXxg80tNVLOz4w 提取码: wz4a

来源地址:https://blog.csdn.net/m0_37239002/article/details/132426848

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯