前面基础部分参考自bilibili:【尚硅谷】ElasticSearch教程
目录
前言絮絮叨
俗话说的好呀!由纲及目,由浅入深。本文也是按照循序渐进的步调一步一步带各位探索Elasticsearch的查询的用法。前半部分基础简单的内容我就不多详解,大家可以直接看代码加上我在上面写的注释就可以理解了,模板都是一个模板。
俗话又说得好呀!治标不治本,恐怖难除根。在此之前,还是希望米娜桑可以先去熟悉一下原生的es语法结构,而不是一上来就去直接使用api。我本人也是一步一步通过原生的es语法再结合api才推导出具体使用的方法,本文后面介绍的一些高级聚合的查询现在在国内网上都很难找到用法教程,是需要自己不断摸索的!
俗话又又说得好呀!玫瑰给别人,芳香自己留。本文的初衷有二:分享 与 巩固。为了大家,也为了自己。
开始
项目构建与包的导入在用Elastic官方的API,elasticsearch-rest-high-level-client来简单操作Elasticsearch的增删改查等功能中已经介绍过了,不多说辣。
原始数据,在上面那个文章里已经插入过了:
首先开始之前需要建一个客户端
// 创建客户端
RestHighLevelClient client = new RestHighLevelClient(
// EsParam.HOSTNAME, EsParam.PORT, EsParam.SCHEME 换成自己的es的ip,端口,协议(http)
RestClient.builder(new HttpHost(EsParam.HOSTNAME, EsParam.PORT, EsParam.SCHEME))
);
1. 基础查询
1.1 查询全部文档
// TODO 查询AllDoc
@Test
void searchAllDoc() throws IOException {
// 创建请求
SearchRequest request = new SearchRequest();
request.indices("book1");
// 填入builder
request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
// 返回结果
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 打印结果
SearchHits hits = response.getHits();
// 总命中数
System.out.println("hits.getTotalHits() = " + hits.getTotalHits());
for (SearchHit hit : hits) {
System.out.println("hit = " + hit.getSourceAsMap());
}
// 关闭连接
client.close();
}
结果:
其中的hits.getTotalHits()为es查询的命中数
1.2 分页查询
es提供分页功能,但只是提供。可以用但没必要
// TODO 分页查询Doc
@Test
void searchPageDoc() throws IOException {
// 创建请求
SearchRequest request = new SearchRequest();
request.indices("book1");
// 构造builder
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery())
// 查看哪页:(页面数 - 1)* 每页数据 放到from里
.from(1)
.size(3);
// 发送请求
request.source(builder);
// 返回结果
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 打印结果
SearchHits hits = response.getHits();
System.out.println("hits.getTotalHits() = " + hits.getTotalHits());
for (SearchHit hit : hits) {
System.out.println("hit.getSourceAsMap() = " + hit.getSourceAsMap());
}
// 关闭连接
client.close();
}
result: