<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring Boot 集成 ElasticSearch,實現(xiàn)高性能搜索

          共 5556字,需瀏覽 12分鐘

           ·

          2021-07-09 17:16

          1、ElasticSearch介紹

          Elasticsearch 是java開發(fā)的,基于 Lucene 的搜索引擎。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful Web接口。Elasticsearch 可以快速有效地存儲,搜索和分析大量數(shù)據(jù),而且在處理半結構化數(shù)據(jù)(即自然語言)時特別有用。

          應用集成Elasticsearch有4種方式:

          • REST Client
          • Jest
          • Spring Data
          • Spring Data Elasticsearch Repositories

          本文主要介紹一下用Spring Data Elasticsearch Repositories 是如何使用的。該方式與spring boot高度集成,日常開發(fā)時較方便,只需要簡單的配置即可開箱使用。

          2、運行 Elasticsearch

          為了便于測試,我們使用 Docker 鏡像方式快速部署一個單節(jié)點的 Elasticsearch實例,容器啟動時并綁定宿主機的9200和9300端口

          拉取鏡像:

          docker pull elasticsearch:7.4.2

          查看鏡像:

          docker images

          創(chuàng)建宿主機掛載目錄:

          mkdir -p /mydata/elasticsearch/config/
          mkdir -p /mydata/elasticsearch/data/
          echo "http.host: 0.0.0.0">>/mydata/elasticsearch/config/elasticsearch.yml

          運行容器:

          docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
          -e ES_JAVA_OPS="-Xms256m -Xmx256m" \
          -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
          -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
          -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
          -d elasticsearch:7.4.2

          參數(shù)說明:

          -p 9200:9200 將容器的9200端口映射到主機的9200端口;

          --name elasticsearch 給當前啟動的容器取名叫 elasticsearch

          -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data 將數(shù)據(jù)文件夾掛載到主機; -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml 將配置文件掛載到主機;

          -d 以后臺方式運行(daemon)

          -e ES_JAVA_OPS="-Xms256m -Xmx256m" 測試時限定內存小一點

          查看容器進程:

          docker ps -a

          3、項目集成

          按照Spring Boot的慣例,我們不必在上下文中提供任何bean來啟用對Elasticsearch的支持。我們只需要在pom.xml中添加以下依賴項:

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

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

          由于spring-boot-starter-parent指定的版本號是2.2.1.RELEASE,所以上面引入的兩個starter組件會被強制一樣的版本號,便于統(tǒng)一化管理。而底層引入的 spring-data-elasticsearch 是3.2.1.RELEASE

          在配置文件 application.yml 中配置 ES 的相關參數(shù),應用程序嘗試在localhost上與Elasticsearch連接,具體內容如下:

          spring:
            application:
              name: spring-boot-bulking-elasticsearch
            elasticsearch:
              rest:
                uris: 127.0.0.1:9200
                read-timeout: 5s

          Spring Boot 操作 ES 數(shù)據(jù)有三種方式:

          • 實現(xiàn) ElasticsearchRepository 接口
          • 引入 ElasticsearchRestTemplate
          • 引入 ElasticsearchOperations

          使用Spring Data Elasticsearch Repositories操作 Elasticsearch,定義實體類,并設置對應的索引名

          @Document(indexName = "order"type = "biz1", shards = 2)
          public class OrderModel {

              @Id
              private Long orderId;
              private Double amount;
              private Long buyerUid;
              private String shippingAddress;
          }

          常用注解說明:

          @Document:表示映射到Elasticsearch文檔上的領域對象

          @Id:表示是文檔的id,文檔可以認為是mysql中表行的概念

          @Filed:文檔中字段的類型、是否建立倒排索引、是否進行存儲

          OrderModel表示訂單的索引模型,一個OrderModel對象表示一條ES索引記錄。如果用關系數(shù)據(jù)庫做參照,Index相當于表,Document相當于記錄

          然后,需要自己定義一個業(yè)務接口 OrderRepository,并繼承擴展接口 ElasticsearchRepository

          public interface OrderRepository extends ElasticsearchRepository<OrderModel, Long> {
          }

          ElasticsearchRepositorySpring boot Elasticsearch 框架預留的擴展接口,內部的類依賴關系如下圖所示:

          ElasticsearchRepository 接口內提供常用的操作ES的方法,如:新增、修改、刪除、各種維度條件查詢及分頁等,詳細方法內容如下:

          save() 方法是創(chuàng)建索引,如果索引document已經存在,后面的 save 方法則是對之前的數(shù)據(jù)覆蓋。也就是說新增和修改都可以通過 save 方法 實現(xiàn)。

          最后,通過編寫單元測試類來驗證方法功能

          @Test
          public void test1() {

              OrderModel orderModel = OrderModel.builder()
                      .orderId(1L)
                      .amount(25.5)
                      .buyerUid(13201L)
                      .shippingAddress("上海")
                      .build();

              orderModel = orderRepository.save(orderModel);
              System.out.println(orderModel);
          }

          @Test
          public void test2() {
              BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
              NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder()
                      .withQuery(boolQueryBuilder);
              List<OrderModel> orderDocumentList = orderRepository.search(searchQueryBuilder.build()).getContent();
              System.out.println(JSON.toJSONString(orderDocumentList));
          }

          使用這個OrderRepository 來操作 ES 中的 OrderModel 數(shù)據(jù)。我們這里并沒有手動創(chuàng)建OrderModel 對應的索引,由 elasticsearch 默認生成。

          4、kibana 可視化控制臺

          安裝 kibana,比較簡單,這里就不在累述了。先下載kibana安裝包,再解壓

          # bin目錄下,執(zhí)行啟動腳本

          ./kibana

          瀏覽器訪問:http://localhost:5601/app/kibana#/dev_tools/console?_g=()

          可以看到剛才執(zhí)行單元測試,創(chuàng)建的索引記錄。


          5、項目源碼地址

          https://github.com/aalansehaiyang/spring-boot-bulking  

          模塊:spring-boot-bulking-elasticsearch


          推薦閱讀:
          數(shù)據(jù)庫連接池為什么首選Druid
          億級系統(tǒng)的Redis緩存如何設計
          學會這10個設計原則,離架構師又進了一步
          Spring Boot 集成 Kafka

          互聯(lián)網全棧架構

          瀏覽 38
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美大奶熟妇 | 国产高潮 视频 | 丁香五月激情综合婷婷 | 欧美成人在线18岁勿进 | 亚洲无码视频网站 |