文章目录
SB集成ES
1.去官网找文档
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Abb8xk4q-1598233007471)(img/031.png)]
maven仓库
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.8.1</version>
</dependency>
初始化
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http"),
new HttpHost("localhost", 9201, "http")));
关闭客户端
client.close();
2、spring boot与es版本
使用spring boot的话会自动集成
但我们spring boot使用的es客户端版本必须与我们的es版本一致
3、配置es
@Configuration
public class ElasticSearch {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("8.129.166.53", 9200, "http")));
return client;
}
}
4、通过Java代码创建一个索引
@Autowired
private RestHighLevelClient restHighLevelClient;
@Test
void contextLoads() throws IOException {
//创建索引的请求
CreateIndexRequest request = new CreateIndexRequest("testdb");
//客户端执行请求
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
System.out.println(createIndexResponse);
}
关于索引的操作请查看文档
5、文档的操作
1、添加文档
@Test
void createDoc() throws IOException {
User user = new User();
user.setName("吴家妙");
user.setAge(23);
user.setTitle("今天");
user.setDescribe("今天是个好日子");
IndexRequest request = new IndexRequest("testdb");
request.id("1");
request.timeout(TimeValue.timeValueSeconds(1));
request.timeout("1s");
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(user);
request.source(jsonString, XContentType.JSON);
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
System.out.println(indexResponse.toString());
System.out.println(indexResponse.status());
}
2、判断文档是否存在
//获取文档,判断是否存在 get /index/_doc/1
@Test
void getDoc() throws IOException {
GetRequest getRequest = new GetRequest();
getRequest.index("testdb");
getRequest.id("1");
//不获取返回的 _source的上下文了
getRequest.fetchSourceContext(new FetchSourceContext(false));
getRequest.storedFields("_none_");
boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
System.out.println(exists);
}
3、获得文档
GetRequest getRequest = new GetRequest(
"testdb",
"1");
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
System.out.println(getResponse.getSourceAsString());
System.out.println(getResponse);
4、更新文档
@Test
void updateDoc() throws IOException {
UpdateRequest request = new UpdateRequest(
"testdb",
"1");
T user = new T("吴家妙",23);
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(user);
request.doc(jsonString, XContentType.JSON);
UpdateResponse updateResponse = client.update(
request, RequestOptions.DEFAULT);
System.out.println(updateResponse.toString());
System.out.println(updateResponse.status());
}
当对部分文档使用更新时,该部分文档将与现有文档合并。
5、异步删除文档
@Test
void delDoc(){
DeleteRequest request = new DeleteRequest(
"testdb",
"1");
ActionListener<DeleteResponse> listener = new ActionListener<DeleteResponse>() {
@Override
public void onResponse(DeleteResponse deleteResponse) {
System.out.println(deleteResponse.status());
}
@Override
public void onFailure(Exception e) {
System.out.println(e.getMessage());
}
};
client.deleteAsync(request, RequestOptions.DEFAULT, listener);
}
6、批量插入
@Test
void buikDoc() throws IOException {
BulkRequest request = new BulkRequest();
request.timeout("10s");
ArrayList<User> userList = new ArrayList<>();
userList.add(new User("左翼",24,"雷猴","雷电法王"));
userList.add(new User("王也",27,"道士","道家弟子"));
userList.add(new User("鸣人",6,"九尾人柱力","九喇叭"));
userList.add(new User("佐助",6,"写轮眼","哥哥是鼬"));
userList.add(new User("春野樱",7,"妹子","一个拖油瓶"));
for (int i=0;i<userList.size();i++) {
User user = userList.get(i);
String userString = new ObjectMapper().writeValueAsString(user);
request.add(new IndexRequest("testdb").id(""+(i+1))
.source(userString, XContentType.JSON));
}
BulkResponse bulkResponse = client.bulk(request, RequestOptions.DEFAULT);
System.out.println(bulkResponse.hasFailures());
}
7、查找
@Test
void searchDoc() throws IOException {
SearchRequest request = new SearchRequest("testdb");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//精确查找,name字段必须是keyword
//TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name.keyword","王也");
//匹配所有
//MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
//非精确查找
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name","王");
sourceBuilder.query(matchQueryBuilder);
sourceBuilder.timeout(new TimeValue(60, TimeUnit.DAYS));
request.source(sourceBuilder);
SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT);
ObjectMapper mapper = new ObjectMapper();
String string = mapper.writeValueAsString(searchResponse.getHits());
System.out.println(string);
System.out.println("===========");
for (SearchHit documentFields:searchResponse.getHits().getHits()){
System.out.println(documentFields.getSourceAsMap());
}
}