国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

模板網(wǎng)站建設(shè)報(bào)價(jià)網(wǎng)絡(luò)營(yíng)銷比較常用的營(yíng)銷模式

模板網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷比較常用的營(yíng)銷模式,網(wǎng)絡(luò)銷售有限公司,怎么做淘寶客網(wǎng)站優(yōu)化文章目錄 前言一、對(duì) Java RestClient 的認(rèn)識(shí)1.1 什么是 RestClient1.2 RestClient 核心類:RestHighLevelClient 二、使用 Java RestClient 操作索引庫(kù)2.1 根據(jù)數(shù)據(jù)庫(kù)表編寫創(chuàng)建 ES 索引的 DSL 語(yǔ)句2.2 初始化 Java RestClient2.2.1 在 Spring Boot 項(xiàng)目中引入 Rest…

文章目錄

  • 前言
  • 一、對(duì) Java RestClient 的認(rèn)識(shí)
    • 1.1 什么是 RestClient
    • 1.2 RestClient 核心類:RestHighLevelClient
  • 二、使用 Java RestClient 操作索引庫(kù)
    • 2.1 根據(jù)數(shù)據(jù)庫(kù)表編寫創(chuàng)建 ES 索引的 DSL 語(yǔ)句
    • 2.2 初始化 Java RestClient
      • 2.2.1 在 Spring Boot 項(xiàng)目中引入 `RestHighLevelClient` 的依賴
      • 2.2.2 編寫 HotelIndexTests 單元測(cè)試類,完成 RestHighLevelClient 的初始化
    • 2.3 創(chuàng)建索引庫(kù)
    • 2.4 刪除索引庫(kù)
    • 2.5 判斷索引庫(kù)是否存在
  • 三、使用 Java RestClient 實(shí)現(xiàn)對(duì)文檔的增刪改查
    • 3.1 新增文檔
    • 3.2 獲取文檔
    • 3.3 更新文檔
    • 3.4 刪除文檔
    • 3.5 批量導(dǎo)入文檔


前言

ElasticSearch 官方提供了各種不同語(yǔ)言的客戶端,用來(lái)操作 ES。這些客戶端的本質(zhì)就是組裝 DSL 語(yǔ)句,通過(guò) HTTP 請(qǐng)求發(fā)送給 ES 服務(wù)器。

官方文檔地址:https://www.elastic.co/guide/en/elasticsearch/client/index.html。

在本文中,我們將著重介紹 ElasticSearch Java 客戶端中的 RestClient,并演示如何使用它實(shí)現(xiàn)對(duì)索引庫(kù)和文檔的各種操作。

一、對(duì) Java RestClient 的認(rèn)識(shí)

1.1 什么是 RestClient

RestClient 是 ElasticSearch 提供的用于與 ElasticSearch 集群進(jìn)行通信的 Java 客戶端。它提供了一種簡(jiǎn)單而靈活的方式來(lái)執(zhí)行 REST 請(qǐng)求,并處理響應(yīng)。通過(guò) RestClient,我們可以輕松地在 Java 中操作 ElasticSearch。

在 ES 官方文檔中看到 Java 的 RestClient 分為 High level REST clientLow level REST client

它們之間的區(qū)別:

  1. High Level REST Client:

    • 面向?qū)ο?#xff1a;提供了更加面向?qū)ο蟮腁PI,簡(jiǎn)化了復(fù)雜的操作,使用起來(lái)更加方便。
    • 使用場(chǎng)景:適用于絕大多數(shù)的操作,特別是對(duì)于復(fù)雜的操作,比如查詢、索引、更新等。
  2. Low Level REST Client:

    • 更接近 HTTP 層:提供的是與 Elasticsearch REST API 一一對(duì)應(yīng)的方法,更加靈活,適用于特定場(chǎng)景的定制化需求。
    • 使用場(chǎng)景:適用于對(duì)于 Elasticsearch 提供的 REST API 進(jìn)行細(xì)粒度控制的情況,比如處理特殊的請(qǐng)求和響應(yīng)。

1.2 RestClient 核心類:RestHighLevelClient

RestHighLevelClient 是 Elasticsearch Java 客戶端中的高級(jí)客戶端,提供了更加方便和抽象的操作方式,適用于大多數(shù)的 Elasticsearch 操作。在使用 RestHighLevelClient 之前,需要?jiǎng)?chuàng)建一個(gè) RestClient 實(shí)例,并將其包裝在 RestHighLevelClient 中。

