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的端口(默認).