RESTHighLevelClient創建索引詳解

一、創建RESTHighLevelClient客戶端


// 添加以下依賴
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>${elasticsearch.version}</version>
</dependency>

// 通過以下代碼創建client
RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(
                new HttpHost("localhost", 9200, "http"),
                new HttpHost("localhost", 9201, "http")));

// 使用完client後需關閉資源
client.close();

在使用RESTHighLevelClient API時,首先需要創建一個client對象,這個對象在應用程序中應當是全局唯一的。可以將其聲明為單例,在整個應用程序上下文中重複使用。

二、創建索引


// 定義index名稱及屬性Mappings
// mappings: 在索引中預定義欄位及其數據類型
// Settings: 在索引中定義設置。例如,默認分片數和副本數
String index = "indexName";
String type = "typeName";
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
{
    builder.startObject("properties");
    {
        builder.startObject("fieldName");
        {
            builder.field("type", "text"); // 欄位類型
        }
        builder.endObject();
    }
    builder.endObject();
}
builder.endObject();
PutIndexTemplateRequest request = new PutIndexTemplateRequest("templateName");
request.settings(Settings.builder().put("index.number_of_shards", 1) // 分片數
        .put("index.number_of_replicas", 0)) // 副本數
        .mapping(type, builder);
CreateIndexRequest createIndexRequest = new CreateIndexRequest(index).settings(Settings.builder().put("index.number_of_shards", 1) // 分片數
        .put("index.number_of_replicas", 0)) // 副本數
        .mapping(type, builder);

// 同步調用,會阻塞當前線程直至操作完成
CreateIndexResponse createIndexResponse = client.indices().create(createIndexRequest, RequestOptions.DEFAULT);

// 非同步調用,需要設置監聽器
client.indices().createAsync(createIndexRequest, RequestOptions.DEFAULT, listener);

創建索引的過程可以分為兩個步驟:定義索引的屬性和創建索引。在定義索引屬性時,需要使用XContentBuilder來創建一個JSON對象,包含了所需的索引屬性。在創建完屬性後,就可以使用CreateIndexRequest或PutIndexTemplateRequest來創建索引。

三、添加數據


// 創建IndexRequest
IndexRequest request = new IndexRequest(index, type, "documentId");

// 使用Json數據填充IndexRequest
request.source(jsonMap);

// 同步請求添加數據
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);

// 非同步請求添加數據,需要設置監聽器
client.indexAsync(request, RequestOptions.DEFAULT, listener);

添加數據是通過創建一個IndexRequest對象來實現的,該對象有3個參數,這些參數分別是索引名稱,type和文檔ID。添加數據時可以設置數據源。可以將該源指定為Map,String或byte數組,以JSON格式表示。調用index方法將數據添加到指定的索引中。當數據添加完成後,將會獲得一個IndexResponse,該response包含了有關添加的數據的詳細信息,例如文檔的版本號。

四、更新數據


// 創建UpdateRequest,指定需要更新的文檔索引、類型和ID
UpdateRequest request = new UpdateRequest(index, type, "documentId");

// 配置需要更新的數據
request.doc(jsonMap);

// 進行同步請求更新
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);

// 非同步請求更新,需要設置監聽器
client.updateAsync(request, RequestOptions.DEFAULT, listener);

更新數據需要使用UpdateRequest對象,此對象的構造函數中需要傳遞索引的名稱,type和文檔ID。更新數據時需要配置更新後的數據,可以將其指定為Map,String或byte數組,以JSON格式表示。調用update方法將更新請求發送到ES。更新後,將會返回一個UpdateResponse,其中包含有關更新數據的詳細信息,例如文檔的版本號。

五、刪除數據


// 創建DeleteRequest,指定需要刪除的文檔索引、類型和ID
DeleteRequest request = new DeleteRequest(index, type, "documentId");

// 同步刪除數據
DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);

// 非同步刪除數據,需要設置監聽器
client.deleteAsync(request, RequestOptions.DEFAULT, listener);

刪除數據需要通過創建DeleteRequest對象來實現,該對象的構造函數中需要傳遞索引的名稱,類型和文檔ID。調用delete方法將刪除請求發送到ES。如果文檔刪除成功,則會返回一個DeleteResponse,其中包含有關已刪除文檔的詳細信息,例如文檔的版本號。

六、搜索數據


// 構建SearchSourceBuilder對象,指定查詢條件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchQuery("fieldName", "value"));

