国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot ElasticSearch 實(shí)現(xiàn)訂單的分頁(yè)查詢(xún) 【SpringBoot系列17】

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot ElasticSearch 實(shí)現(xiàn)訂單的分頁(yè)查詢(xún) 【SpringBoot系列17】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

SpringCloud 大型系列課程正在制作中,歡迎大家關(guān)注與提意見(jiàn)。
程序員每天的CV 與 板磚,也要知其所以然,本系列課程可以幫助初學(xué)者學(xué)習(xí) SpringBooot 項(xiàng)目開(kāi)發(fā) 與 SpringCloud 微服務(wù)系列項(xiàng)目開(kāi)發(fā)

elasticsearch是一款非常強(qiáng)大的開(kāi)源搜索引擎,具備非常多強(qiáng)大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容。
本項(xiàng)目數(shù)據(jù)庫(kù)使用的是 MySql ,查詢(xún)數(shù)據(jù)使用的是 ElasticSearch

elasticsearch spring 分頁(yè),SpringBoot,java點(diǎn)滴積累,elasticsearch,spring boot,java
本文章接 SpringBoot ElasticSearch 【SpringBoot系列16】

ES 中的數(shù)據(jù)查詢(xún)基本步驟:

  • 第一步,創(chuàng)建SearchRequest對(duì)象,指定索引庫(kù)名
  • 第二步,利用request.source()構(gòu)建DSL,DSL中可以包含查詢(xún)、分頁(yè)、排序、高亮等
  • 第三步,利用client.search()發(fā)送請(qǐng)求,得到響應(yīng)
  • 第四步 解析數(shù)據(jù)
@SpringBootTest
@RunWith(SpringRunner.class)
@Slf4j
public class ESDocumentTests {

    @Resource
    RestHighLevelClient restHighLevelClient;
    @Test
    void testMatchAll() throws IOException {
        // 1.準(zhǔn)備Request
        SearchRequest request = new SearchRequest("order");
        // 2.準(zhǔn)備DSL
        request.source()
                .query(QueryBuilders.matchAllQuery());
        // 3.發(fā)送請(qǐng)求
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);

        // 4.解析響應(yīng)
        handleResponse(response);
    }

    private void handleResponse(SearchResponse response) {
        // 4.解析響應(yīng)
        SearchHits searchHits = response.getHits();
        // 4.1.獲取總條數(shù)
        long total = searchHits.getTotalHits().value;
        log.info("共搜索到" + total + "條數(shù)據(jù)");
        // 4.2.文檔數(shù)組
        SearchHit[] hits = searchHits.getHits();
        // 4.3.遍歷
        for (SearchHit hit : hits) {
            // 獲取文檔source
            String json = hit.getSourceAsString();
            // 反序列化
            Order order = JSON.parseObject(json, Order.class);
            log.info("查詢(xún)到數(shù)據(jù) {}",order);
        }
    }
}
1 精確查詢(xún)

上述查詢(xún)中,QueryBuilders.matchAllQuery() 就是查詢(xún)條件,在這里沒(méi)有設(shè)置任何篩選條件,所以默認(rèn)返回前10條數(shù)據(jù)。

     request.source()
             .query(QueryBuilders.matchAllQuery());

如果要實(shí)現(xiàn)精確查詢(xún),需要構(gòu)建查詢(xún)條件:

 @Test
 public void testBool() throws IOException {
     // 1.準(zhǔn)備Request
     SearchRequest request = new SearchRequest("order");
     // 2.準(zhǔn)備DSL
     // 2.1.準(zhǔn)備BooleanQuery
     BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
     // 2.2.添加term
     boolQuery.must(QueryBuilders.termQuery("goodsName", "手機(jī)"));
     // 2.3.添加range
     boolQuery.filter(QueryBuilders.rangeQuery("goodsPrice").lte(250));
     //排序 
     request.source().query(boolQuery);
     // 3.發(fā)送請(qǐng)求
     SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
     // 4.解析響應(yīng)
     handleResponse(response);

 }

核心就是這里的條件

  • term:詞條精確匹配
  • range:范圍查詢(xún)
     // 2.2.添加term
     boolQuery.must(QueryBuilders.termQuery("goodsName", "手機(jī)"));
     // 2.3.添加range
     boolQuery.filter(QueryBuilders.rangeQuery("goodsPrice").lte(250));
2 查詢(xún)結(jié)果排序與分頁(yè)