主要功能和特點(diǎn):

  1. 面向?qū)ο蟮牟僮?/strong>:RestHighLevelClient 提供了更加面向?qū)ο蟮?API,使得 Elasticsearch 操作更加符合 Java 開(kāi)發(fā)的習(xí)慣,易于理解和使用。

  2. 內(nèi)置序列化和反序列化:RestHighLevelClient 內(nèi)置了 Jackson 庫(kù),可以自動(dòng)序列化和反序列化 Elasticsearch 的請(qǐng)求和響應(yīng),無(wú)需手動(dòng)處理 JSON 數(shù)據(jù)。

  3. 復(fù)雜查詢支持:支持復(fù)雜的 Elasticsearch 查詢操作,如布爾查詢、范圍查詢、聚合查詢等。

  4. 錯(cuò)誤處理:提供了異常處理機(jī)制,能夠更好地捕獲和處理 Elasticsearch 操作中的錯(cuò)誤。

  5. 并發(fā)性:RestHighLevelClient 可以處理多個(gè)并發(fā)請(qǐng)求,是多線程安全的。

常用操作和方法:

以下是 RestHighLevelClient 類的一些常用操作和方法,通過(guò)這些方法可以實(shí)現(xiàn)對(duì) Elasticsearch 的索引庫(kù)和文檔的各種操作:

操作方法描述
索引文檔IndexResponse index(IndexRequest request, RequestOptions options)向指定索引插入文檔
獲取文檔GetResponse get(GetRequest request, RequestOptions options)根據(jù)文檔 ID 獲取文檔
刪除文檔DeleteResponse delete(DeleteRequest request, RequestOptions options)根據(jù)文檔 ID 刪除文檔
更新文檔UpdateResponse update(UpdateRequest request, RequestOptions options)根據(jù)文檔 ID 更新文檔
批量操作BulkResponse bulk(BulkRequest request, RequestOptions options)批量執(zhí)行操作
查詢SearchResponse search(SearchRequest request, RequestOptions options)執(zhí)行搜索查詢
聚合查詢SearchResponse search(SearchRequest request, RequestOptions options)執(zhí)行聚合查詢
清理滾動(dòng)ClearScrollResponse clearScroll(ClearScrollRequest request, RequestOptions options)清理滾動(dòng)上下文

以上只是 RestHighLevelClient 類的一部分方法,更多詳細(xì)的操作和方法請(qǐng)參考 官方文檔。這些方法提供了豐富的功能,可以滿足各種 Elasticsearch 操作的需求。

二、使用 Java RestClient 操作索引庫(kù)

2.1 根據(jù)數(shù)據(jù)庫(kù)表編寫創(chuàng)建 ES 索引的 DSL 語(yǔ)句

當(dāng)需要將已有的數(shù)據(jù)庫(kù)數(shù)據(jù)導(dǎo)入到 Elasticsearch 索引中時(shí),首先需要定義好 Elasticsearch 索引的 mapping 結(jié)構(gòu),這樣 Elasticsearch 才能正確解析和存儲(chǔ)數(shù)據(jù)。

在這個(gè)例子中,我們有一個(gè)名為 hotel 的數(shù)據(jù)庫(kù)表,它有各種不同類型的字段,包括文本、數(shù)字、地理坐標(biāo)等。讓我們逐步解釋如何根據(jù)數(shù)據(jù)庫(kù)表的結(jié)構(gòu)編寫創(chuàng)建 Elasticsearch 索引的 DSL(Domain Specific Language)語(yǔ)句。

  1. 數(shù)據(jù)庫(kù)表結(jié)構(gòu)分析

首先,讓我們來(lái)看一下 hotel 表的結(jié)構(gòu):

+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id        | bigint       | NO   | PRI | NULL    |       |
| name      | varchar(255) | NO   |     | NULL    |       |
| address   | varchar(255) | NO   |     | NULL    |       |
| price     | int          | NO   |     | NULL    |       |
| score     | int          | NO   |     | NULL    |       |
| brand     | varchar(32)  | NO   |     | NULL    |       |
| city      | varchar(32)  | NO   |     | NULL    |       |
| star_name | varchar(16)  | YES  |     | NULL    |       |
| business  | varchar(255) | YES  |     | NULL    |       |
| latitude  | varchar(32)  | NO   |     | NULL    |       |
| longitude | varchar(32)  | NO   |     | NULL    |       |
| pic       | varchar(255) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+