// 構建SearchRequest對象
SearchRequest searchRequest = new SearchRequest(index);
searchRequest.source(searchSourceBuilder);

// 發送搜索請求
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

在ES中搜索數據是非常常見的。搜索數據需要先創建一個SearchSourceBuilder對象,其中包含搜索的查詢條件。可以使用QueryBuilder API創建查詢條件。創建SearchRequest對象,該對象是發送搜索請求的必要條件。可以使用SearchRequest對象的source方法設置搜索條件,發送搜索請求的結果可以通過SearchResponse對象獲得。

七、批量操作


// 構建BulkRequest對象
BulkRequest bulkRequest = new BulkRequest();
// 添加IndexRequest,UpdateRequest和DeleteRequest
bulkRequest.add(indexRequest);
bulkRequest.add(updateRequest);
bulkRequest.add(deleteRequest);
// 添加批量操作的監聽器
client.bulkAsync(bulkRequest, RequestOptions.DEFAULT, listener);

批量操作可以大大提高操作效率,例如批量索引或刪除數據都是非常有用的。要執行批量操作,需要先創建一個BulkRequest對象,然後添加多個IndexRequest,UpdateRequest或DeleteRequest對象,每個對象都需要指定所需的參數。添加操作後,可以使用bulkAsync方法將批量操作發送到ES,並設置適當的監聽器。

原創文章,作者:RYKPH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/362661.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
RYKPH的頭像RYKPH
上一篇 2025-02-27 19:28
下一篇 2025-02-27 19:28

相關推薦

  • Python基本索引用法介紹

    Python基本索引是指通過下標來獲取列表、元組、字元串等數據類型中的元素。下面將從多個方面對Python基本索引進行詳細的闡述。 一、列表(List)的基本索引 列表是Pytho…

    編程 2025-04-29
  • 如何將Oracle索引變成另一個表?

    如果你需要將一個Oracle索引導入到另一個表中,可以按照以下步驟來完成這個過程。 一、創建目標表 首先,需要在資料庫中創建一個新的表格,用來存放索引數據。可以通過以下代碼創建一個…

    編程 2025-04-29
  • 索引abc,bc會走索引嗎

    答案是:取決於MySQL版本和表結構 一、MySQL版本的影響 在MySQL 5.6之前的版本中,MySQL會同時使用abc和bc索引。但在MySQL 5.6及之後的版本中,MyS…

    編程 2025-04-29
  • Python切片索引越界是否會報錯

    解答:當對一個字元串、列表、元組進行切片時,如果索引越界會返回空序列,不會報錯。 一、切片索引的概念 切片是指對序列進行操作,從其中一段截取一個新序列。序列可以是字元串、列表、元組…

    編程 2025-04-29
  • Python數組索引位置用法介紹

    Python是一門多用途的編程語言,它有著非常強大的數據處理能力。數組是其中一個非常重要的數據類型之一。Python支持多種方式來操作數組的索引位置,我們可以從以下幾個方面對Pyt…

    編程 2025-04-28
  • MySQL左連接索引不生效問題解決

    在MySQL資料庫中,經常會使用左連接查詢操作,但是左連接查詢中索引不生效的情況也比較常見。本文將從多個方面探討MySQL左連接索引不生效問題,並給出相應的解決方法。 一、索引的作…

    編程 2025-04-28
  • Python中最後一個元素的索引值

    Python中對於最後一個元素的索引值有很多應用,如反轉列表、獲取最後一個元素等。在這篇文章中,我們將從多個方面探討Python中的最後一個元素索引值。 一、反轉列表 在Pytho…

    編程 2025-04-27
  • Python尋找數組最大值和索引

    本文旨在介紹如何使用Python語言尋找數組的最大值和其對應的索引。 一、尋找數組最大值 要尋找一個數組的最大值,我們可以使用Python的內置函數max()。如下所示: arra…

    編程 2025-04-27
  • Python列表索引範圍用法介紹

    本文將從多個方面詳細闡述Python列表索引範圍的相關內容,包括索引範圍的表示方法、切片操作、複製列表、列表反轉、列表排序等。希望可以幫助讀者更好地理解和使用Python列表。 一…

    編程 2025-04-27
  • Python查找字元串中某個字元的全部索引

    本文主要介紹如何使用Python編程語言查找字元串中某個字元的全部索引。 一、使用string.find()方法 Python中字元串類型有一個內置方法string.find(),…

    編程 2025-04-27

發表回復

登錄後才能評論