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

你可能感兴趣的文章
pip throws TypeError: parse() got an unexpected keyword argument ‘transport_encoding‘ 在尝试安装新软件包时
查看>>
pip 下载慢
查看>>
pip 升级报错AttributeError: ‘NoneType’ object has no attribute ‘bytes’
查看>>
pip 安装opencv-python卡死
查看>>
pip 安装出现异常
查看>>
Pip 安装失败:需要 SSL
查看>>
Pip 安装挂起
查看>>
pip 或 pip3 为 Python 3 安装包?
查看>>
pip 文件损坏导致 pip无法使用 报错 ImportError: cannot import name 'main' from 'pip._int
查看>>
pip 无法从 requirements.txt 安装软件包
查看>>
pip/pip3更换国内源
查看>>
pip3 install PyQt5 --user 失败
查看>>
pip3命令全解析:Python3包管理工具的详细使用指南
查看>>
pip3安装命令重复创建文件‘/tmp/pip-install-xxxxx/package‘失败
查看>>
PIPE 接口信号列表
查看>>
pipeline配置与管理Job企业级实战
查看>>
pipeline项目配置实战
查看>>
Pipenv 与 Conda?
查看>>
QVGA/HVGA/WVGA/FWVGA分辨率屏含义及大小//Android虚拟机分辨率
查看>>
pipreqs : 无法将“pipreqs”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径 正确,然后再试一次。
查看>>