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

袁庭新ES系列15節(jié)|Elasticsearch客戶端基礎操作

這篇具有很好參考價值的文章主要介紹了袁庭新ES系列15節(jié)|Elasticsearch客戶端基礎操作。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

上一章節(jié)我們介紹了搭建Elasticsearch集群相關的知識。那么又該如何來操作Elasticsearch集群呢?在ES官網(wǎng)中提供了各種語言的客戶端,我們在項目開發(fā)過程中有多種Elasticsearch版本和連接客戶端可以選擇,那么他們有什么區(qū)別?這一章節(jié)袁老師帶領大家來學習Elasticsearch客戶端相關的內(nèi)容。

袁庭新ES系列15節(jié)|Elasticsearch客戶端基礎操作,elasticsearch,袁庭新,分布式,搜索引擎,大數(shù)據(jù),java,微服務

一. ES客戶端介紹

在Elasticsearch官網(wǎng)中提供了各種語言的客戶端:Elasticsearch Clients | Elastic。


客戶端

優(yōu)點

缺點

說明

Java Low Level Rest Client

與ES版本之間沒有關系,適用于作為所有版本ES的客戶端

低級別的REST客戶端,通過HTTP與集群交互,用戶需自己編組請求JSON串,及解析響應JSON串

不建議使用

Java High Level Rest Client

官方推出的,版本與ES同步更新

使用的版本需要保持和ES服務端的版本一致,否則會有版本問題

強烈推薦使用。基于Low Level Rest Client,它提供了更多的接口。注意:7.15版本之后將被棄用

TransportClient

啟動速度快,輕量級,可創(chuàng)建極多連接,與應用程序解耦;推薦使用原生的,ES本身就很簡單,靈活性很高

JAR包版本需與ES集群版本一致,ES集群升級,客戶端也跟著升級到相同版本

不建議使用。過時產(chǎn)品,7版本之后不再支持

Elasticsearch Java API Client

最新的ES客戶端。Elasticsearch Java API Client通過API的方式來組裝請求數(shù)據(jù),避免直接編寫JSON字符串

文檔少

使用人較少

注意點擊進入后,選擇版本到6.2.4版本 ,因為我們之前按照的都是6.2.4版本講解的。進入后可以通過官方文檔了解和學習Java客戶端相關的知識。

二. 搭建工程環(huán)境

1.創(chuàng)建一個Spring Initalizr類型的項目,項目名稱設置為【es-client】。

袁庭新ES系列15節(jié)|Elasticsearch客戶端基礎操作,elasticsearch,袁庭新,分布式,搜索引擎,大數(shù)據(jù),java,微服務

2.創(chuàng)建項目時,勾選Lombok、Spring Boot DevTools和Spring Web依賴。

袁庭新ES系列15節(jié)|Elasticsearch客戶端基礎操作,elasticsearch,袁庭新,分布式,搜索引擎,大數(shù)據(jù),java,微服務

注意:這里我們直接導入了SpringBoot的啟動器,方便后續(xù)講解。

3.將resource目錄下自動生成的application.properties文件修改成application.yml。

4.在項目的pom.xml文件中手動引入Elasticsearch的High-level-Rest-Client等相關的依賴。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.yx</groupId>
    <artifactId>es-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>es-client</name>
    <description>es-client</description>
    <properties>
        <java.version>11</java.version>
    </properties>
  
    <dependencies>
      
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
      
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
      
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
      
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>
      
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>
      
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.8.1</version>
        </dependency>
      
        <!-- Apache開源組織提供的用于操作Java Bean的工具包 -->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.1</version>
        </dependency>
      
        <!-- ES高級Rest Client -->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>6.4.3</version>
        </dependency>
      
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.4.3</version>
        </dependency>
      
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
      
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

三. 索引庫及映射

創(chuàng)建索引庫的同時,我們也會創(chuàng)建type及其映射關系,但是這些操作不建議使用Java客戶端完成,原因如下:

  • 索引庫和映射往往是初始化時完成,不需要頻繁操作,不如提前配置好。
  • 官方提供的創(chuàng)建索引庫及映射API非常繁瑣,需要通過字符串拼接JSON結(jié)構(gòu)。

因此,這些操作建議還是使用我們之前學習的Rest風格API去實現(xiàn)。

在項目的com.yx.pojo包下創(chuàng)建Product商品類,以這樣一個商品數(shù)據(jù)為例來創(chuàng)建索引庫。

package com.yx.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product {
    private Long id; // 主鍵
    private String title; // 標題
    private String category; // 分類
    private String brand; // 品牌
    private Double price; // 價格
    private String images; // 圖片地址
}

分析一下數(shù)據(jù)結(jié)構(gòu):

屬性

描述

