Elasticsearch常用API详解

Elasticsearch常用API详解

1.CrudRepository

简介:可以先去看看官网的地址,对你有帮助:https://docs.spring.io/spring-data/elasticsearch/docs/4.1.2/reference/html/#repositories.core-concepts

常用的crud

public interface CrudRepository<T, ID> extends Repository<T, ID> {
    
     <S extends T> S save(S entity);   //保存
    
    Optional<T> findById(ID primaryKey);  //根据id查询
     
      Iterable<T> findAll();     //查全部
    
     long count();            //统计
    
    void delete(T entity);    //删除
    
     boolean existsById(ID primaryKey);  //判断id是否存在 
    
}

1.1查全部

@Test
public void findAll(){
    //设置分页
 	// Pageable pageable = PageRequest.of(0, 5);
    // Iterable all = esProductRepository.findAll(pageable);
    Iterable<EsProduct> all = esProductRepository.findAll();
    Iterator<EsProduct> iterator = all.iterator();
    while(iterator.hasNext()){
        EsProduct next = iterator.next();
        System.out.println("输出:"+next);
    }
    System.out.println("111");
}	


输出:

Elasticsearch常用API详解_第1张图片

1.2 根据id查

@Test
public void findAllById() {
    Optional byId = esProductRepository.findById((long) 9);
    EsProduct esProduct = byId.get();
    System.out.println("输出:"+esProduct);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iaMWxyXD-1665369410174)(Elasticsearch%E5%BA%95%E5%B1%82%E8%B0%83%E7%94%A8%E5%91%BD%E4%BB%A4.assets/image-20220830150246353.png)]

1.3统计全部

@Test
public void count() {
    long count = esProductRepository.count();
    System.out.println("全部数据:"+count);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-onVbLsvU-1665369410175)(Elasticsearch%E5%BA%95%E5%B1%82%E8%B0%83%E7%94%A8%E5%91%BD%E4%BB%A4.assets/image-20220830150911145.png)]

1.4根据id查询是否存在

@Test
public void existsById(){
    boolean existsById = esProductRepository.existsById((long) 9);
    if(existsById){
        System.out.println("哈哈哈哈");
    }
    else{
        System.out.println("不存在");
    }

1.5删除

@Test
public void delete(){
    esProductRepository.deleteById((long)9);
    esProductRepository.deleteAll();
    //根据实体类条件删除
    EsProduct esProduct = new EsProduct();
    esProductRepository.delete(esProduct);
}

1.6保存或者修改

@Test
public void save(){
    EsProduct esProduct = new EsProduct();
    esProductRepository.save(esProduct);
}

   @Test
    public void update() {
        EsProduct esProduct = new EsProduct();
        esProduct.setId((long)9);
        esProduct.setProductName("红红火火恍恍惚惚或我改了");
        esProductRepository.save(esProduct);

    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t0aJWzDz-1665369410176)(Elasticsearch%E5%B8%B8%E7%94%A8API%E8%AF%A6%E8%A7%A3.assets/image-20220831153827157.png)]

2.另外一种写法执行增删查改等操作(常用 且 重点

2.1简单的CRUD

首先,要先继承ElasticsearchRepository

public interface xxxRepository extends ElasticsearchRepository<xxx, Long> {
		
}

Elasticsearch常用API详解_第2张图片

左边先写你要的数据 然后右边一般是get或者find…等等

eg:

/***
 * 根据id查找
 * @param id
 * @return
 */
EsProduct getAllById(Long id);
@Test
public void findAllById() {
    Optional<EsProduct> byId = esProductRepository.findById((long) 9);
    EsProduct oneData = esProductRepository.getAllById((long) 9);
    System.out.println("输出oneData:"+oneData);
    EsProduct esProduct = byId.get();
    System.out.println("输出:"+esProduct);
}

运行结果都是输出:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sf8kYzKu-1665369410177)(Elasticsearch%E5%BA%95%E5%B1%82%E8%B0%83%E7%94%A8%E5%91%BD%E4%BB%A4.assets/image-20220830153600351.png)]

