5、通过Java访问ES
5.1 环境
创建maven工程,主要是通过两个依赖:
<!--主要是这两个依赖-->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.8.0</version>
</dependency>
<!-- elasticsearch 的客户端 -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.8.0</version>
</dependency>
<!-- elasticsearch 依赖 2.x 的 log4j -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
<!-- junit 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
5.2 索引操作
5.2.1 创建索引
首先需要使用RestHighLevelClient创建客户端,
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http")) // 其中包括主机名,端口,请求方式
);
// 创建索引请求
CreateIndexRequest request = new CreateIndexRequest("user"); //user是索引的名
// 通过客户端创建索引并得到响应的请求
CreateIndexResponse response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
//相应状态
boolean acknowledged = response.isAcknowledged();
System.out.println(acknowledged);
restHighLevelClient.close();
5.2.2 查询索引
查询索引使用的是GetIndexRequest,及GetIndexResponse.
// 创建索引
GetIndexRequest request = new GetIndexRequest("user");
GetIndexResponse response = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);
通过postman查询的索引信息主要包括下面的内容,通过java的api的get方法得到响应的信息
{
"user": {
"aliases": {}, //response.getAliases();
"mappings": {}, //response.getMappings();
"settings": { //response.getSettings();
"index": {
"creation_date": "1650780419948",
"number_of_shards": "1",
"number_of_replicas": "1",
"uuid": "dWGyIiiFTZ6gEtqfqJ-g_g",
"version": {
"created": "7080099"
},
"provided_name": "user"
}
}
}
}
5.2.3 删除索引
删除索引使用DeleteIndexRequest,返回的可以是bool值表示是否删除成功。
DeleteIndexRequest request = new DeleteIndexRequest("user");
AcknowledgedResponse response = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
response.isAcknowledged();
5.3 文档操作
5.3.1 创建文档
创建文档首先需要有插入的内容,定义一个实体类并给与相应的数据。插入文档对应的是IndexRequest,及request.source()方法。
public class ESTest_InsertDoc {
public static void main(String[] args) throws IOException {
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
// 创建文档
IndexRequest request = new IndexRequest("user");
// 设置文档的id(自定义id)
request.id("1001");
// 文档的内容 相当于一行数据
User user=new User();
user.setName("张三");
user.setSex("男");
user.setAge(25);
// 由于文档是json格式 因此需要把对象转换成json字符串
ObjectMapper objectMapper=new ObjectMapper();
String insertDocString = objectMapper.writeValueAsString(user);
request.source(insertDocString, XContentType.JSON);
//调用方法插入文档
IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
//相应状态
System.out.println(response.getResult());
restHighLevelClient.close();
}
}
5.3.2 修改文档
修改文档对应的是UpdateRequest,及request.doc()方法。
// 修改文档
UpdateRequest request = new UpdateRequest();
request.index("user");
request.id("1001");
// 将性别修改为女
request.doc(XContentType.JSON,"sex","女");
UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
//相应状态
System.out.println(response.getResult());
restHighLevelClient.close();
5.3.3 查询文档
修改文档对应的是GetRequest,及request.get()方法。
// 查询文档
GetRequest request = new GetRequest();
request.index("user").id("1001");
GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT);
//相应状态
System.out.println(response.getSourceAsString());
5.3.4 删除文档
修改文档对应的是DeleteRequest。
// 删除文档
DeleteRequest request = new DeleteRequest();
request.index("user").id("1001");
DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
//相应状态
System.out.println(response.getResult());
5.3.5 批量增加文档
// 创建文档
BulkRequest request = new BulkRequest();
ObjectMapper objectMapper=new ObjectMapper();
request.add(new IndexRequest().index("user").id("1001").source(XContentType.JSON,"name","张三","sex","男","age",20));
request.add(new IndexRequest().index("user").id("1002").source(XContentType.JSON,"name","李四","sex","男","age",20));
request.add(new IndexRequest().index("user").id("1003").source(XContentType.JSON,"name","王五","sex","男","age",20));
request.add(new IndexRequest().index("user").id("1004").source(XContentType.JSON,"name","赵六","sex","男","age",20));
BulkResponse response = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
//相应状态
System.out.println(response.getItems());
5.3.6 批量删除文档
// 删除文档
BulkRequest request = new BulkRequest();
ObjectMapper objectMapper=new ObjectMapper();
request.add(new DeleteRequest().index("user").id("1001"));
request.add(new DeleteRequest().index("user").id("1002"));
request.add(new DeleteRequest().index("user").id("1003"));
request.add(new DeleteRequest().index("user").id("1004"));
BulkResponse response = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
//相应状态
System.out.println(response.getItems());
5.3.7 全量查询
// 全量文档
SearchRequest request = new SearchRequest("user");
request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
//相应状态
System.out.println(hits.getTotalHits());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
restHighLevelClient.close();
5.3.8 条件&分页&排序查询
//条件查询
SearchRequest request = new SearchRequest("user");
request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("sex","男")));
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
//相应状态
System.out.println(hits.getTotalHits());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
// 分页查询文档
SearchRequest request = new SearchRequest("user");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
builder.from(0);
builder.size(2);
request.source(builder);
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
//相应状态
System.out.println(hits.getTotalHits());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
// 排序查询文档
SearchRequest request = new SearchRequest("user");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
builder.sort("age", SortOrder.DESC);
request.source(builder);
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
//相应状态
System.out.println(hits.getTotalHits());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
restHighLevelClient.close();
&spm=1001.2101.3001.11974&articleId=124385397&d=1&t=3&u=fb8d1f72cd084e8a97ef58d758491223)
4067


&spm=1001.2101.3001.11976&articleId=124385397&d=1&t=3&u=5527d206170440dab38604733ed57217)

被折叠的 条评论
为什么被折叠?



