栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 云计算 > 云平台

es中ElasticsearchRepository 的原理和使用

云平台 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

es中ElasticsearchRepository 的原理和使用

把数据存储到es中,有两种方式一种是 ElasticsearchRepository 接口,另一种是ElasticsearchTemplate接口,今天我们主要分析ElasticsearchRepository接口。

一、ElasticsearchRepository 原理分析:

1、首先springBoot 项目的pom文件中引入jar包:


        
            org.springframework.boot
            spring-boot-starter-data-elasticsearch
        

Spring-data-elasticsearch是Spring提供的操作ElasticSearch的数据层,封装了大量的基础操作,通过它可以很方便的操作ElasticSearch的数据。 

2、配置文件中配置:

#如禁止es的健康检查如下,默认均为开启状态

management:
  health:
    elasticsearch:
      enabled: false


es:
  ip: 172.18.89.33
  port: 9200
  articleType: /nandao-article/

3、业务方法继承方式:

public interface ArticleRepository extends ElasticsearchRepository {

//这里面可以自定义方法,后面会介绍
}

4、查看ElasticsearchRepository接口的源码

package org.springframework.data.elasticsearch.repository;

import java.io.Serializable;

import org.elasticsearch.index.query.QueryBuilder;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.data.repository.NoRepositoryBean;


@NoRepositoryBean
public interface ElasticsearchRepository extends ElasticsearchCrudRepository {

	 S index(S entity);

	Iterable search(QueryBuilder query);

	Page search(QueryBuilder query, Pageable pageable);

	Page search(SearchQuery searchQuery);

	Page searchSimilar(T entity, String[] fields, Pageable pageable);

	void refresh();

	Class getEntityClass();
}

我们是通过继承 ElasticsearchRepository 来完成基本的CRUD及分页操作的,和普通的JPA没有什么区别。

5、查看 ElasticsearchCrudRepository 的源码:

import java.io.Serializable;

import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;


@NoRepositoryBean
public interface ElasticsearchCrudRepository extends PagingAndSortingRepository {

}

6、查看  PagingAndSortingRepository 源码:

package org.springframework.data.repository;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;


@NoRepositoryBean
public interface PagingAndSortingRepository extends CrudRepository {

	
	Iterable findAll(Sort sort);

	
	Page findAll(Pageable pageable);
}

7、查看  CrudRepository  源码:

package org.springframework.data.repository;

import java.util.Optional;


@NoRepositoryBean
public interface CrudRepository extends Repository {

	
	 S save(S entity);

	
	 Iterable saveAll(Iterable entities);

	
	Optional findById(ID id);

	
	boolean existsById(ID id);

	
	Iterable findAll();

	
	Iterable findAllById(Iterable ids);

	
	long count();

	
	void deleteById(ID id);

	
	void delete(T entity);

	
	void deleteAll(Iterable entities);

	
	void deleteAll();
}

8、查看 Repository 空方法

@Indexed
public interface Repository {

}

ElasticsearchRepository继承了ElasticsearchCrudRepository extends PagingAndSortingRepository 继承 CrudRepository 接口 继承 Repository空方法,这些均是源码提供的接口,

9、按照规则 可以自定义一下方法,举例:

import com.huobi.chat.news.service.dto.ArticleEsDto;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

import java.util.List;

 
public interface ArticleRepository extends ElasticsearchRepository {

    

    List findByTitle(String title);

   // List findByP(String title);

    List findByContent(String content);

    List findBySummary(String summary);

    List findByTitleAndContent(String titleAndContent,String ss);

}

如图证明写接口名称时就会有提示:

二、测试使用

1 、保存接口测试 

    @PostMapping("save")
    public void save(@Validated @RequestBody ArticleEsDto req){
        ArticleEsDto dto = new ArticleEsDto();
        dto.setTitle(req.getTitle());
        dto.setSummary(req.getSummary());
        dto.setContent(req.getContent());
        dto.setArticleId(999L);
        dto.setId(req.getId());
        dto.setSource(req.getSource());
        dto.setJid(111L);
        dto.setListPicturePath("http:llll");
        //es原生保存接口
        articleRepository.save(dto);
        return ;
        }

传的参数:

{
    "id":8,
    "title":"佛陀阿弥陀佛啊",
    "content":"释迦摩尼佛",
    "summary":"观世音菩萨佛",
    "source":"as",
    "listPicturePath":"hhhh"
}

2、原生查询接口

    @PostMapping("search")
    public void queryTest(@Validated @RequestBody ArticleDetailReq req){
        QueryStringQueryBuilder builder = new QueryStringQueryBuilder(req.getMobileType());
        //原生查询方法
        Iterable searchResult = articleRepository.search(builder);
        Iterator iterator = searchResult.iterator();
        while (iterator.hasNext()) {
            System.out.println("成功查询:"+iterator.next());
        }
        return;
    }

3、自定义查询接口:

    @PostMapping("testTitle")
    public void testSearchTitle(@Validated @RequestBody ArticleDetailReq req){
        List searchResult = articleRepository.findByTitle(req.getMobileType());
        Iterator iterator = searchResult.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
        System.out.println("sa");
        return;
    }

查询参数:

{
    "mobileType":"佛a"
    
}

4、自定义多参数查询:

    @PostMapping("findByTitleAndContent")
    public void findByTitleAndContent(@Validated @RequestBody ArticleDetailReq req){
        List searchResult = articleRepository.findByTitleAndContent(req.getMobileType(),req.getMobileType());
        Iterator iterator = searchResult.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
        System.out.println("sa");
        return;
    }

5、查询结果如下图:

  到此,ElasticsearchRepository分享完毕,下篇我们分享ElasticSearchTemplate的原理和使用,敬请期待!

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号