id

可以認為是主鍵,將來判斷數(shù)據(jù)是否重復的標識,不分詞,可以使用keyword類型

title

搜索字段,需要分詞,可以用text類型

category

商品分類,這個是整體,不分詞,可以使用keyword類型

brand

品牌,與分類類似,不分詞,可以使用keyword類型

price

價格,這個是double類型

images

圖片,用來展示的字段,不搜索,index為false,不分詞,可以使用keyword類型

使用Kibana控制臺向集群中創(chuàng)建yx索引庫并編寫映射配置(如果之前創(chuàng)建過yx索引庫則先刪除)。

PUT /yx
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  },
  "mappings": {
    "product": {
      "properties": {
        "id": {
          "type": "keyword"
        },
        "title": {
          "type": "text",
          "analyzer": "ik_max_word"
        },
        "category": {
          "type": "keyword"
        },
        "brand": {
          "type": "keyword"
        },
        "price": {
          "type": "double"
        },
        "images": {
          "type": "keyword",
          "index":  false
        }
      }
    }
  }
}

四. 索引數(shù)據(jù)操作

有了索引庫之后,我們接下來看看如何對索引庫中的數(shù)據(jù)進行增刪改查操作。操作MySQL數(shù)據(jù)庫:

1.獲取數(shù)據(jù)庫連接。

2.完成數(shù)據(jù)的增刪改查操作。

3.釋放資源。

1.初始化客戶端

對索引庫做任何操作,都需要通過RestHighLevelClient客戶端來完成。

1.在項目的test測試文件夾下創(chuàng)建com.yx.es包,并在該包下創(chuàng)建一個ElasticsearchTests測試類。

2.然后在ElasticsearchTests類中編寫RestHighLevelClient客戶端的初始化方法init()和關閉方法close()。

package com.yx.es;
import com.google.gson.Gson;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.junit.After;
import org.junit.Before;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.IOException;

@SpringBootTest
public class ElasticsearchTests {
    private RestHighLevelClient restHighLevelClient;
    // JSON工具
    private Gson gson = new Gson();

    /** 初始化客戶端 */
    @Before
    public void init() {
        RestClientBuilder restClientBuilder = RestClient.builder(
            new HttpHost("127.0.0.1", 9201, "http"),
            new HttpHost("127.0.0.1", 9202, "http"),
            new HttpHost("127.0.0.1", 9203, "http")
        );
        restHighLevelClient = new RestHighLevelClient(restClientBuilder);
    }

    /** 關閉客戶端 */
    @After
    public void close() throws IOException {
        // 關閉客戶端
        restHighLevelClient.close();
    }
}

2.新增文檔

新增文檔的實現(xiàn)是,先將數(shù)據(jù)封裝到POJO對象中,然后通過restHighLevelClient對象來向索引庫中新增數(shù)據(jù)。

2.1.新增文檔實現(xiàn)

1.在ElasticsearchTests類中編寫新增文檔的insert()方法。

/** 新增文檔 */
@Test
public void insert() throws IOException {
    // 1.文檔數(shù)據(jù)
    Product product = new Product();
    product.setId(1L);
    product.setTitle("華為P60震撼發(fā)布");
    product.setCategory("手機");
    product.setBrand("華為");
    product.setPrice(6999.99);
    product.setImages("http://image.huawei.com/1.jpg");

    // 2.將文檔數(shù)據(jù)轉(zhuǎn)換為JSON格式
    String source = gson.toJson(product);

    // 3.創(chuàng)建索引請求對象,訪問哪個索引庫、哪個type、指定文檔ID
    IndexRequest request = new IndexRequest("yx", "product", product.getId().toString());
    request.source(source, XContentType.JSON);

    // 4.發(fā)送請求
    IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
    System.err.println(response);
}

2.運行insert()方法,輸出結(jié)果見下:

IndexResponse[index=yx,type=product,id=1,version=2,result=updated,seqNo=1,primaryTerm=1,shards={"total":2,"successful":2,"failed":0}]

3.運行insert()方法可能會報錯,具體解決方案見下。

2.2.新增文檔異常

1.如果導入Elasticsearch依賴時不指定其版本,可能導致找不到XContentType類。解決的方案就是在pom.xml文件中手動添加Elasticsearch對應版本的依賴,比如手動指定Elasticsearch的版本為6.4.3。如果沒有這個問題,則忽略此步驟。

<dependency>
  <groupId>org.elasticsearch</groupId>
  <artifactId>elasticsearch</artifactId>
  <version>6.4.3</version>
</dependency>

2.如果運行insert()方法提示java.lang.NullPointerException空指針異常,則可能的原因是@Test注解的包導入錯誤,注意導入的包是org.junit.Test而非org.junit.jupiter.api.Test。