其他的一些简单的查询例子如下:

public interface EsProductRepository extends ElasticsearchRepository<EsProduct, Long> {
	//需注意,这些方法不是写死的,要对应你封装的实体类,也可以在该方法再进行扩展
    //eg:countByProductNameAnd....
    
    
	 /***
     * 根据商品名字统计s
     * @param productName
     * @return
     */
    long countByProductName(String productName);
    
      /***
     * 根据用户名称删除
     * @param productName
     * @return
     */
    long deleteByProductName(String productName);
   
    
      /***
     * 根据商品名称查询
     * @param productName
     * @return
     */
    List<EsProduct> getAllByProductName(String productName);
    
    
      /***
     * 按价格进行降序排序
     * @return
     */
    List<EsProduct> findEsProductsByOrderByPriceDesc();
    	
    
        /***
     * 按价格进行降序升序,并分页
     * @param page
     * @return
     */
    Page<EsProduct> findEsProductsByOrderByPriceAsc(Pageable page);
    
    
    /***
     * 模糊查询商品名称并分页
     * @param productName
     * @param page
     * @return
     */
    Page<EsProduct> findEsProductsByProductNameLike(String productName,Pageable page);
    
     /***
     * 根据商品名称进行流的查询
     * @param productName
     * @return
     */
    Stream<EsProduct> findEsProductsByProductName(String productName);
    
    
    
    

}

2.2复杂的查询

条件是productName 或者 subTitle 或者 keywords 都可以查到。

public interface EsProductRepository extends ElasticsearchRepository<EsProduct, Long> {
/**
 * 搜索查询
 *
 * @param productName              商品名称
 * @param subTitle          商品标题
 * @param keywords          商品关键字
 * @param page              分页信息
 * @return
 */
Page<EsProduct> findByProductNameOrSubTitleOrKeywords(String productName, String subTitle, String keywords, Pageable page);

}

写法注意

1.要采用驼峰命名法。

2.方法名称productName 和 subTitle 和 keywords 都是数据库属性有的,名字都要对应上。

Elasticsearch常用API详解_第3张图片

@Test
public void findByProductNameOrSubTitleOrKeywords(){
    //开启分页
    Pageable pageable = PageRequest.of(0, 5);
    Page<EsProduct> byProductNameOrSubTitleOrKeywords = esProductRepository.findByProductNameOrSubTitleOrKeywords("小米", "海澜之家", "便宜", pageable);
    System.out.println("输出:"+byProductNameOrSubTitleOrKeywords);
}

运行结果:可以看出,都没任何问题。

Elasticsearch常用API详解_第4张图片

2.3可空性注释

来表达存储库方法的可空性约束。它们在运行时提供了一种工具友好的方法和选择加入null检查,如下所示:

  • @NonNullApi:在包级别上用于声明参数和返回值的默认行为分别是既不接受也不产生null值。
  • @NonNull: 用于不能使用的参数或返回值null(在适用的情况下不需要用于参数和返回值@NonNullApi)。
  • @Nullable: 用在参数或返回值上即可null

eg:List getAllByProductName(@Nullable String productName);

2.4支持流式查询

 /***
     * 根据商品名称进行流的查询
     * @param productName
     * @return
     */
    Stream<EsProduct> findEsProductsByProductName(String productName);

2.5支持异步结果查询

/***
 * 根据商品名称查询
 * @param productName
 * @return
 */
@Async
List<EsProduct> getAllByProductName(@Nullable String productName);

个人搭建项目代码地址:
https://github.com/hongjiatao/spring-boot-anyDemo

欢迎收藏点赞三连。谢谢!有问题可以留言博主会24小时内无偿回复。

你可能感兴趣的:(elasticsearch,elasticsearch,大数据,搜索引擎)