elasticsearch spring 分頁(yè),SpringBoot,java點(diǎn)滴積累,elasticsearch,spring boot,java
elasticsearch 在集群模式下,查詢(xún)TOP1000的數(shù)據(jù),例如我集群有5個(gè)節(jié)點(diǎn),就必須先查詢(xún)出每個(gè)節(jié)點(diǎn)的TOP1000,匯總結(jié)果后,重新排名,重新截取TOP1000。
elasticsearch spring 分頁(yè),SpringBoot,java點(diǎn)滴積累,elasticsearch,spring boot,java
當(dāng)查詢(xún)分頁(yè)深度較大時(shí),匯總數(shù)據(jù)過(guò)多,對(duì)內(nèi)存和CPU會(huì)產(chǎn)生非常大的壓力,因此elasticsearch會(huì)禁止from+ size 超過(guò)10000的請(qǐng)求。

    @Test
    public void testPageAndSort() throws IOException {
        // 頁(yè)碼,每頁(yè)大小
        int page = 1, size = 5;

        // 1.準(zhǔn)備Request
        SearchRequest request = new SearchRequest("order");
        // 2.準(zhǔn)備DSL
        // 2.1.query
        request.source().query(QueryBuilders.matchAllQuery());
        // 2.2.排序 sort
        request.source().sort("price", SortOrder.ASC);
        // 2.3.分頁(yè) from、size
        request.source().from((page - 1) * size).size(5);
        // 3.發(fā)送請(qǐng)求
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        // 4.解析響應(yīng)
        handleResponse(response);

    }

核心代碼就是

  • sort 排序
  • from 分頁(yè)
  // 2.2.排序 sort
  request.source().sort("price", SortOrder.ASC);
  // 2.3.分頁(yè) from、size
  request.source().from((page - 1) * size).size(5);
3 本項(xiàng)目實(shí)現(xiàn)的 訂單分頁(yè)查詢(xún)
@Api(tags = "訂單模塊")
@RestController()
@RequestMapping("/orders")
@Slf4j
public class OrderController {
    @Autowired
    private OrderService orderService;
  
    /**
     * 查詢(xún)用戶(hù)所有的訂單
     */
    @PostMapping("/list")
    public PageResult listFromList(@RequestHeader Long userId,
                                   @RequestBody RequestParams params) {
        PageResult pageResult = orderService.listFromList(userId,params);
        return pageResult;
    }

}

PageResult 是分頁(yè)信息類(lèi)

@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class PageResult {
    /**
     * 當(dāng)前頁(yè)碼
     */
    private int pageNum;
    /**
     * 每頁(yè)數(shù)量
     */
    private int pageSize;
    /**
     * 記錄總數(shù)
     */
    private long totalSize;
    /**
     * 頁(yè)碼總數(shù)
     */
    private int totalPages;
    /**
     * 數(shù)據(jù)模型
     */
    private List<?> content;

    public PageResult(long total, List<Order> orderList) {
        this.content = orderList;
        this.totalSize = total;
    }
}

RequestParams 是查詢(xún)條件 ,包括了分頁(yè)信息以及訂單的狀態(tài)

@Data
@AllArgsConstructor
public class RequestParams implements Serializable {
    Integer page;
    Integer pageSize;
    Integer statues;
}

最后就是實(shí)現(xiàn)訂單的分頁(yè)查詢(xún)

   @Resource
   RestHighLevelClient restHighLevelClient;
   /**
    * 分頁(yè)查詢(xún)用戶(hù)的訂單
    *
    * @param userId
    * @param params
    * @return
    */
   @Override
   public PageResult listFromList(Long userId, RequestParams params) {
       try {
           // 1.準(zhǔn)備Request
           SearchRequest request = new SearchRequest("order");
           // 2.準(zhǔn)備DSL
           // 1.構(gòu)建BooleanQuery
           BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();

           //查詢(xún)對(duì)應(yīng)用戶(hù)的
           boolQuery.must(QueryBuilders.matchQuery("userId", userId));
           //訂單狀態(tài)
           if (params.getStatues() != null && params.getStatues()>=0) {
               boolQuery.filter(QueryBuilders.termQuery("status", params.getStatues()));
           }

           // 分頁(yè)
           int page = params.getPage();
           int size = params.getPageSize();
           request.source().from((page - 1) * size).size(size);

           // 3.發(fā)送請(qǐng)求
           SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
           // 4.解析響應(yīng)
           return handleResponse(response);
       } catch (IOException e) {
           throw new RuntimeException(e);
       }

   }

   // 結(jié)果解析
   private PageResult handleResponse(SearchResponse response) {
       // 4.解析響應(yīng)
       SearchHits searchHits = response.getHits();
       // 4.1.獲取總條數(shù)
       long total = searchHits.getTotalHits().value;
       // 4.2.文檔數(shù)組
       SearchHit[] hits = searchHits.getHits();
       // 4.3.遍歷
       List<Order> hotels = new ArrayList<>();
       for (SearchHit hit : hits) {
           // 獲取文檔source
           String json = hit.getSourceAsString();
           // 反序列化
           Order hotelDoc = JSON.parseObject(json, Order.class);
           // 放入集合
           hotels.add(hotelDoc);
       }
       // 4.4.封裝返回
       return new PageResult(total, hotels);
   }