3.查看文檔

根據(jù)Rest風格,查看文檔是根據(jù)文檔id進行GET查詢操作,難點是對結(jié)果的解析。

1.在ElasticsearchTests類中編寫查看文檔的select()方法。

/** 查看文檔 */
@Test
public void select() throws IOException {
    // 創(chuàng)建GET請求并指定id
    GetRequest request = new GetRequest("yx", "product", "1");
    // 查詢,得到響應
    GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT);
    // 獲得響應結(jié)果數(shù)據(jù)
    String source = response.getSourceAsString();
    // 轉(zhuǎn)化為JSON數(shù)據(jù)
    Product product = gson.fromJson(source, Product.class);

    System.err.println(product);
}

2.運行select()方法,輸出結(jié)果見下:

Product(id=1, title=華為P60震撼發(fā)布, category=手機, brand=華為, price=6999.99, images=http://image.huawei.com/1.jpg)

4.修改文檔

新增文檔時,如果傳遞的id是已經(jīng)存在的,則會完成修改文檔操作,如果id不存在,則是新增文檔操作。

1.在ElasticsearchTests類中編寫修改文檔的update()方法。

/** 修改文檔 */
@Test
public void update() throws IOException {
    // 1.文檔數(shù)據(jù)
    Product product = new Product();
    product.setId(1L); // id存在則為修改操作
    product.setTitle("華為P60直降1000");
    product.setPrice(5999.99);

    // 2.將文檔數(shù)據(jù)轉(zhuǎn)換為JSON格式
    String source = gson.toJson(product);

    // 3.創(chuàng)建索引請求對象,訪問哪個索引庫、哪個type、指定文檔ID
    IndexRequest request = new IndexRequest("yx", "product", product.getId().toString());
    request.source(source, XContentType.JSON);
    
	// 4.發(fā)送請求
    IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
    System.err.println(response);
}

2.運行update()方法,輸出結(jié)果見下:

IndexResponse[index=yx,type=product,id=1,version=2,result=updated,seqNo=1,primaryTerm=1,shards={"total":2,"successful":2,"failed":0}]

5.刪除文檔

根據(jù)id刪除文檔。

1.在ElasticsearchTests類中編寫刪除文檔的delete()方法。

/** 刪除文檔 */
@Test
public void delete() throws IOException {
    // 準備刪除的請求,參數(shù)為id
    DeleteRequest request = new DeleteRequest("yx", "product", "1");
    // 發(fā)起請求
    DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
    System.err.println(response);
}

2.運行delete()方法,輸出結(jié)果見下:

DeleteResponse[index=yx,type=product,id=1,version=3,result=deleted,shards=ShardInfo{total=2, successful=2, failures=[]}]

五. 結(jié)語

Elasticsearch客戶端基礎部分的內(nèi)容袁老師就給大家介紹完了?;仡櫹逻@一章節(jié)我們學習的主要內(nèi)容,介紹了ES客戶端項目工程搭建、索引庫及映射、索引數(shù)據(jù)操作,主要重點介紹了索引數(shù)據(jù)的增刪改查操縱。關于ES客戶端基礎部分的內(nèi)容就介紹到這里,下一章節(jié)袁老師帶領大家學習Elasticsearch客戶端高級操作部分的內(nèi)容。

今天的內(nèi)容就分享到這里吧。關注「袁庭新」,干貨天天都不斷!

袁庭新ES系列15節(jié)|Elasticsearch客戶端基礎操作,elasticsearch,袁庭新,分布式,搜索引擎,大數(shù)據(jù),java,微服務文章來源地址http://www.zghlxwxcb.cn/news/detail-857214.html

到了這里,關于袁庭新ES系列15節(jié)|Elasticsearch客戶端基礎操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • es(Elasticsearch)客戶端Elasticsearch-head安裝使用(04Elasticsearch-head安裝篇)

    es(Elasticsearch)客戶端Elasticsearch-head安裝使用(04Elasticsearch-head安裝篇)

    elasticsearch-head是一款專門針對于elasticsearch的客戶端工具,用來展示數(shù)據(jù)。elasticsearch-head是基于JavaScript語言編寫的,可以使用npm部署,npm是Nodejs下的包管理器 安裝方式利用npm和nodejs進行安裝啟動,github中給出的安裝方法也是這種,本文就是以這種方式進行解說 es(Elasticsearc

    2024年01月17日
    瀏覽(33)
  • spring data elasticsearch使用7.x客戶端兼容es 8.x和使用ssl構(gòu)建RestHighLevelClient

    es在7.x中默認加入elastic security組件所以java client需要使用ssl連接es server. es 8.x 中廢棄了 RestHighLevelClient ,使用新版的 java api client ,但是spring data elasticsearch還未更新到該版本.所以需要兼容es 8.x 如下是RestHighLevelClient構(gòu)建方法: spring data elasticsearch客戶端依賴(基于spring boot2.7使用最新

    2024年02月13日
    瀏覽(27)
  • 【Elasticsearch學習筆記五】es常用的JAVA API、es整合SpringBoot項目中使用、利用JAVA代碼操作es、RestHighLevelClient客戶端對象

    目錄 一、Maven項目集成Easticsearch 1)客戶端對象 2)索引操作 3)文檔操作 4)高級查詢 二、springboot項目集成Spring Data操作Elasticsearch 1)pom文件 2)yaml 3)數(shù)據(jù)實體類 4)配置類 5)Dao數(shù)據(jù)訪問對象 6)索引操作 7)文檔操作 8)文檔搜索 三、springboot項目集成bboss操作elasticsearch

    2023年04月09日
    瀏覽(37)
  • es相關的官方客戶端與spring客戶端對比與介紹

    es相關的官方客戶端與spring客戶端對比與介紹

    es提供的 TransportClient 傳統(tǒng)的客戶端,基于TCP傳輸協(xié)議與Elasticsearch通信。 已經(jīng)被棄用,不推薦使用。 適用于Elasticsearch 5.x及以前的版本 因為Elasticsearch 6.x及以上版本已不再支持TCP Transport協(xié)議,TransportClient無法連接Elasticsearch集群。 RestHighLevelClient 是一個高級的REST客戶端,主要用于與

    2024年02月02日
    瀏覽(24)
  • Scala連接ES客戶端

    大家好,我是楚生輝,在未來的日子里我們一起來學習大數(shù)據(jù)相關的技術,一起努力奮斗,遇見更好的自己! 本文詳細的介紹了如何使用Scala語言連接上Elasticsearch客戶端,有需要的小伙伴可以自行獲取與學習~ 使用方法 寫入ES中,就要規(guī)劃,是寫入到一個索引中,還是分割索

    2024年01月21日
    瀏覽(22)
  • ES客戶端RestHighLevelClient的使用

    ES客戶端RestHighLevelClient的使用

    默認情況下,ElasticSearch使用兩個端口來監(jiān)聽外部TCP流量。 9200端口:用于所有通過HTTP協(xié)議進行的API調(diào)用。包括搜索、聚合、監(jiān)控、以及其他任何使用HTTP協(xié)議的請求。所有的客戶端庫都會使用該端口與ElasticSearch進行交互。 9300端口:是一個自定義的二進制協(xié)議,用于集群中各

    2024年02月03日
    瀏覽(21)
  • java用es客戶端創(chuàng)建索引

    先用java創(chuàng)建esClient 創(chuàng)建es索引模板 新建索引 批量插入數(shù)據(jù) 1.先批量生成數(shù)據(jù) 2批量導入方法

    2024年02月11日
    瀏覽(16)
  • 網(wǎng)絡通信(15)-C#TCP客戶端掉線重連實例

    網(wǎng)絡通信(15)-C#TCP客戶端掉線重連實例

    本文上接前面的文章使用Socket在C#語言環(huán)境下完成TCP客戶端的掉線重連實例。 掉線重連需要使用心跳包發(fā)送測試網(wǎng)絡的狀態(tài),進而進入重連循環(huán)線程。 前面實例完成的功能: 客戶端與服務器連接,實現(xiàn)實時刷新狀態(tài)。 客戶端接收服務器的數(shù)據(jù)。 客戶端發(fā)送給服務器的數(shù)據(jù)。

    2024年01月23日
    瀏覽(22)
  • 【ES實戰(zhàn)】ES創(chuàng)建Transports客戶端時間過長分析

    2023年10月19日 在創(chuàng)建ES Transport客戶端的時,當出現(xiàn)以下場景時,影響連接速度。 使用ES Transport 客戶端創(chuàng)建與集群的鏈接。 連接地址里面有不存在的IP 在增加ES節(jié)點時,采用逐個增加的方式 整個建立鏈接的過程會非常耗時。 采用jar依賴如下 創(chuàng)建連接代碼如下 輸出結(jié)果 是否可

    2024年02月07日
    瀏覽(25)
  • Elasticsearch--客戶端

    Elasticsearch--客戶端

    語言無關 ? ?java最常用的客戶端是Java Client、Java Rest Client、Java Transport Client 從es7.17開始,官方推出Java Client,并且將Java Rest Client標為Deprecated(過期) 要求jdk至少要jdk8 具體用法再看===》 ?Java Rest Client分為: Java Low level Rest Client Java High level Rest Client 在es7.15的時候過期的 R

    2024年02月16日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包