【ElasticSearch】之常用 JavaAPI

目录:


1、引入依赖


<!-- ES核心组件 -->
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>7.8.0</version>
</dependency>

<!-- ES客户端 -->
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.8.0</version>
</dependency>

2、创建索引


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建索引
CreateIndexRequest request = new CreateIndexRequest("user");
CreateIndexResponse response = esClient.indices().create(request, RequestOptions.DEFAULT);

// 打印创建结果
System.out.println("索引创建结果:" + response.isAcknowledged());

// 关闭客户端
esClient.close();

3、查询索引


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 查询索引
GetIndexRequest request = new GetIndexRequest("user");
GetIndexResponse getIndexResponse = esClient.indices().get(request, RequestOptions.DEFAULT);

// 打印索引信息
System.out.println(getIndexResponse.getAliases());
System.out.println(getIndexResponse.getMappings());
System.out.println(getIndexResponse.getSettings());

// 关闭客户端
esClient.close();

4、删除索引


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 删除索引
DeleteIndexRequest request = new DeleteIndexRequest("user");
AcknowledgedResponse response = esClient.indices().delete(request, RequestOptions.DEFAULT);

// 打印结果
System.out.println("删除结果:" + response.isAcknowledged());

// 关闭客户端
esClient.close();

5、添加文档数据


文档数据对象:

@Data
@Accessors(chain = true)
public class User {
    
    private String name;
    
    private String sex;
    
    private Integer age;
    
}

添加文档数据:

// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建添加文档数据请求
// index()指定要添加数据的索引,id()指定文档ID
IndexRequest request = new IndexRequest();
request.index("user").id("1001");

// 创建文档数据对象
User user = new User().setName("wang").setSex("man").setAge(18);

// 向ES插入数据,对象需要转换成JSON格式
// source()指定文档数据对象
request.source(JSON.toJSONString(user), XContentType.JSON);
IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);

// 打印结果
System.out.println("数据添加结果:" + response.getResult());

// 关闭客户端
esClient.close();

注意: 索引操作使用的是 indices() 方法,文档数据使用的 index() 方法,表示对具体索引的操作。


6、修改文档数据


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建修改文档请求
// index()指定要添加数据的索引,id()指定文档ID,doc()指定要修改的字段
UpdateRequest request = new UpdateRequest();
request.index("user").id("1001");
request.doc(XContentType.JSON, "sex", "woman");

// 修改数据
UpdateResponse response = esClient.update(request, RequestOptions.DEFAULT);

// 打印结果
System.out.println("数据修改结果:" + response.getResult());

// 关闭客户端
esClient.close();

7、查询文档数据


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建查询文档请求
// index()指定要添加数据的索引,id()指定文档ID
GetRequest request = new GetRequest();
request.index("user").id("1001");

// 向ES查询数据
GetResponse response = esClient.get(request, RequestOptions.DEFAULT);

// 打印结果:结果存储在 source 中
System.out.println("文档数据内容:" + response.getSourceAsString());

// 关闭客户端
esClient.close();

8、删除文档数据


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建删除文档请求
// index()指定要添加数据的索引,id()指定文档ID
DeleteRequest request = new DeleteRequest();
request.index("user").id("1001");

// 删除数据
DeleteResponse response = esClient.delete(request, RequestOptions.DEFAULT);

// 打印结果
System.out.println("数据删除结果:" + response.toString());

// 关闭客户端
esClient.close();

9、批量插入数据


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建批量添加请求
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(new IndexRequest().index("user").id("1001")
        .source(XContentType.JSON, "name", "wang", "sex", "man", "age", 18));
bulkRequest.add(new IndexRequest().index("user").id("1002")
        .source(XContentType.JSON, "name", "andy", "sex", "man", "age", 19));
bulkRequest.add(new IndexRequest().index("user").id("1003")
        .source(XContentType.JSON, "name", "lucy", "sex", "woman", "age", 20));

// 批量添加数据
BulkResponse response = esClient.bulk(bulkRequest, RequestOptions.DEFAULT);

// 打印结果:took表示花费的时间,items表示数据项
System.out.println(response.getTook());
System.out.println(Arrays.toString(response.getItems()));

// 关闭客户端
esClient.close();

