一、創建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