簡介
Java REST Client 有兩種:
- Java Low Level REST Client :用於Elasticsearch的官方低級客戶端。它允許通過http與Elasticsearch集群通信。將請求編排和響應反編排留給用戶自己處理。它兼容所有的Elasticsearch版本。
- Java High Level REST Client :用於Elasticsearch的官方高級客戶端。它是基於低級客戶端的,它提供很多API,並負責請求的編排與響應的反編排。
注: 在 Elasticsearch 7.0 中不建議使用TransportClient,並且在8.0中會完全刪除TransportClient。因此,官方更建議我們用Java High Level REST Client,它執行HTTP請求,而不是序列號的
Java請求。
環境配置
- Maven configuration
我這里使用的是7.2.0版本的Elasticsearch,說以對應使用7.2.0版本的REST Clien。
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.2.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.2.0</version>
</dependency>
- 初始化得到一個RestHighLevelClient實例
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http"),
new HttpHost("localhost", 9201, "http")
));
入門使用
- 創建索引庫
public void testCreatIndex() throws IOException {
//創建索引對象
CreateIndexRequest createIndexRequest = new CreateIndexRequest("xc_course");
//設置參數
createIndexRequest.settings(Settings.builder().put("number_of_shards", "1").put("number_of_replicas", "0"));
//指定映射
createIndexRequest.mapping("{\n" +
" \"properties\": {\n" +
" \"name\": {\n" +
" \"type\": \"text\",\n" +
" \"analyzer\": \"ik_max_word\",\n" +
" \"search_analyzer\": \"ik_smart\"\n" +
" },\n" +
" \"description\": {\n" +
" \"type\": \"text\",\n" +
" \"analyzer\": \"ik_max_word\",\n" +
" \"search_analyzer\": \"ik_smart\"\n" +
" },\n" +
" \"studymodel\": {\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"price\": {\n" +
" \"type\": \"float\"\n" +
" },\n" +
" \"timestamp\": {\n" +
" \"type\": \"date\",\n" +
" \"format\": \"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"\n" +
" }\n" +
" }\n" +
"}", XContentType.JSON);
//操作索引的客戶端
IndicesClient indices = client.indices();
//執行創建索引庫
CreateIndexResponse createIndexResponse = indices.create(createIndexRequest, RequestOptions.DEFAULT);
//得到響應
boolean acknowledged = createIndexResponse.isAcknowledged();
System.out.println(acknowledged);
}
- 添加文檔
// 添加文檔
@Test
public void testIndex() throws IOException {
//文檔內容
//准備json數據
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("name", "spring cloud實戰");
jsonMap.put("description", "本課程主要從四個章節進行講解: 1.微服務架構入門 2.spring cloud 基礎入門 3.實戰Spring Boot 4.注冊中心eureka。");
jsonMap.put("studymodel", "201001");
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
jsonMap.put("timestamp", dateFormat.format(new Date()));
jsonMap.put("price", 5.6f);
IndexRequest indexRequest = new IndexRequest("xc_course").id("1").source(jsonMap);
client.index(indexRequest, RequestOptions.DEFAULT);
client.close();
}
- 獲取文檔
// 搜索文檔
@Test
public void testGetDoc() throws IOException {
//查詢請求對象
GetRequest getRequest = new GetRequest(
"xc_course",
"1");
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
//得到文檔的內容
Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();
System.out.println(sourceAsMap);
}
- 刪除索引庫
// 刪除索引庫
@Test
public void testDeleteIndex() throws IOException {
//刪除索引對象
DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("xc_course");
//操作索引的客戶端
IndicesClient indices = client.indices();
//執行刪除索引
AcknowledgedResponse acknowledgedResponse = indices.delete(deleteIndexRequest, RequestOptions.DEFAULT);
//得到響應
boolean acknowledged = acknowledgedResponse.isAcknowledged();
System.out.println(acknowledged);
}
更多使用參考:[Java REST Client 官方文檔]: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html