当前位置: 首页 > article >正文

【ElasticSearch】sping框架集成

  各位小伙伴们大家好,欢迎来到这个小扎扎的ElasticSearch专栏,本篇博客由B战尚硅谷的ElasticSearch视频总结而来,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛

🌆 内容速览

  • 1 项目搭建
  • 2 文件修改
  • 3 类创建
  • 4 索引、文档操作
    • 4.1 索引操作
    • 4.2 文档操作

1 项目搭建

创建maven项目
在这里插入图片描述
删除不必要文件
在这里插入图片描述
maven配置
在这里插入图片描述
JDK配置
在这里插入图片描述

2 文件修改

pom文件

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.6.RELEASE</version>
    <relativePath/>
</parent>

<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
</properties>

<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-test</artifactId>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
    </dependency>
</dependencies>

application.properties配置文件

# es 服务地址
elasticsearch.host=ip
# es 服务端口
elasticsearch.port=端口
# 配置日志级别,开启 debug 日志
logging.level.主程序所在包名=debug

3 类创建

domain实体类

🚩 @Document 注解指定索引名称(indexName)、分片数量(shards)、副本分片数量(replicas)
🚩 @Id 注解指定文档id
🚩 @Field 注解指定字段类型(type)、分词器类型(analyzer)、是否被索引(index)
analyzer = “ik_max_word” 表示使用做大粒度的分词器,会将字段拆分成最小的词条
index = false 表示该字段不可以被检索

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Document(indexName = "product", shards = 3, replicas = 1)
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(type = FieldType.Keyword, index = false)
    private String images;
}

config配置类

🚩 @ConfigurationProperties(prefix = “elasticsearch”) 与配置文件中的变量进行绑定,前缀为"elasticsearch"且下面变量名相同的会尽心值的绑定

@ConfigurationProperties(prefix = "elasticsearch")
@Configuration
@Data
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
    private String host ;
    private Integer port ;

    /**
     * 重写父类方法
     * @return
     */
    @Override
    public RestHighLevelClient elasticsearchClient() {
        RestClientBuilder builder = RestClient.builder(new HttpHost(host, port));
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(builder);
        return restHighLevelClient;
    }
}

dao操作类

@Repository
public interface ProductDao extends ElasticsearchRepository<Product,Long> {

}

4 索引、文档操作

4.1 索引操作

🚩 由于之前再实体类使用@Document 注解指定索引名称(indexName)、分片数量(shards)、副本分片数量(replicas);于是当项目启动的时候就会根据配置去创建对应的索引

public class SpringDataESIndexTest {
    @Autowired
    private ElasticsearchRestTemplate elasticsearchRestTemplate;

    @Test
    public void createIndex(){
        //创建索引,系统初始化会自动创建索引
        System.out.println("创建索引");
    }
    @Test
    public void deleteIndex(){
        //删除索引
        boolean flg = elasticsearchRestTemplate.indexOps(Product.class).delete();
        System.out.println("删除索引 = " + flg);
    }
}

4.2 文档操作

新增、修改

/**
 * 新增
 */
@Test
public void save(){
    Product product = new Product();
    product.setId(2L);
    product.setTitle("华为手机");
    product.setCategory("手机");
    product.setPrice(2999.0);
    product.setImages("http://www.atguigu/hw.jpg");
    productDao.save(product);
}

/**
 * 修改、id相同覆盖的方式
 */
@Test
public void update(){
    Product product = new Product();
    product.setId(1L);
    product.setTitle("小米 2 手机");
    product.setCategory("手机");
    product.setPrice(9999.0);
    product.setImages("http://www.atguigu/xm.jpg");
    productDao.save(product);
}

删除

@Test
public void delete(){
    Product product = new Product();
    product.setId(1L);
    productDao.delete(product);
}

批量新增

@Test
public void saveAll(){
    List<Product> productList = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        Product product = new Product();
        product.setId(Long.valueOf(i));
        product.setTitle("["+i+"]小米手机");
        product.setCategory("手机");
        product.setPrice(1999.0+i);
        product.setImages("http://www.atguigu/xm.jpg");
        productList.add(product);
    }
    productDao.saveAll(productList);
}

根据 id 查询

/**
 * 这里为了防止id不存在,捕获一下NoSuchElementException异常
 */
@Test
public void findById(){
    try {
        Product product = productDao.findById(2L).get();
        System.out.println(product);
    } catch (NoSuchElementException e) {
        System.out.println(e.getMessage());
    }
}

查询所有

@Test
public void findAll(){
    Iterable<Product> products = productDao.findAll();
    for (Product product : products) {
        System.out.println(product);
    }
}

分页查询

@Test
public void findByPageable(){

    //设置排序(排序方式,正序还是倒序,排序的 id)
    Sort sort = Sort.by(Sort.Direction.DESC,"id");
    //当前页,第一页从 0 开始,1 表示第二页
    int currentPage=0;
    //每页显示多少条
    int pageSize = 5;
    //设置查询分页
    PageRequest pageRequest = PageRequest.of(currentPage, pageSize,sort);
    
    //分页查询
    Page<Product> productPage = productDao.findAll(pageRequest);
    
    for (Product Product : productPage.getContent()) {
        System.out.println(Product);
    }
}

http://www.kler.cn/a/272570.html

相关文章:

  • 牛客----mysql
  • OpenHarmony 4.1 SDK11 北向应用开发笔记
  • vscode 设置
  • 【Linux】【Vim】vim编辑器的用法
  • 【Linux系统编程】—— 深入理解Linux中的环境变量与程序地址空间
  • 深度学习 Pytorch 张量的线性代数运算
  • Linux下添加新磁盘并扩展根目录空间的实用指南
  • Unity游戏项目接广告
  • 航空公司遭遇Play恶意家族攻击,亚信安全发布《勒索家族和勒索事件监控报告》
  • mudo服务器测试一
  • 关于MySQL数据库的学习3
  • 【深度学习】diffusers 学习过程记录,StableDiffusion扩散原理
  • 海豚调度系列之:认识海豚调度
  • Git一点通
  • lua profile 性能分析工具都有哪些
  • ISIS多区域实验简述
  • Vue工程化基础
  • Debug追踪
  • LeetCode 热题100专题解析:哈希与双指针
  • 【力扣白嫖日记】262.行程和用户
  • 《深入解析 C#》—— C# 2 部分
  • SAP ABAP read table 时关键字TRANSPORTING NO FIELDS的用法
  • 如何用shell脚本构建Android模块
  • 整型溢出问题及解决之道
  • 一直出现问题,发现服务器磁盘空间已满导致,腾出服务器磁盘空间命令
  • 【Linux下qt软件安装打包附带问题: dpkg: error processing package xxxx +解决方式+自我尝试+记录】