這個(gè)表包含了以下字段:

  • id:長(zhǎng)整型(bigint
  • name:文本字符串(varchar),用于存儲(chǔ)酒店名稱
  • address:文本字符串,用于存儲(chǔ)酒店地址
  • price:整數(shù)(int),表示酒店價(jià)格
  • score:整數(shù),表示酒店評(píng)分
  • brand:文本字符串,用于存儲(chǔ)酒店品牌
  • city:文本字符串,用于存儲(chǔ)城市名稱
  • star_name:文本字符串,用于存儲(chǔ)星級(jí)名稱(可為空)
  • business:文本字符串,用于存儲(chǔ)營(yíng)業(yè)信息(可為空)
  • latitude:文本字符串,用于存儲(chǔ)緯度坐標(biāo)
  • longitude:文本字符串,用于存儲(chǔ)經(jīng)度坐標(biāo)
  • pic:文本字符串,用于存儲(chǔ)圖片路徑(可為空)
  1. 創(chuàng)建 Elasticsearch 索引的 DSL

現(xiàn)在,讓我們將上述數(shù)據(jù)庫(kù)表的結(jié)構(gòu)映射到 Elasticsearch 索引的 DSL 中:

PUT /hotel
{"mappings": {"properties": {"id": {"type": "long"},"name": {"type": "text","analyzer": "ik_max_word","copy_to": "all"},"address": {"type": "keyword","index": false},"price": {"type": "integer"},"score": {"type": "integer"},"brand": {"type": "keyword","copy_to": "all"},"city": {"type": "keyword"},"starName": {"type": "keyword"},"business": {"type": "keyword","copy_to": "all"},"location": {"type": "geo_point"},"pic": {"type": "keyword","index": false},"all": {"type": "text","analyzer": "ik_max_word"}}}
}

重要說(shuō)明:

  1. 地理坐標(biāo) (location) 字段:

在 MySQL 數(shù)據(jù)庫(kù)表中,地理坐標(biāo)是使用 latitudelongitude 兩個(gè)字段表示的。但在 Elasticsearch 中,我們使用 geo_point 類型來(lái)表示地理坐標(biāo)。

  • geo_point:由緯度(latitude)和經(jīng)度(longitude)確定的一個(gè)點(diǎn)。例如:“32.8752345, 120.2981576”。

補(bǔ)充:ES 中支持兩種地理坐標(biāo)數(shù)據(jù)類型

  • geo_point:由緯度(latitude)和經(jīng)度(longitude)確定的一個(gè)點(diǎn)。例如:"32.8752345, 120.2981576"。
  • geo_shape:有多個(gè)geo_point組成的復(fù)雜幾何圖形。例如一條直線:"LINESTRING (-77.03653 38.897676, -77.009051 38.889939)"。
  1. 字段拷貝:

字段拷貝的目的是在搜索時(shí),同時(shí)匹配多個(gè)字段。我們使用 copy_to 屬性將當(dāng)前字段拷貝到指定字段。這樣,在搜索時(shí),可以同時(shí)匹配 namebrandbusiness 字段。

示例:

"all": {"type": "text","analyzer": "ik_max_word"
},
"brand": {"type": "keyword","copy_to": "all"
}
  1. 映射規(guī)則總結(jié)

Elasticsearch 對(duì)不同類型的字段有不同的映射規(guī)則,以下是常見(jiàn)類型的映射規(guī)則:

  • 字符串 (textkeyword): text 用于全文搜索,支持分詞;keyword 用于精確匹配,不分詞。
  • 整數(shù) (integer): 用于存儲(chǔ)整數(shù)。
  • 長(zhǎng)整型 (long): 用于存儲(chǔ)長(zhǎng)整數(shù)。
  • 浮點(diǎn)數(shù) (float): 用于存儲(chǔ)浮點(diǎn)數(shù)。
  • 地理坐標(biāo) (geo_point): 用于存儲(chǔ)地理坐標(biāo)。
  • 日期 (date): 用于存儲(chǔ)日期時(shí)間。

通過(guò)正確定義索引的映射規(guī)則,我們可以更有效地利用 Elasticsearch 的搜索和分析功能。

2.2 初始化 Java RestClient

2.2.1 在 Spring Boot 項(xiàng)目中引入 RestHighLevelClient 的依賴

首先在 pom.xml 中引入依賴

<!--ElasticSearch 客戶端依賴-->
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.12.1</version>
</dependency>

此次引入的版本是 7.12.1 版本的,目的是與ElasticSearch 服務(wù)器的版本相同。刷新 Maven 之后,發(fā)現(xiàn) elasticsearch-rest-high-level-client依賴中某些組件的版本并不是7.12.1的:

其原因是 Spring Boot 已經(jīng)自動(dòng)為我們管理了一些依賴,其中就包括了elasticsearch,其版本就是 7.6.2的。


因此我們需要做的就是在 pom.xml 覆蓋這個(gè)配置,即在 properties 中指定版本為 7.12.1

再次刷新 Maven,就能夠發(fā)現(xiàn)所有組件的版本都是 7.12.1 了:

2.2.2 編寫 HotelIndexTests 單元測(cè)試類,完成 RestHighLevelClient 的初始化

@SpringBootTest
class HotelIndexTests {private RestHighLevelClient client;@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.248.128:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}/*** 測(cè)試初始化客戶端*/@Testvoid testInit() {System.out.println(client);}
}

