1、pom文件新增依赖
org.elasticsearch.client
elasticsearch-rest-client
6.3.1
com.alibaba
fastjson
1.2.39
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
当执行索引和更新的时候,有可能另一个进程正在执行更新。这个时候就会造成冲突,
这个参数就是用于定义当遇到冲突时,再过多长时间执行操作。