029 elasticsearch文档管理(ElasticsearchRepository、ElasticsearchRestTemplate)

发布于:2024-10-18 ⋅ 阅读:(6) ⋅ 点赞:(0)


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

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

BlogRepository.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

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

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

}