elasticsearch8.5版本集成springboot高版本3.0.0开发

基础环境

jdk版本:17
springboot 版本:3.0.0
springcloud版本:2022.0.0
elasticserch版本:8.5.1

Maven 配置

     <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.0</version>
        <relativePath/>
    </parent>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${
   spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${
   sping-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>co.elastic.clients</groupId>
            <artifactId>elasticsearch-java</artifactId>
        </dependency>

业务常规开发

多条件&排序搜索文档数据

    public List<ProductResp> queryProductDoc(ProductReq req) {
   
        List<ProductResp> productList = Lists.newArrayList();
		List<Query> queries = getQueryConditions(req);
		
 		SearchResponse<ProductResp> search  = elasticsearchClient.search(s -> s
                        .index("product")
                        .query(q->q.bool(b->b.must(queries)))
                        //分页查询,从第0页开始查询size个document
                        .from(req.getPageNum()-1)
                        .size(req.getPageSize())
                        //按createTime降序、状态升序排序
                        .sort(f->f.field(o->o.field("createTime").order(SortOrder.Desc)))
                        .sort(f->f.field(o->o.field("status").order(SortOrder.Asc)))
                        ,ProductResp.class);
       for (Hit<ProductResp> hit : search.hits().hits()) {
   
            ProductResp resp = hit.source();
            productList.add(resp);
       }
       return productList;
   }
 /**
     * 组装查询的条件
     * @param req
     * @return
     */
    private List<Query> getQueryConditions(ProductReq req){
   
        List<Query> queries = new ArrayList<>();
        if(CollectionUtils.isNotEmpty(req.getBrandIds())){
   
            List<FieldValue> values = new ArrayList<>();
            for (String id : req.getBrandIds()) {
   
                values.add(FieldValue.of(id));
            }
            //brandId字段精确查询
            Query brandQuery = TermsQuery.of(t -> t.field("brandId").terms(new TermsQueryField.Builder()
                    .value(values).build()
            ))._toQuery();

            queries.add(brandQuery);
        }

        if(!Objects.isNull(req.getCategoryCodes())&&req.getCategoryCodes()!=0){
   
            List<FieldValue> values = new ArrayList<>();
            values.add(FieldValue.of(req.getCategoryCodes()));
            //categoryCodes精确匹配多个枚举值(类似sql in查询: where categoryCodes in (values))
            Query mallL5CategoriesQuery = TermsQuery.of(t->t.field("categoryCodes").terms(new TermsQueryField.Builder()
                    .value(values).build()))._toQuery();
            queries.add(mallL5CategoriesQuery);
        }
      

        if(!Objects.isNull(req.getIsHaveStock())){
   
            if(req.getIsHaveStock()==1){
   
                JsonData stockFlag = JsonData.of(0);
                //availableStock范围查询(类似sql:where availableStock>xxx)
                Query hasStockQuery = RangeQuery.of(t->t.field("availableStock").gt(stockFlag))._toQuery();
                queries.add(hasStockQuery);
            }else{
   
                JsonData stockFlag = JsonData.of(0);
                Query hasStockQuery = RangeQuery.of(t->t.field("availableStock").lte(stockFlag))._toQuery();
                queries.add(hasStockQuery);
            }
        }

        if(StringUtils.isNotBlank(req.getKeyWord())){
   
            String keyword = req.getKeyWord();
            if (req.getKeyWord().contains("|")) {
   
                keyword = keyword.replace("|", "");
            } else {
   
                keyword = req.getKeyWord();
            }
            final String finalKeyWord = keyword;
			//前端传一个关键字匹配多字段,类似sql语句(where name like '%keyword%' or code like '%keyword%' or desc like '%keyword%' )
            Query nameQuery= MatchQuery.of(m->m.field("name").query(req.getKeyWord()))._toQuery();
            Query codeQuery= MatchQuery.of(m->m.field("code").query(finalKeyWord))._toQuery();
            Query descQuery= MatchQuery.of(m->m.field("desc").query(finalKeyWord))._toQuery();
            List<Query> newQuery = Arrays.asList(nameQuery, codeQuery, descQuery);
            Query query = BoolQuery.of(m -> m.should(newQuery))._toQuery();
            //skuCode //productSize
            queries.add(query);
        }
        return queries;
    }

相关推荐

  1. elasticsearch8.5版本集成springboot版本3.0.0开发

    2023-12-22 20:16:03       33 阅读
  2. Elasticsearch如何选择版本

    2023-12-22 20:16:03       17 阅读
  3. SpringBoot集成Elasticsearch实例

    2023-12-22 20:16:03       9 阅读
  4. Android API 30及更版本网络权限设置

    2023-12-22 20:16:03       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-22 20:16:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-22 20:16:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-22 20:16:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-22 20:16:03       20 阅读

热门阅读

  1. 列表的上移动和下移动实现

    2023-12-22 20:16:03       39 阅读
  2. GSON 泛型对象反序列化解决方案

    2023-12-22 20:16:03       41 阅读
  3. k8s中Chart模板流程控制if_with_range和变量

    2023-12-22 20:16:03       40 阅读
  4. Watchdogs

    Watchdogs

    2023-12-22 20:16:03      35 阅读
  5. 基于K-means和形态学算法的叶子病虫害检测

    2023-12-22 20:16:03       40 阅读
  6. 基于FSRCNN的图像超分辨重建算法附Matlab代码

    2023-12-22 20:16:03       38 阅读
  7. [蓝桥杯 2013 省 AB] 错误票据

    2023-12-22 20:16:03       34 阅读
  8. P2P应用

    P2P应用

    2023-12-22 20:16:03      46 阅读
  9. elementui下选框获取后端数据并查询

    2023-12-22 20:16:03       39 阅读
  10. React尝鲜

    2023-12-22 20:16:03       41 阅读
  11. k8s pod常用资源清单

    2023-12-22 20:16:03       30 阅读
  12. spark中 write.csv时, 添加第一行的标题title

    2023-12-22 20:16:03       44 阅读