博客
关于我
五分钟带你玩转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 时间操作(当天,昨天,7天,30天,半年,全年,季度)
查看>>
MySQL 是如何加锁的?
查看>>
MySQL 是怎样运行的 - InnoDB数据页结构
查看>>
mysql 更新子表_mysql 在update中实现子查询的方式
查看>>
MySQL 有什么优点?
查看>>
mysql 权限整理记录
查看>>
mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
查看>>
MYSQL 查看最大连接数和修改最大连接数
查看>>
MySQL 查看有哪些表
查看>>
mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
查看>>
MySql 查询以逗号分隔的字符串的方法(正则)
查看>>
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
查看>>
mysql 查询,正数降序排序,负数升序排序
查看>>
MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
查看>>