[ElasticSearch]ES操作之基本查询,基于elasticsearch-rest-high-level-client
JAVA操作ES之查询:
首先,高版本客户端是依赖低版本客户端的,所以要同时引入低版本依赖
其次,客户端只是提供连接,实际的操作还要引入es的依赖
具体:
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>${elasticsearch.version}</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> <version>${elasticsearch.version}</version> </dependency> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>${elasticsearch.version}</version> </dependency>
在操作之前,我们要清楚的是,使用java操作es和使用Kibana是一样的,所以我们要提供的无非是:
主机ip
端口
索引
类型
索引的创建不写,因为一般我们是没有权限进行索引操作的,索引都是建立好的
查询的基本代码如下:
import org.apache.http.HttpHost; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.index.query.MatchAllQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.builder.SearchSourceBuilder; @Test public void testES(){ //创建低级客户端,提供ip,端口,设置超时重试时间 RestClient restClient = RestClient.builder(new HttpHost("localhost",9200)) .setMaxRetryTimeoutMillis(300000).build(); //创建高级客户端,传入低级客户端 RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClient); //创建查询请求对象,提供索引和类型,如果建表时规范的话,可以不提供类型的 SearchRequest searchRequest = new SearchRequest("索引").types("类型"); //构建query条件 QueryBuilder queryBuilder = new MatchAllQueryBuilder(); //query条件作为查询条件,size表示返回结果的条数 SearchSourceBuilder builder = new SearchSourceBuilder().query(queryBuilder).size(10); //请求对象携带条件,查询类型,一般默认即可 searchRequest.source(builder).searchType(SearchType.DEFAULT); try { //通过高级客户端执行查询请求,返回响应对象 SearchResponse searchResponse = restHighLevelClient.search(searchRequest); //拿到响应的匹配结果,遍历 for (SearchHit hit : searchResponse.getHits().getHits()) { //转为String,也可以getSourceAsMap转为map,后续进行操作 System.out.println(hit.getSourceAsString()); } } catch (IOException e) { e.printStackTrace(); } }
这里注意:
使用elasticsearch-rest-high-level-client执行的是http请求,所以对应的是9200的端口(默认).