博客
关于我
五分钟带你玩转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/

你可能感兴趣的文章
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>
Mysql8在Windows上离线安装时忘记root密码
查看>>
MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
查看>>
mysql8的安装与卸载
查看>>