08 Spring Data ElasticSearch的常用操作

本文详细介绍SpringDataElasticSearch的使用方法,包括增删改查、分页查询及条件查询等核心操作,并通过具体代码示例展示了如何高效地与ElasticSearch进行交互。

08 Spring Data ElasticSearch的常用操作

1 增删改查方法测试

public interface ArticleService {      
    //保存    
    public void save(Article article);    
    //删除    
    public void delete(Article article);    
    //查询全部     
    public Iterable<Article> findAll();     
    //分页查询    
    public Page<Article> findAll(Pageable pageable); 
}
@Service 
public class ArticleServiceImpl implements ArticleService {       @Autowired    
    private ArticleRepository articleRepository;   
    public void save(Article article) { 
        articleRepository.save(article);  
    }      
    public void delete(Article article) { 
        articleRepository.delete(article);  
    }      
    public Iterable<Article> findAll() { 
        Iterable<Article> iter = articleRepository.findAll(); 
        return iter;   
    }       
    public Page<Article> findAll(Pageable pageable) { 
        return articleRepository.findAll(pageable);   
    } 
}
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations="classpath:applicationContext.xml") 
public class SpringDataESTest {      
    @Autowired     
    private ArticleService articleService;                               @Autowired    
    private TransportClient client;      
    @Autowired     private ElasticsearchTemplate elasticsearchTemplate;    
    /**创建索引和映射*/    
    @Test     
    public void createIndex(){ 
        elasticsearchTemplate.createIndex(Article.class); 
        elasticsearchTemplate.putMapping(Article.class);   
    }       
    /**测试保存文档*/     
    @Test    
    public void saveArticle(){ 
        Article article = new Article();   
        article.setId(100);        
        article.setTitle("测试SpringData ElasticSearch"); 
        article.setContent("Spring Data ElasticSearch 基于 spring data API 简化 elasticSearch操 作,将原始操作elasticSearch的客户端API 进行封装 \n" +                 "    Spring Data为Elasticsearch Elasticsearch项目提供集成搜索引擎"); 
        articleService.save(article);     
    }      
    /**测试保存*/    
    @Test    
    public void save(){      
        Article article = new Article();      
        article.setId(1001); 
        article.setTitle("elasticSearch 3.0版本发布"); 
        article.setContent("ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的 全文搜索引擎,基于RESTful web接口"); 
        articleService.save(article);    
    }   
    /**测试更新*/   
    @Test     
    public void update(){       
        Article article = new Article();   
        article.setId(1001); 
        article.setTitle("elasticSearch 3.0版本发布...更新"); 
        article.setContent("ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的 全文搜索引擎,基于RESTful web接口"); 
        articleService.save(article);   
    }      
    /**测试删除*/   
    @Test    
    public void delete(){       
        Article article = new Article();
        article.setId(1001);
         articleService.delete(article); 
    }      
    /**批量插入*/     
    @Test    
    public void save100(){     
        for(int i=1;i<=100;i++){ 
            Article article = new Article(); 
            article.setId(i); 
            article.setTitle(i+"elasticSearch 3.0版本发布..,更新");             article.setContent(i+"ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用 户能力的全文搜索引擎,基于RESTful web接口");             articleService.save(article);    
        }    
    }     
    /**分页查询*/   
    @Test    
    public void findAllPage(){ 
        Pageable pageable = PageRequest.of(1,10); 
        Page<Article> page = articleService.findAll(pageable); 
        for(Article article:page.getContent()){ 
            System.out.println(article);      
        }     
    }
}

2 常用查询命名规则

在这里插入图片描述

3 查询方法测试

1)dao层实现

public interface ArticleRepository extends ElasticsearchRepository<Article, Integer> {     
    //根据标题查询    
    List<Article> findByTitle(String condition);    
    //根据标题查询(含分页) 
    Page<Article> findByTitle(String condition, Pageable pageable); 
}
@Service 
public class ArticleServiceImpl implements ArticleService {   
    @Autowired    
    private ArticleRepository articleRepository;   
    public List<Article> findByTitle(String condition) { 
        return articleRepository.findByTitle(condition); 
    }     public Page<Article> findByTitle(String condition, Pageable pageable) { 
        return articleRepository.findByTitle(condition,pageable); 
    }   
}

3)测试代码

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations="classpath:applicationContext.xml") 
public class SpringDataESTest {     
    @Autowired    
    private ArticleService articleService;  
    @Autowired     
    private TransportClient client;    
    @Autowired 
    private ElasticsearchTemplate elasticsearchTemplate;  
    /**条件查询*/    
    @Test    
    public void findByTitle(){      
        String condition = "版本";         List<Article> articleList = articleService.findByTitle(condition);         
        for(Article article:articleList){ 
            System.out.println(article);  
        }    
    }      
    /**条件分页查询*/   
    @Test    
    public void findByTitlePage(){   
        String condition = "版本"; 
        Pageable pageable = PageRequest.of(2,10);         Page<Article> page = articleService.findByTitle(condition,pageable);         
        for(Article article:page.getContent()){ 
            System.out.println(article);   
        }   
    }   
} 

4 使用Elasticsearch的原生查询对象进行查询。

 @Test    
 public void findByNativeQuery() {        
 //创建一个SearchQuery对象 
 SearchQuery searchQuery = new NativeSearchQueryBuilder()                 
     //设置查询条件,此处可以使用QueryBuilders创建多种查询 
     .withQuery(QueryBuilders.queryStringQuery("备份节点上没有数 据").defaultField("title"))            
     //还可以设置分页信息 
     .withPageable(PageRequest.of(1, 5))          
     //创建SearchQuery对象         
     .build();           
     //使用模板对象执行查询 
     elasticsearchTemplate.queryForList(searchQuery, Article.class)                 .forEach(a‐> System.out.println(a));    
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值