91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring?Boot如何集成Elasticsearch模塊實現簡單查詢功能

發布時間:2022-06-14 09:58:18 來源:億速云 閱讀:188 作者:iii 欄目:開發技術

這篇文章主要介紹“Spring Boot如何集成Elasticsearch模塊實現簡單查詢功能”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Spring Boot如何集成Elasticsearch模塊實現簡單查詢功能”文章能幫助大家解決問題。

    背景

    項目中我們經常會用搜索功能,普通的搜索我們可以用一個SQL的like也能實現匹配,但是搜索的核心需求是全文匹配,對于全文匹配,數據庫的索引是根本派不上用場的,那只能全表掃描。全表掃描的速度已經非常慢了,還需要在每條記錄上做全文匹配,一個字一個字的比對,導致查詢的數據更慢。所以,使用數據來做搜索,性能上完全沒法滿足要求。

    系統集成

    引入jar包

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
     <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
      </dependency>

    application.yml文件中添加ES配置

      elasticsearch:
        rest:
          uris: http://localhost:9200

    注意:不同的ES版本,引入jar包和配送屬性文件的方式不同,本文采用的是Spring Boot 2.2+Elasticsearch7.0的版本。

    創建文檔實體

    @Document(indexName = "product", createIndex = true)
    public class Product implements Serializable
    {
        private static final long serialVersionUID = -2408117939493050954L;
    
        @Id
        @Field(type = FieldType.Text)
        private String id;
    
        @Field(type = FieldType.Text)
        private String skuNo;
    
        @Field(type = FieldType.Text)
        private String tilte;
    
        @Field(type = FieldType.Double)
        private BigDecimal price;
        
        @Field(type = FieldType.Date, format = DateFormat.basic_date_time)
        private Date createDate;
      }

    說明:

    • indexName:索引的名稱

    • createIndex:ture表示如果不存在,則創建

    • @Id:索引id

    • @Field:type字段的類型,format:查詢出時間格式化類型。

    接口實現

    public interface EsProductRepository extends ElasticsearchRepository<Product,String>
    {
        List<Product> findByskuNoAndTilte(String sku,String title);
    }

    說明:集成ElasticsearchRepository接口,采用的是JPA的方式實現,JPA默認提供了相關的接口實現。

    具體實現

    Elasticsearch的實現分為基礎查詢和DSL查詢。

    基礎查詢

    基礎查詢主要包含的CRUD查詢,以及一些模糊、范圍查詢等。

    新增文檔

    請求參數

    {
         "id":"5",
         "skuNo":"sku0005",
         "tilte":"紅樓夢",
          "price":"93.37",
          "createDate":"1514736000000"
    }

    說明:date類型傳入的參數為long類型。

    Controller實現

     @PostMapping("/addProduct")
        public Result addProduct(@RequestBody Product product) 
        {
            esProductRepository.save(product);
            Result result = new Result();
            result.setCode(200);
            result.setData(product);
            return result;
        }

    返回結果

    {
        "data": {
            "id": "5",
            "skuNo": "sku0005",
            "tilte": "紅樓夢",
            "price": 93.37,
            "createDate": "2017-12-31T16:00:00.000+00:00"
        },
        "code": 200,
        "msg": null
    }

    修改文檔

    修改與新增基本相同,唯一區別為:請求參數傳入的Id,如果存在則為修改,否則為新增。

    通過id查詢文檔信息

    Controller實現

       @GetMapping("/getProductById")
        public Result getProductById(@RequestParam String id) {
            Optional<Product> product = esProductRepository.findById(id);
            return Result.success(product);
        }

    刪除文檔

    Controller實現

        @PostMapping("/deleteById")
        public Result deleteById(@RequestParam String id) 
        {
            return  Result.success(null);
        }

    分頁查詢

    Controller實現

     @GetMapping("/getPageList")
        public Result getPageList(@RequestParam int pageNum,@RequestParam int pageSize)
        {
            Pageable pageable = PageRequest.of(pageNum, pageSize);
            Page<Product> pageList= esProductRepository.findAll(pageable);
            return Result.success(pageList);
        }

    返回結果

    {
        "data": {
            "content": [
                {
                    "id": "1",
                    "skuNo": "p0001",
                    "tilte": null,
                    "price": 99.9,
                    "createDate": null
                },
                {
                    "id": "3",
                    "skuNo": "p0002",
                    "tilte": null,
                    "price": 99.8,
                    "createDate": null
                },
                {
                    "id": "4",
                    "skuNo": "p0004",
                    "tilte": null,
                    "price": 110,
                    "createDate": null
                },
                {
                    "id": "L1zuVYEBuycvlc7eiQ7_",
                    "skuNo": "sku0001",
                    "tilte": "水滸傳",
                    "price": 93.37,
                    "createDate": "1970-01-01T05:37:00.611+00:00"
                },
                {
                    "id": "5",
                    "skuNo": "sku0005",
                    "tilte": "紅樓夢",
                    "price": 93.37,
                    "createDate": "2017-12-31T16:00:00.000+00:00"
                }
            ],
            "pageable": {
                "sort": {
                    "sorted": false,
                    "unsorted": true,
                    "empty": true
                },
                "offset": 0,
                "pageSize": 5,
                "pageNumber": 0,
                "paged": true,
                "unpaged": false
            },
            "aggregations": null,
            "scrollId": null,
            "maxScore": 1.0,
            "totalPages": 1,
            "totalElements": 5,
            "number": 0,
            "size": 5,
            "sort": {
                "sorted": false,
                "unsorted": true,
                "empty": true
            },
            "numberOfElements": 5,
            "first": true,
            "last": true,
            "empty": false
        },
        "code": 200,
        "msg": null
    }

    說明:

    • totalPages:總頁數

    • totalElements:總記錄數

    模糊查詢

    Controller實現

       @GetMapping("/findByTilteLike")
        public Result findByTilteLike(@RequestParam String key) {
            List<Product> products = esProductRepository.findByTilteLike(key);
            return Result.success(products);
        }

    說明:模糊查詢通過findByxxlike

    范圍查詢

    范圍查詢通常是指>、< >= <=等

    Controller實現

      @GetMapping("/findByPriceGreaterThanEqual")
        public Result findByPriceGreaterThanEqual(@RequestParam Double price) {
            List<Product> products = esProductRepository.findByPriceGreaterThanEqual(price);
            return Result.success(products);
        }

    說明:范圍查詢通過findByxxGreaterThanEqual

    • 大于:GreaterThan

    • 大于等于:GreaterThanEqual

    • 小于:LessThan

    • 小于等于:LessThanEqual

    關于“Spring Boot如何集成Elasticsearch模塊實現簡單查詢功能”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    古丈县| 霞浦县| 古交市| 桐柏县| 同仁县| 中宁县| 麻栗坡县| 盐池县| 白玉县| 东乡县| 大洼县| 洪湖市| 大宁县| 璧山县| 锡林浩特市| 英吉沙县| 金阳县| 威宁| 大宁县| 衡阳市| 周至县| 尼玛县| 延川县| 卓尼县| 西青区| 浮山县| 铜川市| 田东县| 宁都县| 绥棱县| 曲沃县| 同仁县| 诸城市| 孟津县| 望都县| 台北市| 东至县| 曲麻莱县| 昌乐县| 彰武县| 武宁县|