Springboot集成spring data elasticsearch过程详解

作者:滚动的蛋 时间:2023-04-16 00:42:16 

版本对照

Springboot集成spring data elasticsearch过程详解

各版本的文档说明:https://docs.spring.io/spring-data/elasticsearch/docs/

1、在application.yml中添加配置


spring:
data:
 elasticsearch:
  repositories:
   enabled: true
  #多实例集群扩展时需要配置以下两个参数
  #cluster-name: datab-search
  #cluster-nodes: 127.0.0.1:9300,127.0.0.1:9301

2、添加 Maven 依赖


<!---开箱即用,版本默认和springboot版本对应-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
 </dependency>

3、建立实体entity
注解说明:

Spring Data通过注解来声明字段的映射属性,有下面的三个注解:

  • @Document 作用在类,标记实体类为文档对象,一般有两个属性

    • indexName:对应索引库名称

    • type:对应在索引库中的类型

    • shards:分片数量,默认5

    • replicas:副本数量,默认1

  • @Id 作用在成员变量,标记一个字段作为id主键

  • @Field 作用在成员变量,标记为文档的字段,并指定字段映射属性:

    • 基本数据类型:long、interger、short、byte、double、float、half_float

    • 浮点数的高精度类型:scaled_float

    • 需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。

    • type:字段类型,是枚举:FieldType,可以是text、long、short、date、integer、object等

    • text:存储数据时候,会自动分词,并生成索引

    • keyword:存储数据时候,不会分词建立索引

    • Numerical:数值类型,分两类

  • Date:日期类型

  • elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。

  • index:是否索引,布尔类型,默认是true

  • store:是否存储,布尔类型,默认是false

  • analyzer:分词器名称,这里的ik_max_word即使用ik分词器

示例:


@Document(indexName = "cp_doc", type = "doc", shards = 10, replicas = 0)
public class CpDocument extends BaseEntity {

@Id//作用在成员变量,标记一个字段作为id主键
private long id ;
@Field(type = FieldType.Text)
private String name ;
@Field(type = FieldType.Text)
private String address ;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}

4、编写 Repository 访问层


/**
* 基本操作repository-curd
* @author 滚动的蛋
*
*/
public interface CpRepository extends ElasticsearchRepository<CpDocument, Integer> {
}

5、创建索引+查询示例


@RunWith(SpringRunner.class)
@SpringBootTest
public class ElasticSearchTest {
 @Autowired
  CpRepository cpRepository;
 @Autowired
 ElasticsearchTemplate elsTemplate;//ElasticsearchTemplate中提供了创建索引的API<br data-filtered="filtered"><br data-filtered="filtered">
 @Test
 public void addIndexTest() {
   //创建索引
   boolean indexRes = elsTemplate.createIndex(CpDocument.class);
   System.out.println("======创建索引结果:"+indexRes+"=========");
   //添加索引
   CpDocument cpTest = new CpDocument();
   cpTest.setId(1);
   cpTest.setName("阿里巴巴");
   cpTest.setAddress("北京路12号");
   cpRepository.save(cpTest);
 }

@Test
 public void srarchTest() {
   //这个只做一个多字段的匹配查询示例,其它的可以查看API文档使用
   //"name","address" 为匹配的字段
    MultiMatchQueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery("阿里巴巴","address","name");//多字段匹配QueryBuilder
    SearchQuery searchQuery = new NativeSearchQueryBuilder()//构建查询对象
        .withQuery(multiMatchQuery)
        .withIndices("cp_doc")//索引名
        .withPageable(PageRequest.of(0, 10))//分页
        .build();
    Iterable<CpDocument> productDtos = cpRepository.search(searchQuery);
    ArrayList<CpDocument> CpDocuments = Lists.newArrayList(productDtos);
    for (CpDocument cpDocument : CpDocuments) {
     System.out.printf("企业名称:%s,企业地址:%s\n",cpDocument.getName(),cpDocument.getAddress());
   }
 }

来源:https://www.cnblogs.com/irobotzz/p/12588814.html

标签:spring,boot,集成,data,elasticsearch
0
投稿

猜你喜欢

  • C#中Winform窗体Form的关闭按钮变灰色的方法

    2023-06-06 09:11:34
  • Spring Security OAuth2实现使用JWT的示例代码

    2022-11-02 22:46:25
  • Java MultipartFile实现上传文件/上传图片

    2022-04-19 07:07:19
  • C#计算程序执行过程花费时间的方法

    2022-08-07 08:44:53
  • Android仿淘宝商品详情页

    2023-09-08 18:37:26
  • Android开发之保存图片到相册的三种方法详解

    2022-07-26 04:49:10
  • C#实现添加多行文本水印到Word文档

    2023-03-22 07:45:33
  • Android自定义滑动解锁控件使用详解

    2022-08-20 05:36:38
  • Spring jackson原理及基本使用方法详解

    2021-10-03 08:28:18
  • android桌面悬浮窗显示录屏时间控制效果

    2022-04-21 14:54:12
  • 详解如何在Android studio中更新sdk版本和build-tools版本

    2023-11-18 04:36:15
  • C语言关于时间复杂度详解

    2022-08-14 02:33:04
  • SpringCloud可视化链路追踪系统Zipkin部署过程

    2023-11-27 04:34:06
  • 基于rocketmq的有序消费模式和并发消费模式的区别说明

    2021-10-29 08:41:02
  • c#设计模式之单例模式的实现方式

    2021-12-30 19:46:33
  • Java实战之实现一个好用的MybatisPlus代码生成器

    2023-06-18 02:16:10
  • java控制线程运行

    2023-03-05 15:35:30
  • SpringCloud启动失败问题汇总

    2021-07-28 02:45:51
  • lambda表达式解决java后台分组排序过程解析

    2023-11-29 06:03:39
  • Servlet3.0学习总结之基于Servlet3.0的文件上传实例

    2023-09-02 01:51:33
  • asp之家 软件编程 m.aspxhome.com