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

}
相关推荐
Mr.stupidCoder6 小时前
Git将本地文件推送到GitHub仓库
git·elasticsearch·github
RocketJ9 小时前
mac电脑.sh文件,用来清除git当前分支
git·elasticsearch·macos
Elastic 中国社区官方博客11 小时前
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
大数据·开发语言·javascript·elasticsearch·搜索引擎·全文检索·apache
猕员桃18 小时前
《Elasticsearch 分布式搜索在聊天记录检索中的深度优化》
分布式·elasticsearch·wpf
追随远方19 小时前
Android OpenSL ES 音频播放完整实现指南
android·elasticsearch·音视频
G皮T1 天前
【Elasticsearch】正排索引、倒排索引(含实战案例)
大数据·elasticsearch·搜索引擎·kibana·倒排索引·搜索·正排索引
G皮T1 天前
【Elasticsearch】Elasticsearch 近实时高速查询原理
大数据·elasticsearch·搜索引擎·全文检索·倒排索引·搜索·nrt
aini_lovee2 天前
python在容器内克隆拉取git私有仓库
git·python·elasticsearch
在未来等你2 天前
SQL进阶之旅 Day 29:NoSQL结合使用策略
redis·sql·mongodb·elasticsearch·postgresql·nosql·hybrid-database
想躺平的咸鱼干2 天前
Elasticsearch 的自动补全以及RestAPI的使用
java·后端·elasticsearch·中间件·intellij-idea