Spring Data ElasticSearch的常用操作——增删改查

1.配置和准备Spring Data ElasticSearch请参考上一篇文章:https://blog.csdn.net/u013168084/article/details/105537539

2.增删改查方法测试

public interface ArticleService {
    //保存
    public void save(Article article);
    //删除
    public void delete(Article article);
    //查询全部
    public Iterable
findAll(); //分页查询 public Page
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
findAll() { Iterable
iter=articleRepository.findAll(); return iter; } public Page
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(){
        Articlearticle=newArticle();
        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(inti=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
page=articleService.findAll(pageable); for(Articlearticle:page.getContent()){ System.out.println(article); } } }

3.常用查询命名规则

关键字 命名规则 解释 示例
and findByField1AndField2 根据Field1和Field2获得数据 findByTitleAndContent
or findByField1OrField2 根据Field1或Field2获得数据 findByTitleOrContent
is findByField 根据Field获得数据 findByTitle
not findByFieldNot 根据Field获得补集数据 findByTitleNot
between findByFieldBetween 获得指定范围的数据 findByPriceBetween
lessThanEqual findByFieldLessThan 获得小于等于指定值的数据 findByPriceLessThan

4.查询方式测试

(1)dao层

public interface ArticleRepository extends ElasticsearchRepository {
    //根据标题查询
    List
findByTitle(String condition); //根据标题查询(含分页) Page
findByTitle(String condition, Pageable pageable); }

(2)service层实现

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

    public List
findByTitle(String condition) { return articleRepository.findByTitle(condition); } public Page
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
articleList=articleService.findByTitle(condition); for(Articlearticle:articleList){ System.out.println(article); } } /**条件分页查询*/ @Test public void findByTitlePage(){ String condition="版本"; Pageable pageable=PageRequest.of(2,10); Page
page=articleService.findByTitle(condition,pageable); for(Article article:page.getContent()){ System.out.println(article); } } }

5.使用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));    
}

 

你可能感兴趣的:(Spring Data ElasticSearch的常用操作——增删改查)