ElasticSearch用springData的简化写法

ElasticSearch用springData的简化写法,第1张

ElasticSearch用springData的简化写法

【1】jar包配置


        1.9
        1.9
    
    
        
            org.elasticsearch
            elasticsearch
            5.6.8
        
        
            org.elasticsearch.client
            transport
            5.6.8
        
        
            org.apache.logging.log4j
            log4j-to-slf4j
            2.9.1
        
        
            org.slf4j
            slf4j-api
            1.7.24
        
        
            org.slf4j
            slf4j-simple
            1.7.21
        
        
            log4j
            log4j
            1.2.12
        
        
            junit
            junit
            4.12
        


        
            com.fasterxml.jackson.core
            jackson-core
            2.8.1
        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.8.1
        
        
            com.fasterxml.jackson.core
            jackson-annotations
            2.8.1
        


        
            org.springframework.data
            spring-data-elasticsearch
            3.0.5.RELEASE
            
                
                    org.elasticsearch.plugin
                    transport-netty4-client
                
            
        

        
            org.springframework
            spring-test
            5.0.4.RELEASE
        

    

【2】配置applicationContext文件

        



		
		
		
		
		
		
		
			
			
		
	

 【3】pojo类写法,后面加上get。set

@document(indexName = "springdate_hello",type = "article")
public class Article {
    //配置映射关系mapping。
    @Id
    @Field(type = FieldType.Long,index = true,store = true)//设置域的参数,和es一样
    private long id;
    @Field(type = FieldType.text,index = true,store = true,analyzer = "ik_smart")
    private String title;
    @Field(type = FieldType.text,index = true,store = true,analyzer = "ik_smart")
    private String content;

【4】测试

         这里的 articleRepository就是我们配置XML文件时扫描的那个接口,他会自动被添加到ElasticSearchtemple的bean容器中。所以这个接口可以被调用。

//想让spring的bean在test中初始化需要用到@Runwith和@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringDataElasticSearchTest {
    @Autowired
    private ArticleRepository articleRepository;//这里报错不用管,运行的时候就会配置进来
    @Autowired
    private ElasticsearchTemplate template;//需要用模板类进行crud,创建索引就用template
    @Test
    public void createIndex() throws Exception{
        //创建索引并且配置映射关系
        template.createIndex(Article.class);
        //只有索引库没有映射时配置映射关系
        //template.putMapping(Article.class);
    }
    @Test
    public void adddocument() throws Exception{
        //创建一个article对象
        for (int i = 2; i <=10; i++) {

        Article article=new Article();
        article.setId((long)i);
        article.setTitle("利用springdata进行添加文档操作"+i);
        article.setContent("比javaEs更方便"+i);
        //把文档写入索引库
        articleRepository.save(article);
        }
    }
    @Test
    public void deldocument(){
        articleRepository.deleteById(2l);
    }
    //修改文档,就是adddocument,里面的id不变即可,前提是已经存在这个id
    @Test
    public void searchAll(){

        Iterable all = articleRepository.findAll();
        for (Article article : all) {
            System.out.println(article);
        }
    }
    @Test
    public void findById(){
//        optional是jdk8中新的类,是为了防止空指针异常,
        Optional byId = articleRepository.findById(2l);
        Article article = byId.get();
        System.out.println(byId);
        System.out.println(article);
        //输出的结果一样
    }
    @Test
    public void findByTitle(){
        List list = articleRepository.findByTitle("springdata");
        for (int i = 0; i < list.size(); i++) {
            Article article = list.get(i);
            System.out.println(article);
        }
    }
    @Test
    public void findByTitleOrContent(){
        List list = articleRepository.findByTitleOrContent("spring","方便");
        for (int i = 0; i < list.size(); i++) {
            Article article = list.get(i);
            System.out.println(article);
        }
    }
    @Test
    public void findByTitleOrContentPage(){
        Pageable pageable= PageRequest.of(0,15);//从0页开始,每页15行
        List list = articleRepository.findByTitleOrContent("spring","方便",pageable);
        for (int i = 0; i < list.size(); i++) {
            Article article = list.get(i);
            System.out.println(article);
        }
    }
}

【5】自定义方法

         在ArticleRespository(继承了ElasticSearchRespository的接口)中提供自定义方法

         例如FindByTitle,这些都是需要在这个接口中声明,才可以调用的。

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5655925.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存