1、pom檔案新增依賴
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>6.3.1</version>
</dependency>
<!--阿裡 FastJson依賴-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.39</version>
</dependency>
2、編寫代碼
import com.alibaba.fastjson.JSONObject;
import com.example.demo.model.novel;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.entity.ContentType;
import org.apache.http.nio.entity.NStringEntity;
import org.apache.http.util.EntityUtils;
import org.elasticsearch.client.Response;
import org.elasticsearch.client.RestClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.util.Collections;
import java.util.Date;
/**
* Created by Administrator on 2019/4/21.
*/
@RestController
public class HelloController {
RestClient restClient = RestClient.builder(
new HttpHost("localhost", 9200, "http")).build();
/**
* 檢視api資訊
*
* @throws Exception
*/
@GetMapping("/bookApi")
public void bookApi() throws Exception {
String method = "GET";
String endpoint = "/book";
Response response = restClient.performRequest(method, endpoint);
System.out.println(EntityUtils.toString(response.getEntity()));
}
/**
* 新增索引
*
* @throws IOException
*/
@GetMapping("/addIndex")
public void addIndex() throws IOException {
String method = "PUT";
String endpoint = "/book";
Response response = restClient.performRequest(method, endpoint);
System.out.println(EntityUtils.toString(response.getEntity()));
}
/**
* 新增文檔
*
* @throws Exception
*/
@GetMapping("/createDocument")
public void createDocument() throws Exception {
String method = "PUT";
String endpoint = "/book/novel/1"; // 索引:圖書【DB】 類型:小說【table】 文檔:【表裡的資料】
novel testNovel = new novel();
testNovel.setName("三國演義");
testNovel.setWriter("張飛");
testNovel.setCount(10);
testNovel.setPublishDate(new Date());
String jsonStr = JSONObject.toJSONString(testNovel);
// JSON格式字元串
HttpEntity entity = new NStringEntity(jsonStr, ContentType.APPLICATION_JSON);
Response response = restClient.performRequest(method, endpoint, Collections.emptyMap(), entity);
System.out.println(EntityUtils.toString(response.getEntity()));
System.out.println("新增文檔結束!!!");
// 傳回結果:
// {"_index":"book","_type":"novel","_id":"1","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}
}
/**
* 查詢文檔
*
* @throws Exception
*/
@GetMapping("/queryDocument")
public void queryDocument() throws Exception {
String method = "GET";
String endpoint = "/book/novel/1";
Response response = restClient.performRequest(method, endpoint);
System.out.println(EntityUtils.toString(response.getEntity()));
System.out.println("查詢文檔結束!!!");
// 傳回結果:
// {"_index":"book","_type":"novel","_id":"1","_version":1,"found":true,"_source":{"count":10,"name":"三國演義","publishDate":1555825698934,"writer":"張飛"}}
}
/**
* 查詢所有資料
*
* @throws Exception
*/
@GetMapping("/queryAll")
public void queryAll() throws Exception {
String method = "POST";
String endpoint = "/book/novel/_search";
HttpEntity entity = new NStringEntity("{\n" +
" \"query\": {\n" +
" \"match_all\": {}\n" +
" }\n" +
"}", ContentType.APPLICATION_JSON);
Response response = restClient.performRequest(method, endpoint, Collections.emptyMap(), entity);
System.out.println(EntityUtils.toString(response.getEntity()));
System.out.println("查詢所有資料:queryAll !!!");
// 傳回結果
// {"took":140,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_index":"book","_type":"novel","_id":"1","_score":1.0,"_source":{"count":10,"name":"三國演義","publishDate":1555825698934,"writer":"張飛"}}]}}
}
/**
* 根據ID擷取
*
* @throws Exception
*/
@GetMapping("/queryByField")
public void queryByField() throws Exception {
String method = "POST";
String endpoint = "/book/novel/_search";
HttpEntity entity = new NStringEntity("{\n" +
" \"query\": {\n" +
" \"match\": {\n" +
" \"name\": \"三國\"\n" +
" }\n" +
" }\n" +
"}", ContentType.APPLICATION_JSON);
Response response = restClient.performRequest(method, endpoint, Collections.emptyMap(), entity);
System.out.println(EntityUtils.toString(response.getEntity()));
// 傳回結果
// {"took":3,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":1,"max_score":0.5753642,"hits":[{"_index":"book","_type":"novel","_id":"1","_score":0.5753642,"_source":{"count":10,"name":"三國演義","publishDate":1555825698934,"writer":"張飛"}}]}}
}
/**
* 更新資料
*
* @throws Exception
*/
@GetMapping("/updateDocument")
public void updateDocument() throws Exception {
// doc_as_upsert :使用doc_as_upsert可以在文檔不存在的時候,把doc中的内容插入到文檔中
String method = "POST";
String endpoint = "/book/novel/1/_update";
HttpEntity entity = new NStringEntity("{\n" +
" \"doc\": {\n" +
" \"name\":\"三國演義修改哈哈哈\"\n" +
" }\n" +
"}", ContentType.APPLICATION_JSON);
Response response = restClient.performRequest(method, endpoint, Collections.emptyMap(), entity);
System.out.println(EntityUtils.toString(response.getEntity()));
}
/**
* 删除資料
*
* @throws Exception
*/
@GetMapping("/deleteDocument")
public void deleteDocument() throws Exception {
String method = "DELETE";
String endpoint = "/book/novel/1";
HttpEntity entity = new NStringEntity("", ContentType.APPLICATION_JSON);
Response response = restClient.performRequest(method, endpoint, Collections.emptyMap(), entity);
System.out.println(EntityUtils.toString(response.getEntity()));
// 傳回結果
// {"_index":"book","_type":"novel","_id":"1","_version":5,"result":"deleted","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":4,"_primary_term":1}
}
/**
* 按條件删除資料
*
* @throws Exception
*/
@GetMapping("/deleteDocumentByCondition")
public void deleteDocumentByCondition() throws Exception {
String method = "DELETE";
String endpoint = "/book/novel/_delete_by_query ";
/* {
"query":{
"term":{
"author":"test2"
}
}
}*/
/* HttpEntity entity = new NStringEntity("{\n" +
" \"query\": {\n" +
" \"term\":\"三國演義修改哈哈哈\"\n" +
" }\n" +
"}", ContentType.APPLICATION_JSON);*/
Response response = restClient.performRequest(method, endpoint, Collections.emptyMap(), entity);
System.out.println(EntityUtils.toString(response.getEntity()));
}
}
補充:
1、使用
doc_as_upsert
可以在文檔不存在的時候,把doc中的内容插入到文檔中。
curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
"doc" : {
"name" : "new_name"
},
"doc_as_upsert" : true
}'
2、retry_on_conflict
當執行索引和更新的時候,有可能另一個程序正在執行更新。這個時候就會造成沖突,
這個參數就是用于定義當遇到沖突時,再過多長時間執行操作。