對(duì)上述代碼的說(shuō)明:

  • 在上述代碼中,通過(guò) RestClient.builder 構(gòu)建了 RestHighLevelClient 實(shí)例,并指定了 ElasticSearch 服務(wù)器的地址為 http://192.168.248.128:9200。這是一個(gè)簡(jiǎn)單的單元測(cè)試,用于驗(yàn)證客戶端的初始化是否成功。
  • @BeforeEach 注解的方法中,我們創(chuàng)建了 RestHighLevelClient 的實(shí)例,而在 @AfterEach 注解的方法中,我們關(guān)閉了客戶端。這是為了保證測(cè)試用例執(zhí)行前后,客戶端都能夠正確地被初始化和關(guān)閉。
  • 在測(cè)試方法 testInit 中,我們簡(jiǎn)單地打印了客戶端對(duì)象,以驗(yàn)證其初始化是否成功。

在接下來(lái)的內(nèi)容中,我們將繼續(xù)使用編寫單元測(cè)試方法,執(zhí)行一系列對(duì) ElasticSearch 索引庫(kù)和文檔的操作。

2.3 創(chuàng)建索引庫(kù)

創(chuàng)建 hotel 索引庫(kù)會(huì)使用到前文根據(jù) hotle 表結(jié)構(gòu)編寫的 DSL mapping 映射,在Java代碼中,我們需要將其封裝成一個(gè)全局常量,例如,將其保存到名為 MAPPING_TEMPLATE 的常量字符串中:

public class HotelConstants {public static final String MAPPING_TEMPLATE = "{\n" +"  \"mappings\": {\n" +"    \"properties\": {\n" +"      \"id\": {\n" +"        \"type\": \"long\"\n" +"      },\n" +"      \"name\": {\n" +"        \"type\": \"text\",\n" +"        \"analyzer\": \"ik_max_word\",\n" +"        \"copy_to\": \"all\"\n" +"      },\n" +"      \"address\": {\n" +"        \"type\": \"keyword\",\n" +"        \"index\": false\n" +"      },\n" +"      \"price\": {\n" +"        \"type\": \"integer\"\n" +"      },\n" +"      \"score\": {\n" +"        \"type\": \"integer\"\n" +"      },\n" +"      \"brand\": {\n" +"        \"type\": \"keyword\",\n" +"        \"copy_to\": \"all\"\n" +"      },\n" +"      \"city\": {\n" +"        \"type\": \"keyword\"\n" +"      },\n" +"      \"starName\": {\n" +"        \"type\": \"keyword\"\n" +"      },\n" +"      \"business\": {\n" +"        \"type\": \"keyword\",\n" +"        \"copy_to\": \"all\"\n" +"      },\n" +"      \"location\": {\n" +"        \"type\": \"geo_point\"\n" +"      },\n" +"      \"pic\": {\n" +"        \"type\": \"keyword\",\n" +"        \"index\": false\n" +"      },\n" +"      \"all\": {\n" +"        \"type\": \"text\",\n" +"        \"analyzer\": \"ik_max_word\"\n" +"      }\n" +"    }\n" +"  }\n" +"}";
}

