ElasticSearch(四)SpringDataElasticSearch操作

ElasticSearch(四)SpringDataElasticSearch操作

  • 创建项目添加项目所需的依赖

<!--  使用SpringDataElasticSearch实现操作  -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

  • 创建实体类,该实体类对应于文档

/**
 * @author huidou
 * @date 2022/7/8
 * @deprecated 该实体类与ElasticSearch的索引实现关联
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(indexName = "product",createIndex = true)
public class Product {

    @Id
    @Field(type = FieldType.Integer,store = true,index = true)
    private Integer id;

    @Field(type = FieldType.Text,store = true,index = true)
    private String name;

    @Field(type = FieldType.Text,store = true,index = true)
    private String desc;

}

  • 创建Repository接口,继承ES的Repository接口实现对ES的操作

/**
 * @author huidou
 * @date 2022/7/8
 */
public interface ProductRepository extends ElasticsearchRepository<Product,Integer> {
}

  • 操作之前,先将Repository接口先注入进来

/**
 * 将Repository注入进来
 */
@Autowired
private ProductRepository repository;

  • 添加单个文档

/**
 * 添加单个文档
 */
@Test
public void addOneDocument() {
    Product product = new Product(1, "iphone30", "iphone30是苹果最新手机");
    repository.save(product);
}

  • 批量添加多个文档

/**
 * 添加多个文档
 */
@Test
public void addMultipleDocument() {
    Product product1 = new Product(4, "iphone33", "iphone33是苹果最新手机");
    Product product2 = new Product(5, "iphone34", "iphone34是苹果最新手机");
    Product product3 = new Product(6, "iphone35", "iphone35是苹果最新手机");
    List<Product> list = new ArrayList<>();
    list.add(product1);
    list.add(product2);
    list.add(product3);
    repository.saveAll(list);
}

  • 更新文档内容

/**
 * 更新文档内容
 */
@Test
public void updateDocument() {
    Product product = new Product(4, "iphone33", "iphone33是苹果最新手机是更新之后的值");
    repository.save(product);
}

  • 查询所有文档

/**
 * 查询所有的文档
 */
@Test
public void findAllDocument() {
    Iterable<Product> products = repository.findAll();
    for (Product product : products) {
        System.out.println(product);
    }
}

  • 根据文档ID查询文档信息

/**
 * 根据文档的ID查询文档信息
 */
@Test
public void findDocumentByID() {
    Optional<Product> product = repository.findById(1);
    System.out.println(product);
}

  • 删除文档信息

/**
 * 删除文档信息
 */
@Test
public void deleteDocument() {
    repository.deleteById(4);
}

  • 分页查询文档信息

/**
 * 分页查询文档信息
 */
@Test
public void findDocumentByPage() {
    // 1、创建分页对象
    Pageable pageable = PageRequest.of(1, 2);
    // 2、通过分页对象条件查询文档信息
    Page<Product> page = repository.findAll(pageable);
    // 3、遍历文档结果
    for (Product product : page) {
        System.out.println(product);
    }
    // 4、输出分页的属性信息
    System.out.println(page.getTotalElements());
    System.out.println(page.getTotalPages());
    System.out.println(page.getContent());
    System.out.println(page.getNumber());
}

  • 排序测试

/**
 * 排序测试
 */
@Test
public void SortDocumentByID() {
    Sort sort = Sort.by(Sort.Direction.DESC, "id");
    Iterable<Product> products = repository.findAll(sort);
    for (Product product : products) {
        System.out.println(product);
    }
}

  • 分页加排序

/**
 * 分页加排序
 */
@Test
public void SortAndPage() {
    Sort sort = Sort.by(Sort.Direction.DESC, "id");
    Pageable pageable = PageRequest.of(0, 3, sort);
    Page<Product> products = repository.findAll(pageable);
    for (Product product : products) {
        System.out.println(product);
    }
}

全部评论

相关推荐

Bug压路:老哥看得出来你是想多展示一些项目,但好像一般最多两个就够了😂页数一般一页,多的也就2页;这些项目应该是比较同质化的,和评论区其他大佬一样,我也觉得应该展示一些最拿手的(质量>数量)😁😁😁专业技能部分也可以稍微精简一些
点赞 评论 收藏
分享
面试摇了我吧:啊哈哈面试提前五个小时发,点击不能参加就是放弃
点赞 评论 收藏
分享
如题如果提出了一个薪资,A不成功,会有可能被取消offer吗
爱打瞌睡的柯基:最想去你们公司 但是别家开的高一些,希望能申请高一点 不管结果如何都谢谢你
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务