029 elasticsearch文档管理(ElasticsearchRepository、ElasticsearchRestTemplate)

文章目录

文档的管理
ElasticSearchRepository接口
使用方法:
创建一个接口,继承于ElasticSearchRepository,指定使用的Entity类及对应主键数据类型
Springboot自动扫描接口并创建代理对象

  1. 新增、更新数据
    使用repository的save方法实现
  2. 删除数据
    deleteById
    deleteAll
  3. 查询数据
    可以使用repository自带的查询方法
    findById
    findAll
    可以自定义查询方法
    findBy{Title}And{content}(String title, String content);
    按照命名规则定义方法,就可以实现相应的查询

BlogRepository.java

java 复制代码
package com.xd.cubemall.search.repository;

import com.xd.cubemall.search.model.Blog;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

import java.util.List;

public interface BlogRepository extends ElasticsearchRepository<Blog, Long> {
    List<Blog> findByTitle(String title);
    List<Blog> findByTitleAndContent(String title, String content);
}

BlogRepositoryTest.java

java 复制代码
package com.xd.cubemall.sdes;


import com.xd.cubemall.search.CubemallSearchApplication;
import com.xd.cubemall.search.model.Blog;
import com.xd.cubemall.search.repository.BlogRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.PageRequest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;
import java.util.Optional;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = CubemallSearchApplication.class)
public class BlogRepositoryTest {
    @Autowired
    private BlogRepository blogRepository;

    @Test
    public void addDocument() {
        Blog blog = new Blog();
        for (int i = 0; i < 50; i++) {
            blog.setId((long) (i+1));
            blog.setTitle("测试文档"+(i+1));
            blog.setContent("测试文档的内容"+(i+1));
            blog.setComment("注释内容");
            blog.setMobile("111111");
            blogRepository.save(blog);
            
        }

    }

    @Test
    public void updateDocument() {
        Optional<Blog> optional = blogRepository.findById(1l);
        if (optional.isPresent()) {
            Blog blog = optional.get();
            blog.setTitle("hello world");
            blogRepository.save(blog);
        }
    }

    @Test
    public void deleteDocument() {
        blogRepository.deleteById(1l);
    }

    @Test
    public void getById() {
//        Optional<Blog> optional = blogRepository.findById(1l);
//        Blog blog = optional.get();
//        System.out.println(blog);
        Iterable<Blog> all = blogRepository.findAll(PageRequest.of(1,10));
        all.forEach(b-> System.out.println(b));


    }
    @Test
    public void testFindByTitle() {
        List<Blog> list = blogRepository.findByTitle("测试");//term
        list.stream().forEach(System.out::println);
    }


    @Test
    public void testFindByTitleAndContent() {
        List<Blog> list = blogRepository.findByTitleAndContent("37", "内容");
        list.forEach(e-> System.out.println(e));
    }

}

BulkTest.java

java 复制代码
package com.xd.cubemall.sdes;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xd.cubemall.search.CubemallSearchApplication;
import com.xd.cubemall.search.model.Blog;
import com.xd.cubemall.search.repository.BlogRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.data.elasticsearch.core.query.IndexQuery;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;
import java.util.stream.Collectors;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = CubemallSearchApplication.class)
public class BulkTest {

    @Autowired
    private ElasticsearchRestTemplate template;

    @Autowired
    private BlogRepository blogRepository;


    @Test
    public void bulkBlog() {
        JSONArray jsonArray = JSON.parseArray("");
        List<IndexQuery> list = jsonArray.stream()
                .map(json -> {
                    IndexQuery query = new IndexQuery();
                    query.setId(((JSONObject) json).getString("id"));
                    query.setSource(((JSONObject) json).toJSONString());
                    return query;
                }).collect(Collectors.toList());
        template.bulkIndex(list, IndexCoordinates.of("blog_1"));
    }






    @Test
    public void saveAllBlog() {
        JSONArray jsonArray = JSON.parseArray("");
        List<Blog> list = jsonArray.stream()
                .map(json -> {
                    JSONObject jsonObject = ((JSONObject) json);
                    Blog blog = jsonObject.toJavaObject(Blog.class);
                    return blog;
                }).collect(Collectors.toList());
        blogRepository.saveAll(list);
    }

}
相关推荐
不仙5207 小时前
VMware Workstation 26.0.0 在 Ubuntu 24.04 (内核 6.17.0) 上的安装与内核模块编译问题
linux·ubuntu·elasticsearch
qziovv8 小时前
Git 回退场景
大数据·git·elasticsearch
ZeroNews内网穿透9 小时前
面向 AI 协作的本地客户端能力:ZeroNews Agent Skills
大数据·人工智能·elasticsearch
Elastic 中国社区官方博客10 小时前
快 12 倍的 Elasticsearch 向量索引:使用 GPU 和 CPU 分层部署 NVIDIA cuVS
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·nvidia
海兰12 小时前
【实用应用】React+TypeScript+Next.js博客项目
开发语言·javascript·elasticsearch
乐观的Terry14 小时前
博客系统全文搜索实战:用 Elasticsearch 告别 MySQL LIKE 查询
mysql·elasticsearch
敖正炀16 小时前
索引写入与数据持久化深度
elasticsearch
Achou.Wang17 小时前
Docker 多阶段构建:优化 Go 应用镜像大小的最佳实践
elasticsearch·docker·golang
comcoo18 小时前
OpenClaw AI 聊天网关配置教程|Gateway 启动与完整使用指南
运维·人工智能·elasticsearch·gateway·openclaw安装包·open claw部署
C-20021 天前
基于 JumpServer 容器化部署 ES 集群
大数据·elasticsearch·搜索引擎