下面是創(chuàng)建索引庫(kù)的單元測(cè)試方:

    /*** 創(chuàng)建索引庫(kù)** @throws IOException 拋出異常*/@Testvoid testCreateHotelIndex() throws IOException {// 1. 創(chuàng)建 Request 對(duì)象CreateIndexRequest request = new CreateIndexRequest("hotel");// 2. 準(zhǔn)備請(qǐng)求參數(shù):DSL 語(yǔ)句request.source(MAPPING_TEMPLATE, XContentType.JSON);// 3. 發(fā)起請(qǐng)求client.indices().create(request, RequestOptions.DEFAULT);}

對(duì)上述代碼的說(shuō)明:

  1. 創(chuàng)建 CreateIndexRequest 對(duì)象,指定索引庫(kù)的名稱為 "hotel"。
  2. 準(zhǔn)備請(qǐng)求參數(shù),即 DSL 語(yǔ)句,使用 MAPPING_TEMPLATE 常量。
  3. 發(fā)起創(chuàng)建索引庫(kù)的請(qǐng)求,通過(guò) client.indices().create(request, RequestOptions.DEFAULT) 執(zhí)行。

這樣,我們就完成了通過(guò) Java RestClient 創(chuàng)建 ElasticSearch 索引庫(kù)的操作。在實(shí)際應(yīng)用中,創(chuàng)建索引庫(kù)是一個(gè)初始化工作,通常在應(yīng)用啟動(dòng)時(shí)執(zhí)行一次即可。

2.4 刪除索引庫(kù)

以下是使用 Java RestClient 刪除名為 “hotel” 的索引庫(kù)的單元測(cè)試方法:

/*** 刪除索引庫(kù)* @throws IOException 拋出異常*/
@Test
void testDeleteHotelIndex() throws IOException {// 1. 創(chuàng)建 Request 對(duì)象DeleteIndexRequest request = new DeleteIndexRequest("hotel");// 2. 發(fā)起請(qǐng)求client.indices().delete(request, RequestOptions.DEFAULT);
}

對(duì)上述代碼的說(shuō)明:

  1. 創(chuàng)建 DeleteIndexRequest 對(duì)象,指定要?jiǎng)h除的索引庫(kù)名稱為 “hotel”。
  2. 發(fā)起刪除索引庫(kù)的請(qǐng)求,通過(guò) client.indices().delete(request, RequestOptions.DEFAULT) 執(zhí)行。

這個(gè)方法主要用于清理測(cè)試環(huán)境或者在應(yīng)用退出時(shí)執(zhí)行,以確保數(shù)據(jù)的整潔和安全。

刪除索引庫(kù)的操作需要謹(jǐn)慎執(zhí)行,因?yàn)樗鼤?huì)將整個(gè)索引庫(kù)以及其中的所有文檔都刪除,且無(wú)法恢復(fù)。在實(shí)際應(yīng)用中,通常會(huì)設(shè)置一些安全機(jī)制來(lái)避免誤操作。

2.5 判斷索引庫(kù)是否存在

在 Elasticsearch 中,我們可以通過(guò) Java RestClient 來(lái)判斷指定的索引庫(kù)是否存在。以下是一個(gè)示例代碼:

@Test
void testExistsHotelIndex() throws IOException {// 1. 創(chuàng)建 GetIndexRequest 對(duì)象,指定要判斷是否存在的索引庫(kù)名稱為 "hotel"GetIndexRequest request = new GetIndexRequest("hotel");// 2. 發(fā)起請(qǐng)求,執(zhí)行判斷索引庫(kù)是否存在的操作boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);// 3. 打印判斷結(jié)果System.out.println(exists ? "索引庫(kù)存在" : "索引庫(kù)不存在");
}

在這個(gè)方法中,首先創(chuàng)建了一個(gè) GetIndexRequest 對(duì)象,指定了要判斷是否存在的索引庫(kù)名稱為 “hotel”。然后,通過(guò) client.indices().exists(request, RequestOptions.DEFAULT) 發(fā)起請(qǐng)求,執(zhí)行判斷索引庫(kù)是否存在的操作。最后,根據(jù)返回的布爾值,輸出相應(yīng)的提示信息。

