18-elasticsearch-javaapi:
Java API 环境准备
Elasticsearch 软件是由 Java 语言开发的,所以也可以通过 Java API 的方式对 Elasticsearch
服务进行访问
创建 Maven 项目
引入依赖
<dependencies>
<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>
</dependencies>
package com.zh.es;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import java.io.IOException;
public class EstestClient {
public static void main(String[] args) throws IOException {
//创建es客户端
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
//关闭es客户端
esClient.close();
}
}
运行测试是否可以连接本地es服务。不报错ok
api创建索引
package com.zh.es;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import java.io.IOException;
public class EstestClientIndexCreate {
public static void main(String[] args) throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
//创建索引,user索引名称
CreateIndexRequest user = new CreateIndexRequest("user1");
CreateIndexResponse indexResponse = esClient.indices().create(user, RequestOptions.DEFAULT);
//相应状态
boolean acknowledged = indexResponse.isAcknowledged();
System.out.println("创建索引"+acknowledged);
//关闭es客户端
esClient.close();
}
}
api-查询索引
private static void getIndex() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
GetIndexRequest user = new GetIndexRequest("user1");
GetIndexResponse getIndexResponse =
esClient.indices().get(user, RequestOptions.DEFAULT);
//相应状态
System.out.println(getIndexResponse.getAliases());
System.out.println(getIndexResponse.getMappings());
System.out.println(getIndexResponse.getSettings());
//关闭es客户端
esClient.close();
}
删除索引
//删除索引
private static void deleteIndex() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
DeleteIndexRequest user = new DeleteIndexRequest("user1");
AcknowledgedResponse delete = esClient.indices().delete(user,
RequestOptions.DEFAULT);
//相应状态
boolean acknowledged = delete.isAcknowledged();
System.out.println("删除索引"+acknowledged);
//关闭es客户端
esClient.close();
}
创建文档
//创建文档
private static void insertDoc() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
//插入数据
IndexRequest request = new IndexRequest();
request.index("user1").id("1001");
User user = new User();
user.setName("doc_name_01");
user.setAge(30);
user.setSex("男");
//向es插入数据,必须将对象转换为json类型
ObjectMapper mapper = new ObjectMapper();
String userJson = mapper.writeValueAsString(user);
//数据源,数据格式,和postman中的raw类型中的json,txt类似
request.source(userJson, XContentType.JSON);
IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);
System.out.println(response.getResult());
//关闭es客户端
esClient.close();
}
修改文档数据
//修改文档
private static void upData() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
//修改数据
UpdateRequest request = new UpdateRequest();
request.index("user1").id("1001");
request.doc(XContentType.JSON,"sex","女");
UpdateResponse updateResponse = esClient.update(request, RequestOptions.DEFAULT);
System.out.println(updateResponse.getResult());
//关闭es客户端
esClient.close();
}
查询数据
//查询数据
private static void getData() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
GetRequest getRequest = new GetRequest();
getRequest.index("user1").id("1001");
GetResponse response = esClient.get(getRequest, RequestOptions.DEFAULT);
System.out.println(response.getSourceAsString());
//关闭es客户端
esClient.close();
}
删除文档
//删除文档
private static void deleteDoc() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
DeleteRequest deleteRequest = new DeleteRequest();
deleteRequest.index("user1").id("1001");
DeleteResponse response = esClient.delete(deleteRequest, RequestOptions.DEFAULT);
System.out.println(response.getIndex());
//关闭es客户端
esClient.close();
}
批量新增
//批量新增
private static void insertDocBatch() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
//批量插入数据
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(new IndexRequest().index("user1").id("1001").
source(XContentType.JSON, "name", "zhangsan"));
bulkRequest.add(new IndexRequest().index("user1").id("1002").
source(XContentType.JSON, "name", "zhangsan002"));
bulkRequest.add(new IndexRequest().index("user1").id("1003").
source(XContentType.JSON, "name", "zhangsan003"));
BulkResponse bulk = esClient.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulk.getTook());
System.out.println(bulk.getItems());
//关闭es客户端
esClient.close();
}
批量删除
//批量删除数据
private static void deleteDocBatch() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
//批量插入数据
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(new DeleteRequest().index("user1").id("1001"));
bulkRequest.add(new DeleteRequest().index("user1").id("1002"));
bulkRequest.add(new DeleteRequest().index("user1").id("1003"));
BulkResponse bulk = esClient.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulk.getTook());
System.out.println(bulk.getItems());
//关闭es客户端
esClient.close();
}
api之全量查询
//查询数据
private static void queryDoc() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
//查询数据
SearchRequest request = new SearchRequest();
request.indices("user1");
//查询索引中全量的数据
SearchSourceBuilder query = new SearchSourceBuilder()
.query(QueryBuilders.matchAllQuery());
request.source(query);
SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
System.out.println(search.getTook());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
//关闭es客户端
esClient.close();
}
条件查询
//查询数据-条件查询
private static void queryDocByrequirement() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
//条件查询
SearchRequest request = new SearchRequest();
request.indices("user1");
//查询年龄为30的
request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age",30)));
SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
System.out.println(search.getTook());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
//关闭es客户端
esClient.close();
}
分页查询
//查询数据-分页查询
private static void queryDocByPagination() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
//条件查询
SearchRequest request = new SearchRequest();
request.indices("user1");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
builder.from(0);//起始位置 //{当前页面-1}*数据条数
builder.size(2);//每页显示多少条
request.source(builder);
SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
System.out.println(search.getTook());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
//关闭es客户端
esClient.close();
}
排序查询
//查询数据-排序查询
private static void queryDocByOrder() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
//条件查询
SearchRequest request = new SearchRequest();
request.indices("user1");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
builder.sort("age", SortOrder.DESC);
request.source(builder);
SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
System.out.println(search.getTook());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
//关闭es客户端
esClient.close();
}
字段过滤查询
//查询数据-字段过滤查询
private static void queryDocByFieldfilter() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
//条件查询
SearchRequest request = new SearchRequest();
request.indices("user1");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
//字段过滤排除
String[] excludes={};
String[] include={"name"};
builder.fetchSource(include,excludes);
request.source(builder);
SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
System.out.println(search.getTook());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
//关闭es客户端
esClient.close();
}
组合查询
//查询数据-组合查询
private static void queryDocByMore() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
//条件查询
SearchRequest request = new SearchRequest();
request.indices("user1");
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//多条件的查询,and
// boolQueryBuilder.must(QueryBuilders.matchQuery("age",30));
// boolQueryBuilder.must(QueryBuilders.matchQuery("sex","男"));
// boolQueryBuilder.mustNot(QueryBuilders.matchQuery("sex","女"));
boolQueryBuilder.should(QueryBuilders.matchQuery("age",30));
boolQueryBuilder.should(QueryBuilders.matchQuery("age",40));
builder.query(boolQueryBuilder);
request.source(builder);
SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
System.out.println(search.getTook());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
//关闭es客户端
esClient.close();
}
范围查询
//查询数据-范围查询
private static void queryDocByrange() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
//条件查询
SearchRequest request = new SearchRequest();
request.indices("user1");
SearchSourceBuilder builder = new SearchSourceBuilder();
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("name");
rangeQueryBuilder.gte(30);
rangeQueryBuilder.lte(60);
builder.query(rangeQueryBuilder);
request.source(builder);
SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
System.out.println(search.getTook());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
//关闭es客户端
esClient.close();
}
模糊查询
//查询数据-模糊查询
private static void queryDocByLike() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
//条件查询
SearchRequest request = new SearchRequest();
request.indices("user1");
SearchSourceBuilder builder = new SearchSourceBuilder();
//Fuzziness.ONE偏差的距离
builder.query(QueryBuilders.fuzzyQuery("name","zhangsan")
.fuzziness(Fuzziness.ONE));
request.source(builder);
SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
System.out.println(search.getTook());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
//关闭es客户端
esClient.close();
}
高亮查询
//查询数据-高亮查询
private static void highlightQueryDoc() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
//条件查询
SearchRequest request = new SearchRequest();
request.indices("user1");
SearchSourceBuilder builder = new SearchSourceBuilder();
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zhangsan");
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.preTags("<font color='red'>");
highlightBuilder.postTags("</font color='red'>");
highlightBuilder.field("name");
builder.highlighter();
builder.query(termQueryBuilder);
request.source(builder);
SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
System.out.println(search.getTook());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
//关闭es客户端
esClient.close();
}
聚合查询,最大值
//查询数据-聚合查询
private static void aggregationQueryDoc() throws IOException {
RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost",9200,"http")));
//条件查询
SearchRequest request = new SearchRequest();
request.indices("user1");
SearchSourceBuilder builder = new SearchSourceBuilder();
//求年龄的最大值
MaxAggregationBuilder field = AggregationBuilders.max("MaxAge").field("age");
//按照年龄分组
//TermsAggregationBuilder field = AggregationBuilders.terms("ageFroup").field("age");
builder.aggregation(field);
request.source(builder);
SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
System.out.println(search.getTook());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
//关闭es客户端
esClient.close();
}
//求年龄的最大值
MaxAggregationBuilder field = AggregationBuilders.max("MaxAge").field("age");
//按照年龄分组
//TermsAggregationBuilder field = AggregationBuilders.terms("ageFroup").field("age");
builder.aggregation(field);
request.source(builder);
SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
System.out.println(search.getTook());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
//关闭es客户端
esClient.close();
}