所需的jar
<!-- https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.8.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.8.2</version>
</dependency>
代码如下:
private static RestHighLevelClient client;
PageList<Logfo> ls = new PageList<Logfo>();
PageWrapper<Logfo> pageWrapper= new PageWrapper<Logfo>();
@Override
public RestHighLevelClient getClient() {
client = new RestHighLevelClient(
RestClient.builder(new HttpHost("192.10.1.141", 9200, "http"),
new HttpHost("192.10.1.143", 9200, "http")));
return client;
}
@Override
public void closeClient() {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//通过index、type,获取SearchRequest对象
public SearchRequest getSearchRequest(String index,String type) {
SearchRequest searchRequest = new SearchRequest(index);
searchRequest.types(type);
return searchRequest;
}
//将查询语句带入到SearchSourceBuilder中,并返回SearchRequest
public SearchRequest getSearchRequest_QueryBuilder(SearchRequest searchRequest,QueryBuilder queryBuilder) {
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(queryBuilder); //设置查询对象。可以使任何类型的 QueryBuilder
//使用from size进行分页查询(深度分页)
sourceBuilder.from(0); //设置from选项,确定要开始搜索的结果索引。 默认为0。
sourceBuilder.size(1000); //设置大小选项,确定要返回的搜索匹配数。 默认为10。
//设置一个可选的超时时间,用于控制搜索允许的时间。
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
sourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC));
//将请求体加入到请求中,将SearchSourceBuilder对象添加到搜索请求中:
searchRequest.source(sourceBuilder);
return searchRequest;
}
public QueryBuilder getQueryBuilder(Logfo logInfo) {
QueryBuilder queryBuilder;
if(null == (logInfo.getCamera_ip()) && null == logInfo.getDate_start()) {
//无参数查询
queryBuilder = QueryBuilders.matchAllQuery();
}else {
if(null == (logInfo.getCamera_ip()) && null != logInfo.getDate_start()) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//带time范围参数查询
QueryBuilder queryBuilder_date = null;
try {
queryBuilder_date = QueryBuilders.rangeQuery("time")
.gte(format.parse(logInfo.getDate_start()))
.lte(format.parse(logInfo.getDate_end()));
} catch (ParseException e) {
e.printStackTrace();
}
queryBuilder = QueryBuilders.boolQuery().must(queryBuilder_date);
}else if(null != (logInfo.getCamera_ip()) && null == logInfo.getDate_start()){
//带camera_ip参数查询
QueryBuilder queryBuilder_ip = QueryBuilders.termQuery("camera_ip",logInfo.getCamera_ip());
queryBuilder = QueryBuilders.boolQuery().must(queryBuilder_ip);
}else {
//带camera_ip参数查询
//带time范围参数查询
/*QueryBuilder queryBuilder_date = QueryBuilders.rangeQuery("time")
.gte("2019-10-15 10:27:16")
.lte("2019-10-17 10:27:16");*/
/*BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
.must(QueryBuilders.rangeQuery("time").gte(logInfo.getDate_start()));
BoolQueryBuilder endDateQuery = new BoolQueryBuilder()
.must(QueryBuilders.rangeQuery("time").lte(logInfo.getDate_end()));*/
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
QueryBuilder queryBuilder_date = null;
try {
queryBuilder_date = QueryBuilders.rangeQuery("time")
.gte(format.parse(logInfo.getDate_start()))
.lte(format.parse(logInfo.getDate_end()));
} catch (ParseException e) {
e.printStackTrace();
}
QueryBuilder queryBuilder_ip = QueryBuilders.termQuery("camera_ip",logInfo.getCamera_ip());
queryBuilder = QueryBuilders.boolQuery().must(queryBuilder_ip).must(queryBuilder_date);
}
}
return queryBuilder;
}
@Override
public PageWrapper<Logfo> search_info(Logfo logInfo, Pageable pageable) {
try (RestHighLevelClient client = this.getClient();) {
SearchRequest searchRequest = this.getSearchRequest("logstash-order111", "order_log1111");
//searchRequest = this.getSearchRequest_QueryBuilder(searchRequest, queryBuilder);
//MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("coutent",coutent)
// .fuzziness(Fuzziness.AUTO); //模糊匹配
QueryBuilder queryBuilder = this.getQueryBuilder(logInfo);
SearchResponse searchResponse = client.search(this.getSearchRequest_QueryBuilder(searchRequest, queryBuilder), RequestOptions.DEFAULT);
SearchHits hits = searchResponse.getHits();
//System.out.println("查询结果有:" + hits.getTotalHits() + "条");
SearchHit[] searchHits = hits.getHits();
for (SearchHit hit : searchHits) {
String sourceAsString = hit.getSourceAsString(); //取成json串
/*JSONObject jsonObject = JSONObject.fromObject(sourceAsString);//使用json-lib将json字符串转换为json对象
Logfo logInfo_ = (Logfo)JSONObject.toBean(jsonObject,Logfo.class);//生成pojo对象(简单java对象)
JSONObject jsonObj = new JSONObject(sourceAsString);
数据处理。。。。
}
数据处理。。。。
}catch (IOException e) {
e.printStackTrace();
}finally {
System.out.println("Closing elasticSearch client");
if(client != null) {
this.closeClient();
}
}
return pageWrapper;
}