這個(gè)方法通常用于在進(jìn)行其他操作之前,先判斷索引庫(kù)是否存在,以確保我們不會(huì)對(duì)不存在的索引庫(kù)執(zhí)行其他操作。

三、使用 Java RestClient 實(shí)現(xiàn)對(duì)文檔的增刪改查

3.1 新增文檔

在新增文檔之前,首先需要從數(shù)據(jù)庫(kù)中去查詢一條記錄,然后再將查詢到的記錄保存到 ES 文檔中。例如,現(xiàn)在有一條 id=61083的酒店數(shù)據(jù),我們需要把它查詢出來(lái),然后添加到文檔中:

首先同樣需要?jiǎng)?chuàng)建一個(gè)測(cè)試類HotelDocumentTests,并完成 RestHighLevelClient 的初始化。然后新增文檔的測(cè)試代碼如下:

@Test
void testAddDocument() throws IOException {// 根據(jù)id查詢酒店Hotel hotel = hotelService.getById(61083L);// 轉(zhuǎn)換為文檔類型HotelDoc hotelDoc = new HotelDoc(hotel);// 1. 準(zhǔn)備 Request 對(duì)象IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());// 2. 準(zhǔn)備 JSON 文檔request.source(JSON.toJSONString(hotelDoc), XContentType.JSON);// 3. 發(fā)送請(qǐng)求client.index(request, RequestOptions.DEFAULT);
}

對(duì)上述代碼的說(shuō)明:

  1. 根據(jù) ID 查詢酒店數(shù)據(jù): 使用 hotelService.getById(61083L) 方法從數(shù)據(jù)庫(kù)中根據(jù)酒店 ID(這里是 61083L)查詢酒店數(shù)據(jù)并封裝到 Hotel 對(duì)象中。

  2. 轉(zhuǎn)換為文檔類型: 將查詢到的 Hotel 類型轉(zhuǎn)換為HotelDoc文檔類型,因?yàn)閿?shù)據(jù)庫(kù)和文檔中表示經(jīng)緯度的方式不同。

  3. 準(zhǔn)備 IndexRequest 對(duì)象: 創(chuàng)建 IndexRequest 對(duì)象,指定索引庫(kù)名稱為 “hotel”,并設(shè)置文檔 ID 為酒店的 ID(使用 hotel.getId().toString() 獲取 ID 的字符串表示)。

  4. 準(zhǔn)備 JSON 文檔:HotelDoc 對(duì)象轉(zhuǎn)換為 JSON 格式的字符串,使用 JSON.toJSONString(hotelDoc) 實(shí)現(xiàn)轉(zhuǎn)換。

  5. 發(fā)送請(qǐng)求: 使用 client.index(request, RequestOptions.DEFAULT) 發(fā)送請(qǐng)求,將準(zhǔn)備好的文檔添加到索引庫(kù)中。

這個(gè)測(cè)試方法演示了如何通過(guò) Java RestClient 向 Elasticsearch 索引庫(kù)中新增文檔。

3.2 獲取文檔

獲取指定文檔的測(cè)試方法的代碼如下:

@Test
void testGetDocument() throws IOException {// 1. 創(chuàng)建 Request 對(duì)象GetRequest request = new GetRequest("hotel", "61083");// 2. 發(fā)送請(qǐng)求,獲取結(jié)果GetResponse response = client.get(request, RequestOptions.DEFAULT);// 3. 解析結(jié)果String json = response.getSourceAsString();// 4. 將字符串解析為 HotelDoc 對(duì)象HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);System.out.println(hotelDoc);
}

對(duì)該方法的詳細(xì)說(shuō)明:

  1. 創(chuàng)建 GetRequest 對(duì)象: 使用 GetRequest 對(duì)象指定索引庫(kù)名稱為 “hotel”,文檔 ID 為 “61083”。

  2. 發(fā)送請(qǐng)求,獲取結(jié)果: 使用 client.get(request, RequestOptions.DEFAULT) 發(fā)送請(qǐng)求,獲取包含文檔信息的 GetResponse 對(duì)象。

  3. 解析結(jié)果: 通過(guò) response.getSourceAsString() 獲取文檔內(nèi)容的 JSON 字符串表示。

  4. 將字符串解析為 HotelDoc 對(duì)象: 使用 JSON.parseObject(json, HotelDoc.class) 將獲取的 JSON 字符串解析為 HotelDoc 對(duì)象。

