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);
    }

}
相关推荐
Elasticsearch8 分钟前
从点击流中提升搜索相关性:使用 Learn To Rank 和 OpenTelemetry 行为信号
elasticsearch
倒流时光三十年1 小时前
第六阶段 57 · ES|QL 与 SQL API(用 SQL 查 ES)
数据库·sql·elasticsearch
guwentian11 小时前
Git Worktree 实战:用并行多 Agent 把开发提速 N 倍
大数据·git·elasticsearch·wroktree
Elastic 中国社区官方博客16 小时前
Elasticsearch:使用 AI Agent 来创建 workflow
大数据·运维·人工智能·elasticsearch·搜索引擎·自动化·全文检索
阿里云大数据AI技术16 小时前
AI Search+ES 9.4.X最佳实践:“更快、更准、更安全的企业级搜索引擎”"为AI Agent提供坚实底座”
人工智能·elasticsearch·agent
Elasticsearch20 小时前
Elastic 社区通讯 — 2026 年 8 月
elasticsearch
lsh曙光20 小时前
ES数据备份与恢复
大数据·elasticsearch·搜索引擎
Shawn Dev1 天前
MySQL Binlog 数据误删除恢复完全指南
数据库·mysql·elasticsearch
Elastic 中国社区官方博客1 天前
用两行 JSON 替换你的 ILM 策略:数据流生命周期新增冻结层支持
大数据·运维·elasticsearch·搜索引擎·架构·全文检索
小张同学a.1 天前
ELK企业级日志分析平台3——ES数据备份 & 集群监控 & ELFK+Kafka 架构部署
linux·运维·elk·elasticsearch·架构·kafka·filebeat