elasticsearch spring 分頁(yè),SpringBoot,java點(diǎn)滴積累,elasticsearch,spring boot,java

4 訂單的其他操作

ES 中查詢(xún)訂單詳情

    @Override
    public Order getOrderDetailFromEs(Long orderId) {
        // 創(chuàng)建獲取請(qǐng)求對(duì)象
        GetRequest getRequest = new GetRequest("order", "83");
        try {
            GetResponse response = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
            if(response.isExists()){
                log.info("查詢(xún)到詳情 {}",response.getSourceAsString());
                Order hotelDoc = JSON.parseObject(response.getSourceAsString(), Order.class);
                return hotelDoc;
            }else{
                log.error("未消查詢(xún)到詳情");
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return null;
    }

ES 中修改訂單狀態(tài)

    /**
     * 更新ES中訂單的狀態(tài)
     * @param statues
     */
    public void updateOrderStatues(Long orderId,Integer statues) {

        // 設(shè)置商品更新信息
        Order goods = new Order();
        goods.setStatus(statues);


        // 將對(duì)象轉(zhuǎn)為json
        String data = JSON.toJSONString(goods);
        // 創(chuàng)建索引請(qǐng)求對(duì)象
        UpdateRequest updateRequest = new UpdateRequest("order", orderId.toString());
        // 設(shè)置更新文檔內(nèi)容
        updateRequest.doc(data, XContentType.JSON);
        // 執(zhí)行更新文檔
        UpdateResponse response = null;
        try {
            response = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        log.info("更新?tīng)顟B(tài):{}", response.status());
    }

ES 中新增一條訂單數(shù)據(jù)

    /**
     * 下單成功的時(shí)候 把數(shù)據(jù)保存到ES中
     * @param order
     */
    private void saveOrderToEs(Order order){
        // 將對(duì)象轉(zhuǎn)為json
        String data = JSON.toJSONString(order);
        // 創(chuàng)建索引請(qǐng)求對(duì)象
        // 參數(shù)一 索引庫(kù)名  參數(shù)二文檔名稱(chēng)
        IndexRequest indexRequest = new IndexRequest("order").id(order.getId() + "");
        // 準(zhǔn)備JSON文檔
        indexRequest.source(data, XContentType.JSON);
        // 執(zhí)行增加文檔
        IndexResponse response = null;
        try {
            response = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
            log.info("創(chuàng)建狀態(tài):{}", response.status());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

項(xiàng)目源碼在這里 :https://gitee.com/android.long/spring-boot-study/tree/master/biglead-api-12-es
有興趣可以關(guān)注一下公眾號(hào):biglead文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-699863.html


  1. 創(chuàng)建SpringBoot基礎(chǔ)項(xiàng)目
  2. SpringBoot項(xiàng)目集成mybatis
  3. SpringBoot 集成 Druid 數(shù)據(jù)源【SpringBoot系列3】
  4. SpringBoot MyBatis 實(shí)現(xiàn)分頁(yè)查詢(xún)數(shù)據(jù)【SpringBoot系列4】
  5. SpringBoot MyBatis-Plus 集成 【SpringBoot系列5】
  6. SpringBoot mybatis-plus-generator 代碼生成器 【SpringBoot系列6】
  7. SpringBoot MyBatis-Plus 分頁(yè)查詢(xún) 【SpringBoot系列7】
  8. SpringBoot 集成Redis緩存 以及實(shí)現(xiàn)基本的數(shù)據(jù)緩存【SpringBoot系列8】
  9. SpringBoot 整合 Spring Security 實(shí)現(xiàn)安全認(rèn)證【SpringBoot系列9】
  10. SpringBoot Security認(rèn)證 Redis緩存用戶(hù)信息【SpringBoot系列10】
  11. SpringBoot 整合 RabbitMQ 消息隊(duì)列【SpringBoot系列11】
  12. SpringBoot 結(jié)合RabbitMQ與Redis實(shí)現(xiàn)商品的并發(fā)下單【SpringBoot系列12】
  13. SpringBoot 雪花算法生成商品訂單號(hào)【SpringBoot系列13】
  14. SpringBoot RabbitMQ 延時(shí)隊(duì)列取消訂單【SpringBoot系列14】
  15. SpringBoot RabbitMQ 商品秒殺【SpringBoot系列15】
  16. SpringBoot ElasticSearch 【SpringBoot系列16】

到了這里,關(guān)于SpringBoot ElasticSearch 實(shí)現(xiàn)訂單的分頁(yè)查詢(xún) 【SpringBoot系列17】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ES(Elasticsearch)+SpringBoot實(shí)現(xiàn)分頁(yè)查詢(xún)

    1.ES介紹 ??ES作為一個(gè)搜索工具,寄托于Lucene之上,提供了方便的數(shù)據(jù)存儲(chǔ)和搜索服務(wù),一般的用它來(lái)作為網(wǎng)頁(yè)數(shù)據(jù)索引以及存儲(chǔ)用戶(hù)畫(huà)像(即用戶(hù)標(biāo)簽)數(shù)據(jù),可以提供復(fù)具有復(fù)雜的查詢(xún)條件的服務(wù)。例如在網(wǎng)頁(yè)索引中,通過(guò)倒排的方式索引的方式,對(duì)文檔進(jìn)行分詞存儲(chǔ),

    2024年02月16日
    瀏覽(24)
  • SpringBoot 整合ElasticSearch實(shí)現(xiàn)模糊查詢(xún),批量CRUD,排序,分頁(yè),高亮

    SpringBoot 整合ElasticSearch實(shí)現(xiàn)模糊查詢(xún),批量CRUD,排序,分頁(yè),高亮

    準(zhǔn)備一個(gè)空的SpringBoot項(xiàng)目 寫(xiě)入依賴(lài) 注意你的SpringBoot和你的es版本,一定要對(duì)應(yīng),如果不知道的可以查看這篇文章:https://blog.csdn.net/u014641168/article/details/130386872 我的版本是2.2.6,所以用的ES版本是 6.8.12,安裝es請(qǐng)看這篇文章:https://blog.csdn.net/u014641168/article/details/130622430 查看

    2024年02月08日
    瀏覽(41)
  • Springboot集成ElasticSearch實(shí)現(xiàn)簡(jiǎn)單的crud、簡(jiǎn)單分頁(yè)、模糊查詢(xún)

    Springboot集成ElasticSearch實(shí)現(xiàn)簡(jiǎn)單的crud、簡(jiǎn)單分頁(yè)、模糊查詢(xún)

    pom.xml引入ElasticSearch application.yml配置 啟動(dòng)類(lèi)加入注解@EnableElasticsearchRepositories ElasticSearchEntity Repository類(lèi)繼承ElasticsearchRepository ElasticSearchService ElasticSearchController 測(cè)試 查看創(chuàng)建的索引(相當(dāng)于MySQL的表) method:GET 刪除索引 method:DELETE 查看索引里的全部數(shù)據(jù), elastic是實(shí)體類(lèi)

    2023年04月18日
    瀏覽(25)
  • SpringBoot整合Elasticsearch實(shí)現(xiàn)分頁(yè)條件查詢(xún)及注意事項(xiàng)

    項(xiàng)目環(huán)境: springboot 2.3.7.RELEASE es 6.8.3 這里需要注意es中日期格式,ES默認(rèn)是不支持yyyy-MM-dd HH:mm:ss格式的,需要通過(guò) @Field(type = FieldType.Date, format = DateFormat.custom,pattern = \\\"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_second\\\") 來(lái)指定日期格式。 直接看業(yè)務(wù)層實(shí)現(xiàn)分頁(yè)條件查詢(xún): 范圍查詢(xún): es en

    2023年04月16日
    瀏覽(22)
  • Elasticsearch - 閑聊ElasticSearch中的分頁(yè)

    Elasticsearch - 閑聊ElasticSearch中的分頁(yè)

    ElasticSearch是一款強(qiáng)大的搜索引擎,它能夠幫助我們快速地搜索海量數(shù)據(jù)。然而,在處理大量數(shù)據(jù)時(shí),ElasticSearch的性能可能會(huì)受到影響。其中一個(gè)常見(jiàn)的問(wèn)題是深度分頁(yè),也就是當(dāng)我們需要獲取大量數(shù)據(jù)時(shí),ElasticSearch需要處理的數(shù)據(jù)量太大,導(dǎo)致性能下降。 Elasticsearch 深度分

    2024年02月11日
    瀏覽(22)
  • ElasticSearch系列 - SpringBoot整合ES:實(shí)現(xiàn)分頁(yè)搜索 from+size、search after、scroll

    01. 數(shù)據(jù)準(zhǔn)備 ElasticSearch 向 my_index 索引中索引了 12 條文檔: 02. ElasticSearch 如何查詢(xún)所有文檔? ElasticSearch 查詢(xún)所有文檔 根據(jù)查詢(xún)結(jié)果可以看出,集群中總共有12個(gè)文檔,hits.total.value=12, 但是在 hits 數(shù)組中只有 10 個(gè)文檔。如何才能看到其他的文檔? 03. ElasticSearch 如何指定搜

    2023年04月08日
    瀏覽(28)
  • Springboot整合Elasticsearch新版分頁(yè)查詢(xún)

    其它插入、刪除、簡(jiǎn)單查詢(xún)都可以通過(guò)Repository調(diào)用方法查詢(xún)。 Elasticsearch現(xiàn)在的新版本已經(jīng)棄用了ElasticsearchTemplate類(lèi),Repository里原來(lái)的search方法也已經(jīng)棄用了。下面是使用ElasticsearchRestTemplate類(lèi)實(shí)現(xiàn)的分頁(yè)查詢(xún) 代碼

    2024年02月11日
    瀏覽(16)
  • MyBatisPlus(SpringBoot版)的分頁(yè)插件

    MyBatisPlus(SpringBoot版)的分頁(yè)插件

    目錄 ?一、前置工作: ? ? ? ? 1.整體項(xiàng)目目錄結(jié)構(gòu) ? ? ? ? 2.創(chuàng)建普通javamaven項(xiàng)目。 ? ? ? ??3.導(dǎo)入依賴(lài),改造成springboot項(xiàng)目 ????????4.配置啟動(dòng)類(lèi) ????????5.創(chuàng)建service接口及其實(shí)現(xiàn)類(lèi) ? ? ? ?6.創(chuàng)建接口Mapper ???????? ????????7.配置數(shù)據(jù)源 ?? ? ? ?8.創(chuàng)建數(shù)

    2024年04月27日
    瀏覽(32)
  • 重構(gòu)優(yōu)化第三方查詢(xún)接口返回大數(shù)據(jù)量的分頁(yè)問(wèn)題

    重構(gòu)優(yōu)化第三方查詢(xún)接口返回大數(shù)據(jù)量的分頁(yè)問(wèn)題

    # 問(wèn)題描述 ? ? ?用戶(hù)線上查詢(xún)其上網(wǎng)流量詳單數(shù)據(jù)加載慢,且有時(shí)候數(shù)據(jù)沒(méi)有響應(yīng)全~ ? ? ?1、經(jīng)排除是調(diào)用第三方數(shù)據(jù)量達(dá)10w條響應(yīng)會(huì)超時(shí),數(shù)據(jù)沒(méi)正常返回 ? ? ?2、現(xiàn)有線上緩存分頁(yè)也是加載慢數(shù)據(jù)不能正常展示 ? ? ?3、第三方接口返回類(lèi)似報(bào)文jsonj: ? ? ? ? ? 4、我

    2024年02月09日
    瀏覽(31)
  • 【若依】關(guān)于對(duì)象查詢(xún)list返回,進(jìn)行業(yè)務(wù)處理以后的分頁(yè)問(wèn)題

    【若依】關(guān)于對(duì)象查詢(xún)list返回,進(jìn)行業(yè)務(wù)處理以后的分頁(yè)問(wèn)題

    1、查詢(xún)對(duì)象Jglkq返回 list,對(duì) list 進(jìn)行業(yè)務(wù)處理后返回,但分頁(yè)出現(xiàn)問(wèn)題。 ?2、最終解決方案,改造 TableDataInfo getDataTable(List listVo,List list)方法 返回list中修改:?

    2024年01月25日
    瀏覽(29)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包