這個(gè)測(cè)試方法演示了如何通過(guò) Java RestClient 獲取 Elasticsearch 索引庫(kù)中指定文檔的信息。

3.3 更新文檔

更新文檔的測(cè)試方法的代碼如下:

@Test
void testUpdateDocument() throws IOException {// 1. 獲取 Request 對(duì)象UpdateRequest request = new UpdateRequest("hotel", "61083");// 2. 準(zhǔn)備參數(shù)request.doc("price", 1000,"score", 50);// 3. 發(fā)起請(qǐng)求client.update(request, RequestOptions.DEFAULT);
}

對(duì)該方法的詳細(xì)說(shuō)明:

  1. 獲取 UpdateRequest 對(duì)象: 使用 UpdateRequest 對(duì)象指定索引庫(kù)名稱為 “hotel”,文檔 ID 為 “61083”。

  2. 準(zhǔn)備參數(shù): 使用 request.doc(...) 方法準(zhǔn)備需要更新的字段及其對(duì)應(yīng)的新值。在這個(gè)例子中,更新了 “price” 字段為 1000,“score” 字段為 50。

  3. 發(fā)起請(qǐng)求: 使用 client.update(request, RequestOptions.DEFAULT) 發(fā)送更新請(qǐng)求。

這個(gè)測(cè)試方法演示了如何通過(guò) Java RestClient 更新 Elasticsearch 索引庫(kù)中的指定文檔。

3.4 刪除文檔

刪除指定文檔的單元測(cè)試方法的代碼如下:

