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

你可能感兴趣的文章
openssl安装
查看>>
openssl安装
查看>>
OpenSSL生成root CA及签发证书
查看>>
Openstack REST API
查看>>
OpenStack 上部署 Kubernetes 方案对比
查看>>
Openstack 之 网络设置静态IP地址
查看>>
OpenStack 存储服务详解
查看>>
openstack 导出镜像
查看>>
OpenStack 搭建私有云主机实战(附OpenStack实验环境)
查看>>
OpenStack 综合服务详解
查看>>
OpenStack 网络服务Neutron详解
查看>>
Openstack 网络管理企业级实战
查看>>
OpenStack 计算服务Nova详解
查看>>
Openstack(两控制节点+四计算节点)-1
查看>>
openstack--memecache
查看>>
openstack-keystone安装权限报错问题
查看>>
openstack【Kilo】汇总:包括20英文文档、各个组件新增功能及Kilo版部署
查看>>
openstack下service和endpoint
查看>>
Openstack企业级云计算实战第二、三期培训即将开始
查看>>
OpenStack创建虚拟机实例实战
查看>>