10、批量删除数据


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建删除请求
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(new DeleteRequest().index("user").id("1001"));
bulkRequest.add(new DeleteRequest().index("user").id("1002"));
bulkRequest.add(new DeleteRequest().index("user").id("1003"));

// 批量删除数据
BulkResponse response = esClient.bulk(bulkRequest, RequestOptions.DEFAULT);

// 关闭客户端
esClient.close();

11、匹配查询


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建检索请求
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");

// 创建匹配条件,使用 matchAllQuery()匹配所有数据
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.QueryBuilders.matchQuery("age", "18"));

// 发送检索请求
searchRequest.source(sourceBuilder);
SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);

// 遍历查询结果
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString());
}

// 关闭客户端
esClient.close();

12、条件查询


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建检索请求
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");

// 创建检索请求
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");

// 创建检索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.termQuery("age", "18"));

// 发送检索请求
searchRequest.source(sourceBuilder);
SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);

// 遍历查询结果
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString());
}

// 关闭客户端
esClient.close();

13、分页查询


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建检索请求
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");

// 创建检索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchAllQuery());
sourceBuilder.from(1);
sourceBuilder.size(2);

// 发送检索请求
searchRequest.source(sourceBuilder);
SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);

// 遍历查询结果
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString());
}

// 关闭客户端
esClient.close();

14、查询排序


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建检索请求
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");

// 创建检索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchAllQuery());
sourceBuilder.sort("age", SortOrder.DESC);

// 发送检索请求
searchRequest.source(sourceBuilder);
SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);

// 遍历查询结果
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString());
}

// 关闭客户端
esClient.close();

15、过滤字段


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建检索请求
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");

// 创建检索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchAllQuery());
String[] excludes = {"age"};
String[] includes = {"name"};
sourceBuilder.fetchSource(includes, excludes);

// 发送检索请求
searchRequest.source(sourceBuilder);
SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);

// 遍历查询结果
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString());
}

// 关闭客户端
esClient.close();

16、组合查询


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建检索请求
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");

// 创建检索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must(QueryBuilders.matchQuery("age", 18));
boolQuery.mustNot(QueryBuilders.matchQuery("sex", "woman"));
sourceBuilder.query(boolQuery);

// 发送检索请求
searchRequest.source(sourceBuilder);
SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);

// 遍历查询结果
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString());
}

// 关闭客户端
esClient.close();

17、范围查询


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建检索请求
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");

// 创建检索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");
rangeQuery.gte(18);
rangeQuery.lt(20);
sourceBuilder.query(rangeQuery);

// 发送检索请求
searchRequest.source(sourceBuilder);
SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);

// 遍历查询结果
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString());
}

// 关闭客户端
esClient.close();

18、模糊查询


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建检索请求
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");

// 创建检索条件
// fuzzyQuery()创建模糊查询字段值,fuzziness()表示允许相差多少个字符
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.fuzzyQuery("name", "wang").fuzziness(Fuzziness.ONE));

// 发送检索请求
searchRequest.source(sourceBuilder);
SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);

// 遍历查询结果
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString());
}

// 关闭客户端
esClient.close();

19、高亮查询


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建检索请求
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");

// 创建检索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchQuery("name", "wang"));
HighlightBuilder highlighter = new HighlightBuilder();
highlighter.field("name");
highlighter.preTags("<font color='red'>");
highlighter.postTags("</font>");
sourceBuilder.highlighter(highlighter);

// 发送检索请求
searchRequest.source(sourceBuilder);
SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);

// 打印结果
System.out.println(response.toString());

// 关闭客户端
esClient.close();

20、聚合查询


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建检索请求
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");

// 创建聚合查询条件:maxAge为查询结果名称,随意起
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.aggregation(AggregationBuilders.max("maxAge").field("age"));

// 发送检索请求
searchRequest.source(sourceBuilder);
SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);

// 打印结果
System.out.println(response.toString());

// 关闭客户端
esClient.close();

21、分组查询


// 创建 ES 客户端
RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

// 创建检索请求
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");

// 创建分组查询条件:ageGroup为查询结果名称,可随意起;filed()指定按按个字段进行分组
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.aggregation(AggregationBuilders.terms("ageGroup").field("age"));

// 发送检索请求
searchRequest.source(sourceBuilder);
SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);

// 打印结果
System.out.println(response.toString());

// 关闭客户端
esClient.close();
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值