elasticsearch进阶使用demo

  1. dao

    package com.czxy.reporty;
    
    import com.czxy.pojo.TdvdPojo;
    import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
    
    public interface DvdRepostory extends ElasticsearchRepository<TdvdPojo, Integer> {
    }
    
  2. service

    package com.czxy.service;
    
    import com.czxy.pojo.TdvdPojo;
    import com.czxy.reporty.DvdRepostory;
    import org.apache.commons.lang3.StringUtils;
    import org.elasticsearch.index.query.*;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.PageRequest;
    import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    
    
    @Service
    @Transactional
    public class Dservice {
        @Autowired
        private DvdRepostory dvdRepostory;
        /**
         * es 根据dvd名字进行查询
         * @param serach
         * @return
         */
        public Page<TdvdPojo> pageQuery(String serach ,Integer page ,Integer size) {
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
            if(StringUtils.isNotBlank(serach)){
                WildcardQueryBuilder q1 = QueryBuilders.wildcardQuery("dname","*"+serach+"*");
                QueryBuilder q2 = new QueryStringQueryBuilder(serach).field("dname").defaultOperator(Operator.AND);
                BoolQueryBuilder boolQueryBuilder1 = new BoolQueryBuilder();
    
                boolQueryBuilder1.should(q1).should(q2);
    
                boolQueryBuilder.must(boolQueryBuilder1);
            }
            NativeSearchQuery searchQuery =new NativeSearchQuery(boolQueryBuilder);
    
            searchQuery.setPageable(PageRequest.of(page - 1 ,size ));
            return  this.dvdRepostory.search(searchQuery);
    
        }
    }
    
    
  3. controller

    package com.czxy.controller;
    
    import com.czxy.pojo.TdvdPojo;
    import com.czxy.service.Dservice;
    import com.czxy.vo.Result;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.domain.Page;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/es")
    public class DvdController {
        @Autowired
        private Dservice dservice;
        @GetMapping("/search")
        public ResponseEntity<Result<TdvdPojo>> search(String search,Integer page, Integer size){
          Page<TdvdPojo> pa= this.dservice.pageQuery(search,page, size);
           Result<TdvdPojo> result = new Result<>(pa.getTotalElements(),pa.getContent());
            System.out.println(result);
           return new ResponseEntity<>(result,HttpStatus.OK);
        }
    
    
    }
    
    
  4. pojo

    package com.czxy.pojo;
    
    
    import org.springframework.data.annotation.Id;
    import org.springframework.data.elasticsearch.annotations.Document;
    import org.springframework.data.elasticsearch.annotations.Field;
    import org.springframework.data.elasticsearch.annotations.FieldType;
    
    @Document(indexName="dvdall",type="dvd")
    public class TdvdPojo {
        /**
         * id
         */
        @Id
        private Integer id;
    
        /**
         * dvd名字
         */
       @Field(type = FieldType.Text)
        private String dname;
    
        /**
         * 总的库存量
         */
        @Field(type = FieldType.Long)
        private Integer allnumber;
    
        /**
         * 现在的库存量
         */
        @Field(type = FieldType.Long)
        private Integer nownumber;
    
        /**
         * 借阅的价格
         */
        @Field(type = FieldType.Float)
        private Double brorrowprice;
    
        /**
         * 原来的价格
         */
        @Field(type = FieldType.Float)
        private Double agoprice;
        @Field(type = FieldType.Auto)
        private  String src;
    	//省略setter和getter
      
    }
    
    
  5. vo类

    package com.czxy.vo;
    
    import java.util.List;
    
    public class Result<T> {
        //结果总数
        private long total;
        //结果行数
        private List<T> rows;
    
        private Integer page;
        private  Integer size;
    	//省略setter和getter
    
    

猜你喜欢

转载自blog.csdn.net/qq_42917455/article/details/84197575
今日推荐