博客
关于我
五分钟带你玩转Elasticsearch(十一)小试牛刀——集成spring boot测试环境
阅读量:549 次
发布时间:2019-03-09

本文共 3132 字,大约阅读时间需要 10 分钟。

Spring Data Elasticsearch(6版本之前)

Spring Data Elasticsearch 是 Spring 提供的一种以 Spring Data 风格操作数据存储的方式,它能够显著减少样板代码的编写量。


常用注解(用于实体上)

@Document

public @interface Document {    String indexName(); // 索引库名,类似 MySQL 中的数据库名称    String type() default ""; // 文档类型,类似 MySQL 中的表名称    short shards() default 5; // 默认分片数    short replicas() default 1; // 默认副本数量}

@Id

public @interface Id {}

@Field

public @interface Field {    FieldType type() default FieldType.Auto; // 文档字段的类型,Auto 表示自动检测类型    boolean index() default true; // 是否建立倒排索引    boolean store() default false; // 是否存储字段值    String analyzer() default ""; // 分词器名称}

FieldType

public enum FieldType {    Text, Integer, Long, Date, Float, Double, Boolean, Object, Auto,    Nested, Ip, Attachment, Keyword;}

整合 Spring Boot

1. pom 文件

org.springframework.boot
spring-boot-starter-data-elasticsearch

2. application.yml

spring:    data:        elasticsearch:            enabled: true            cluster-name: elasticsearch            cluster-nodes: 192.168.49.14:9300

3. 配置文件

@Configurationpublic class ElasticSearchConfig {    @PostConstruct    void init() {        System.setProperty("es.set.netty.runtime.available.processors", "false");    }}

4. 实体类

@Document(indexName = "product", type = "product", shards = 1, replicas = 0)public class Product {    @Id    private Long id;    @Field(type = FieldType.Text, analyzer = "ik_max_word")    private String title;    @Field(type = FieldType.Keyword)    private String category;    @Field(type = FieldType.Double)    private Double price;    @Field(index = false, type = FieldType.Keyword)    private String images;    // setter方法省略...}

继承 ElasticsearchRepository

6. 定义自定义仓库接口

@Servicepublic interface ProductRepository extends ElasticsearchRepository
{ List
findByTitle(String title);}

7. controller

@RestControllerpublic class ProductController {    @Autowired    private ProductRepository productRepository;    @RequestMapping("/importProduct")    public void importProduct() {        List
list = new ArrayList<>(); // 添加产品1到4,具体代码省略... productRepository.saveAll(list); } @RequestMapping("/selectProductAll") public void selectProductAll() { Iterable
list = productRepository.findAll(); // 操作数据... } // 其他操作方法类似...}

自定义查询方法

通过继承 ElasticsearchRepository 接口,可以定义自定义查询方法。例如:

public interface ProductRepository extends ElasticsearchRepository
{ List
findByTitle(String title);}

常见问题解决方案

1. 节省配置错误

@PostConstructvoid init() {    System.setProperty("es.set.netty.runtime.available.processors", "false");}

2. 修改 ProductRepository

public interface ProductRepository extends ElasticsearchRepository
{ List
findByTitle(String title);}

3. controller 调用

@GetMapping("/selectProductByCustom")public List
selectProductByCustom(String title) { List
result = productRepository.findByTitle(title); return result;}

注意事项

  • 确保 Elasticsearch 服务在目标机器上运行,端口 9300 开放。
  • 请注意,Elasticsearch 7.6.0 对应的 Spring Boot 版本为 2.2.5.RELEASE,之前的版本(如 2.1.8)可能不兼容。

转载地址:http://miasz.baihongyu.com/

你可能感兴趣的文章
Mysql-事务阻塞
查看>>
Mysql-存储引擎
查看>>
mysql-开启慢查询&所有操作记录日志
查看>>
MySQL-数据目录
查看>>
MySQL-数据页的结构
查看>>
MySQL-架构篇
查看>>
MySQL-索引的分类(聚簇索引、二级索引、联合索引)
查看>>
Mysql-触发器及创建触发器失败原因
查看>>
MySQL-连接
查看>>
mysql-递归查询(二)
查看>>
MySQL5.1安装
查看>>
mysql5.5和5.6版本间的坑
查看>>
mysql5.5最简安装教程
查看>>
mysql5.6 TIME,DATETIME,TIMESTAMP
查看>>
mysql5.6.21重置数据库的root密码
查看>>
Mysql5.6主从复制-基于binlog
查看>>
MySQL5.6忘记root密码(win平台)
查看>>
MySQL5.6的Linux安装shell脚本之二进制安装(一)
查看>>
MySQL5.6的zip包安装教程
查看>>
mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
查看>>