Elasticsearch7.4 使用 RestHighLevelClient 簡單教程
第一步:引入maven jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.4.0</version>
<!--可註釋,有詳細日誌打印-->
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>7.4.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.4.0</version>
</dependency>
測試代碼:
import com.alibaba.fastjson.JSON;
import org.apache.http.HttpHost;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.search.ClearScrollRequest;
import org.elasticsearch.action.search.ClearScrollResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchScrollRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.core.CountRequest;
import org.elasticsearch.client.core.CountResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchAllQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.Scroll;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* @description:
* @author: z
* @createDate: 2020/3/2 1:19 PM
* @Version: 1.0
*/
public class EsTest {
private static String hosts = "10.201.233.225"; // 集羣地址,多個用,隔開
private static int port = 9200; // 使用的端口號
private static String schema = "http"; // 使用的協議
public static List<HttpHost> getHostList(){
List<HttpHost> hostList = new ArrayList<>();
String[] hostStrs = hosts.split(",");
for (String host : hostStrs) {
hostList.add(new HttpHost(host, port, schema));
}
return hostList;
}
public static RestHighLevelClient getClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(getHostList().toArray(new HttpHost[0])));
return client;
}
public static void main(String[] args) throws InterruptedException, IOException {
try(RestHighLevelClient client = getClient()) {
//判斷 是否存在 索引
// boolean exists = client.indices().exists(new GetIndexRequest("student"), RequestOptions.DEFAULT);
// System.out.println(exists);
// GetRequest request = new GetRequest("student","1000");
// GetResponse response = client.get(request, RequestOptions.DEFAULT);
//System.out.println("getById:"+response.getSource());
//Student 屬性 id,name,gender 等
//Student user = JSON.parseObject(new String(response.getSourceAsBytes()), Student.class);
//System.out.println(user.getId());
SearchRequest searchRequest = new SearchRequest("student");
// 這個可以理解 (name = '張三' or name = '李四') and gender='man'
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
// .must(QueryBuilders.termQuery("id", "10000")) id =10000
// matchQuery 聯想模糊,類似百度搜索框,matchPhraseQuery 類似與sql like 模糊查詢
.must(QueryBuilders.boolQuery().should(QueryBuilders.matchPhraseQuery("name", "張三"))
.should(QueryBuilders.matchPhraseQuery("name", "李四")))
.must(QueryBuilders.matchPhraseQuery("gender", "man"))
;
// searchSourceBuilder.fetchSource(new String[]{"id","ts"}, null);//查詢字段
// searchSourceBuilder.size(2);//返回記錄數
searchRequest.source(new SearchSourceBuilder().query(boolQueryBuilder));
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = searchResponse.getHits();
System.out.println("total:"+hits.getTotalHits());
SearchHit[] searchHits = hits.getHits();
System.out.println("size:"+searchHits.length);
for(SearchHit hit : searchHits) {
System.out.println("json data:"+hit.getSourceAsString());
System.out.println("id:"+hit.getSourceAsMap().get("ts").toString());
// System.out.println("---"+hit.getSourceAsString());
}
//滾動查詢
scroll(client);
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 獲取總記錄數
* @param client
* @return
* @throws IOException
*/
public static long getTotal(RestHighLevelClient client) throws IOException {
SearchRequest searchRequest = new SearchRequest("student");
MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(matchAllQueryBuilder);
searchRequest.source(searchSourceBuilder);
CountRequest countRequest = new CountRequest("student");
// System.out.println(countRequest.source().toString());
CountResponse response = client.count(countRequest, RequestOptions.DEFAULT);
System.out.println("total:"+response.getCount());
//打印查詢語句字符串
System.out.println(searchSourceBuilder.toString());
return response.getCount();
}
/**
* scroll 滾動查詢
* @param client
*/
public static void scroll(RestHighLevelClient client) throws IOException {
//初始化scroll
final Scroll scroll = new Scroll(TimeValue.timeValueMinutes(1L)); //設定滾動時間間隔
SearchRequest searchRequest = new SearchRequest("student");
searchRequest.scroll(scroll);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//這裏查詢所有,可以 QueryBuilders.boolQuery() QueryBuilders 設置查詢條件,
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
searchSourceBuilder.size(2); //設定每次返回多少條數據
searchRequest.source(searchSourceBuilder);
System.out.println(searchSourceBuilder.toString());
SearchResponse searchResponse = null;
searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
String scrollId = searchResponse.getScrollId();
System.out.println(searchResponse.getHits().getTotalHits());
SearchHit[] searchHits = searchResponse.getHits().getHits();
System.out.println("----第一頁-----》");
for (SearchHit searchHit : searchHits) {
System.out.println(searchHit.getSourceAsString());
}
//遍歷符合搜索條件的數據,直到沒有數據
while (searchHits != null && searchHits.length > 0) {
SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
scrollRequest.scroll(scroll);
searchResponse = client.scroll(scrollRequest, RequestOptions.DEFAULT);
scrollId = searchResponse.getScrollId();
searchHits = searchResponse.getHits().getHits();
if (searchHits != null && searchHits.length > 0) {
System.out.println("----下一頁-----》");
for (SearchHit searchHit : searchHits) {
System.out.println(searchHit.getSourceAsString());
}
}
}
//清除滾屏
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
//或者用setScrollIds()指定多個scrollId
clearScrollRequest.addScrollId(scrollId);
ClearScrollResponse clearScrollResponse = null;
clearScrollResponse = client.clearScroll(clearScrollRequest,RequestOptions.DEFAULT);
boolean succeeded = clearScrollResponse.isSucceeded();
System.out.println("succeeded:" + succeeded);
}
}
es文章閱讀推薦:
https://segmentfault.com/a/1190000016830796