@Testvoid testDeleteDocument() throws IOException {// 1. 獲取 Request 對(duì)象DeleteRequest request = new DeleteRequest("hotel", "61083");// 2. 發(fā)起請(qǐng)求client.delete(request, RequestOptions.DEFAULT);}

對(duì)該方法的詳細(xì)說(shuō)明:

  1. 獲取 DeleteRequest 對(duì)象: 使用 DeleteRequest 對(duì)象指定索引庫(kù)名稱為 “hotel”,文檔 ID 為 “61083”。

  2. 發(fā)起請(qǐng)求: 使用 client.delete(request, RequestOptions.DEFAULT) 發(fā)送刪除請(qǐng)求。

這個(gè)測(cè)試方法演示了如何通過(guò) Java RestClient 刪除 Elasticsearch 索引庫(kù)中的指定文檔。

3.5 批量導(dǎo)入文檔

在實(shí)際開(kāi)發(fā)中,我們不可能像上面那樣一條數(shù)據(jù)一條數(shù)據(jù)的導(dǎo)入到文檔中,而是需要批量的查詢數(shù)據(jù)庫(kù),然后將結(jié)果集批量的導(dǎo)入到文檔中,導(dǎo)入批量數(shù)據(jù)到文檔的測(cè)試方法如下:

@Test
void testBulkRequest() throws IOException {// 批量查詢酒店數(shù)據(jù)List<Hotel> hotels = hotelService.list();// 1. 創(chuàng)建 BulkRequestBulkRequest request = new BulkRequest();// 轉(zhuǎn)換為文檔類型 HotelDocfor (Hotel hotel : hotels) {HotelDoc hotelDoc = new HotelDoc(hotel);// 2. 準(zhǔn)備參數(shù),添加多個(gè)新增的 Requestrequest.add(new IndexRequest("hotel").id(hotel.getId().toString()).source(JSON.toJSONString(hotelDoc), XContentType.JSON));}// 3. 發(fā)起請(qǐng)求client.bulk(request, RequestOptions.DEFAULT);
}

對(duì)上述代碼的說(shuō)明:

  1. 批量查詢酒店數(shù)據(jù): 使用 hotelService.list() 批量獲取酒店數(shù)據(jù)。

  2. 創(chuàng)建 BulkRequest 對(duì)象: 使用 BulkRequest 對(duì)象準(zhǔn)備批量請(qǐng)求。

  3. 循環(huán)添加請(qǐng)求: 遍歷酒店數(shù)據(jù)列表,將每個(gè)酒店數(shù)據(jù)轉(zhuǎn)換為 HotelDoc 類型,并添加到 BulkRequest 中。

  4. 發(fā)起請(qǐng)求: 使用 client.bulk(request, RequestOptions.DEFAULT) 發(fā)送批量請(qǐng)求。

這個(gè)測(cè)試方法演示了如何通過(guò) Java RestClient 批量導(dǎo)入 Elasticsearch 索引庫(kù)中的文檔。批量導(dǎo)入通常能夠提高效率,特別是在處理大量數(shù)據(jù)時(shí)。

http://m.aloenet.com.cn/news/36668.html

相關(guān)文章:

  • 如何建設(shè)一個(gè)電影網(wǎng)站在線播放惡意點(diǎn)擊軟件哪個(gè)好
  • 安慶網(wǎng)站建設(shè)服務(wù)網(wǎng)蘇州關(guān)鍵詞搜索排名
  • 唐山醫(yī)療網(wǎng)站建設(shè)銷售平臺(tái)排名
  • 網(wǎng)站排名優(yōu)化在線培訓(xùn)百度云網(wǎng)盤網(wǎng)頁(yè)版登錄
  • 做外貿(mào)網(wǎng)哪些網(wǎng)站免費(fèi)代運(yùn)營(yíng)公司排行榜
  • 寧波北侖網(wǎng)站建設(shè)網(wǎng)絡(luò)營(yíng)銷和網(wǎng)絡(luò)推廣有什么區(qū)別
  • 玉環(huán)做企業(yè)網(wǎng)站百度學(xué)術(shù)搜索
  • 如何做免費(fèi)域名網(wǎng)站高級(jí)搜索引擎
  • 學(xué)校的二級(jí)網(wǎng)站怎么建設(shè)黑河seo
  • 網(wǎng)站鏈接做投票找個(gè)免費(fèi)的網(wǎng)站
  • 網(wǎng)站建設(shè)銷售培訓(xùn)語(yǔ)域名查詢ip138
  • 體驗(yàn)營(yíng)銷seo基礎(chǔ)優(yōu)化包括哪些內(nèi)容
  • 公司宣傳片ppt模板西安網(wǎng)絡(luò)優(yōu)化大的公司
  • wordpress網(wǎng)易云插件百度seo查詢收錄查詢
  • 俄羅斯做貨代的網(wǎng)站公司網(wǎng)站設(shè)計(jì)哪家好
  • 創(chuàng)建網(wǎng)站要多少錢seo競(jìng)價(jià)排名
  • 江門住房城鄉(xiāng)建設(shè)廳網(wǎng)站列舉常見(jiàn)的網(wǎng)絡(luò)營(yíng)銷工具
  • 做五金建材這幾個(gè)網(wǎng)站手機(jī)百度高級(jí)搜索
  • 代做廣聯(lián)達(dá) 的網(wǎng)站淺議網(wǎng)絡(luò)營(yíng)銷論文
  • 鹽田區(qū)網(wǎng)站建設(shè)百度網(wǎng)站ip地址
  • 專門做資產(chǎn)負(fù)債表結(jié)構(gòu)分析的網(wǎng)站上海市人大常委會(huì)
  • 賓利棋牌在哪個(gè)網(wǎng)站做的廣告成都seo服務(wù)
  • 免費(fèi)的視頻api接口seo排名計(jì)費(fèi)系統(tǒng)
  • 網(wǎng)站中英文轉(zhuǎn)換怎么做軟文標(biāo)題
  • 佛山專業(yè)建設(shè)網(wǎng)站平臺(tái)營(yíng)銷策劃方案怎么寫?
  • 網(wǎng)站備案接入商名稱seo計(jì)費(fèi)系統(tǒng)開(kāi)發(fā)
  • 廣州白云做網(wǎng)站濟(jì)寧百度推廣電話
  • 成都網(wǎng)站制作公司成人速成班有哪些專業(yè)
  • 黃驊港開(kāi)發(fā)區(qū)谷歌seo是什么意思
  • 網(wǎng)站建設(shè)演講稿全網(wǎng)營(yíng)銷系統(tǒng)1700元真實(shí)嗎