<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>

          Elasticsearch 保姆級入門篇

          共 9907字,需瀏覽 20分鐘

           ·

          2023-08-24 03:15

          Elasticsearch 是一個分布式的、面向生產(chǎn)規(guī)模工作負(fù)載優(yōu)化的搜索引擎。

          Kibana 可以將 Elasticsearch 中的數(shù)據(jù)轉(zhuǎn)化為直觀的圖表、圖形和儀表盤。

          這篇文章,您將學(xué)習(xí)本地安裝 Elasticsearch 和 Kibana,以及使用開發(fā)工具/ Java SDK 創(chuàng)建索引和搜索數(shù)據(jù)。

          1 本地安裝

          1.1 創(chuàng)建網(wǎng)絡(luò)

          我們需要創(chuàng)建一個供 Elasticsearch 和 Kibana 使用的 network。這個 network 將被用于 Elasticsearch 和 Kibana 之間的通信。

          docker network create elastic

          1.2 安裝 ES

          拉取 Elasticsearch 鏡像

          docker pull docker.elastic.co/elasticsearch/elasticsearch:{version}

          這里的版本 version  ,我們選?。?code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(234, 84, 41);">8.9.0 。

          docker pull docker.elastic.co/elasticsearch/elasticsearch:8.9.0

          啟動 docker elasticsearch 鏡像

          docker run --name elasticsearch --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -t docker.elastic.co/elasticsearch/elasticsearch:8.9.0

          進(jìn)入ES容器,修改 elasticsearch 用戶密碼

          bin/elasticsearch-reset-password --username elastic -i

          1.3 安裝 Kibana

          拉取 Kibana 鏡像

          docker pull docker.elastic.co/kibana/kibana:8.9.0

          啟動 Kibana 鏡像

          docker run --name kibana --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.9.0

          因為啟動安裝 Kibana ,需要 token , 所以進(jìn)入 elasticsearch 容器 ,執(zhí)行:

          bin/elasticsearch-create-enrollment-token -s kibana

          輸入 token 之后,刷新頁面,進(jìn)入登錄頁面:

          2 接口測試

          我們可以使用 Kibana Dev tools 來進(jìn)行接口測試。

          2.1 添加

          向索引添加單個文檔,提交一個 HTTP POST 請求,目標(biāo)是該索引。

          POST /customer/_doc/1
          {
            "firstname""Jennifer",
            "lastname""Walters"
          }

          該請求會自動創(chuàng)建名為customer的索引(如果不存在),然后添加一個 ID 為 1的新文檔,同時存儲并建立firstnamelastname字段的索引。

          新文檔可以立即從集群中的任何節(jié)點獲取。您可以使用 GET 請求來檢索它,請求中需指定其文檔 ID :

          GET /customer/_doc/1

          要一次性添加多個文檔,請使用 _bulk API。批量數(shù)據(jù)必須是以換行分隔的 JSON(NDJSON)格式。每一行必須以換行字符(\n)結(jié)尾,包括最后一行。

          PUT customer/_bulk
          "create": { } }
          "firstname""Monica","lastname":"Rambeau"}
          "create": { } }
          "firstname""Carol","lastname":"Danvers"}
          "create": { } }
          "firstname""Wanda","lastname":"Maximoff"}
          "create": { } }
          "firstname""Jennifer","lastname":"Takeda"}

          2.2 搜索

          已索引的文檔可以在準(zhǔn)實時的情況下進(jìn)行搜索。下面的搜索將在customer索引中匹配所有名為 Jennifer 的顧客。

          GET customer/_search
          {
            "query" : {
              "match" : { "firstname""Jennifer" }
            }
          }

          2.3 視圖

          進(jìn)入 Kibana Data Views :

          然后創(chuàng)建數(shù)據(jù)視圖 :

          創(chuàng)建數(shù)據(jù)視圖之后,可以在 Analytics > Discover 查看索引數(shù)據(jù)。

          3 Java SDK 實戰(zhàn)

          3.1 依賴

          <dependency>
              <groupId>co.elastic.clients</groupId>
              <artifactId>elasticsearch-java</artifactId>
              <version>8.9.0</version>
          </dependency>

          <dependency>
              <groupId>io.github.hakky54</groupId>
              <artifactId>sslcontext-kickstart</artifactId>
              <version>7.1.0</version>
          </dependency>

          <dependency>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-databind</artifactId>
              <version>2.12.3</version>
          </dependency>

          <dependency>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-core</artifactId>
              <version>2.12.3</version>
          </dependency>

          <dependency>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-annotations</artifactId>
              <version>2.12.3</version>
          </dependency>

          <dependency>
              <groupId>jakarta.json</groupId>
              <artifactId>jakarta.json-api</artifactId>
              <version>2.0.1</version>
          </dependency>

          <!-- 強(qiáng)制走高版本 ,防止和springboot 依賴沖突  -->
          <dependency>
              <groupId>org.elasticsearch.client</groupId>
              <artifactId>elasticsearch-rest-client</artifactId>
              <version>8.9.0</version>
          </dependency>

          3.2 創(chuàng)建客戶端

          1、通過用戶名和密碼創(chuàng)建客戶端

          RestClientBuilder builder = RestClient.builder(new HttpHost("localhost"9200"https"));

          final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
          credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic""ilxw@19841201"));

          // Elasticsearch 提供了 Https 服務(wù),創(chuàng)建 client 建立 SSL 鏈接時沒有做證書驗證 ;
          SSLFactory sslFactory = SSLFactory.builder().withUnsafeTrustMaterial().withUnsafeHostnameVerifier().build();
          builder = builder.setHttpClientConfigCallback(
                             httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)
                                           setSSLContext(sslFactory.getSslContext())
                                          .setSSLHostnameVerifier(sslFactory.getHostnameVerifier())
                  );

          RestClient restClient = builder.build();

          // Create the transport with a Jackson mapper
          ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());

          // And create the API client
          ElasticsearchClient esClient = new ElasticsearchClient(transport);

          2、通過 apikey 創(chuàng)建客戶端

          我們在安全目錄的管理頁面,創(chuàng)建 API key ,如下圖:

          示例代碼如下:

          // 自己創(chuàng)建的 apikey 
          String apiKey = "cnRVUy1Ja0JZYUtuSTRuMG1oRkk6RVFSdTk2T2NRb1cyYVdLRTB4TjktQQ==";

          RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "https"));

          SSLFactory sslFactory = SSLFactory.builder().withUnsafeTrustMaterial().withUnsafeHostnameVerifier().build();

          RestClient restClient = builder.setDefaultHeaders(new Header[]{new BasicHeader("Authorization""ApiKey " + apiKey)}).setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setSSLContext(sslFactory.getSslContext()).setSSLHostnameVerifier(sslFactory.getHostnameVerifier())).build();

          // Create the transport with a Jackson mapper
          ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());

          // And create the API client
          ElasticsearchClient esClient = new ElasticsearchClient(transport);

          3.3 創(chuàng)建文檔

          創(chuàng)建索引名為 products ,新建一個文檔 id 為 1 。

          ProductPo product = new ProductPo(1"Bag"42);

          IndexRequest<Object> indexRequest = new IndexRequest.Builder<>().index("products").id(String.valueOf(product.getId())).document(product).build();

          IndexResponse response = esClient.index(indexRequest);

          System.out.println("Indexed with version " + response.version());

          3.4 查詢文檔

          GetResponse<ProductPo> response = esClient.get(g -> g
                          .index("products")
                          .id(String.valueOf(1)),
                  ProductPo.class
          );

          if (response.found()) {
              ProductPo product = response.source();
              System.out.println("Product name " + product.getName());
          else {
              System.out.println("Product not found");
          }

          3.5 修改文檔

           Map<String, Object> doc = new HashMap<String, Object>();
           // 文檔產(chǎn)品名稱調(diào)整為 my bike
           doc.put("name""my bike");
           doc.put("price"100);

           BulkOperation op = new BulkOperation.Builder().update(
                         i -> i.action(new UpdateAction.Builder<>().doc(doc).docAsUpsert(true).build()).id("1"))
                          .build();

             List<BulkOperation> list = Collections.singletonList(op);
             BulkResponse response = esClient.bulk(bulkBuilder -> bulkBuilder.index("products").operations(list));

          3.6 刪除文檔

          esClient.delete(d -> d.index("products").id("1"));

          參考文檔:

          1、Elasticsearch 官方文檔:

          https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/getting-started-java.html

          2、Github文檔

          https://github.com/elastic/elasticsearch

          瀏覽 220
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  91重口猎奇成人网站 | 日本中文字幕A√ | 丁香五月天婷婷 | 99观看在线视频 | 丁香五月激情在线 |