|
@@ -1,11 +1,12 @@
|
|
package com.example.nngkxxdp.elk;
|
|
package com.example.nngkxxdp.elk;
|
|
|
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
-import java.util.HashMap;
|
|
|
|
-import java.util.List;
|
|
|
|
-import java.util.Map;
|
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
|
import org.elasticsearch.action.search.SearchRequest;
|
|
import org.elasticsearch.action.search.SearchRequest;
|
|
|
|
+import org.elasticsearch.action.search.SearchRequestBuilder;
|
|
|
|
+import org.elasticsearch.search.aggregations.bucket.terms.Terms;
|
|
|
|
+import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;
|
|
import org.elasticsearch.action.search.SearchResponse;
|
|
import org.elasticsearch.action.search.SearchResponse;
|
|
import org.elasticsearch.client.RequestOptions;
|
|
import org.elasticsearch.client.RequestOptions;
|
|
import org.elasticsearch.client.RestHighLevelClient;
|
|
import org.elasticsearch.client.RestHighLevelClient;
|
|
@@ -14,7 +15,10 @@ import org.elasticsearch.index.query.QueryBuilder;
|
|
import org.elasticsearch.index.query.QueryBuilders;
|
|
import org.elasticsearch.index.query.QueryBuilders;
|
|
import org.elasticsearch.script.Script;
|
|
import org.elasticsearch.script.Script;
|
|
import org.elasticsearch.search.SearchHit;
|
|
import org.elasticsearch.search.SearchHit;
|
|
|
|
+import org.elasticsearch.search.aggregations.*;
|
|
|
|
+import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
|
|
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
|
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
|
|
|
+import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
|
|
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
|
|
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
|
|
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
|
|
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
|
|
import org.elasticsearch.search.sort.ScriptSortBuilder;
|
|
import org.elasticsearch.search.sort.ScriptSortBuilder;
|
|
@@ -416,6 +420,7 @@ public class ElkController {
|
|
type = 0;
|
|
type = 0;
|
|
}
|
|
}
|
|
BoolQueryBuilder boolQueryBuilder3 = new BoolQueryBuilder();
|
|
BoolQueryBuilder boolQueryBuilder3 = new BoolQueryBuilder();
|
|
|
|
+ // 默认全部文件 查询所有
|
|
if (type == 0) {
|
|
if (type == 0) {
|
|
List<QueryBuilder> should1 = boolQueryBuilder3.should();
|
|
List<QueryBuilder> should1 = boolQueryBuilder3.should();
|
|
should1.add(QueryBuilders.matchQuery(articleType, 1));
|
|
should1.add(QueryBuilders.matchQuery(articleType, 1));
|
|
@@ -455,20 +460,38 @@ public class ElkController {
|
|
}
|
|
}
|
|
searchSourceBuilder.highlighter(hb);
|
|
searchSourceBuilder.highlighter(hb);
|
|
}
|
|
}
|
|
|
|
+ // 分组查询 根据主题类型分类
|
|
|
|
+ TermsAggregationBuilder aggregation = AggregationBuilders.terms("childtype")
|
|
|
|
+ //聚合字段名
|
|
|
|
+ .field("childtype.keyword")
|
|
|
|
+ .size(300)
|
|
|
|
+ // 降序
|
|
|
|
+ .order(BucketOrder.count(false));
|
|
// 排序
|
|
// 排序
|
|
searchSourceBuilder.sort("_score", SortOrder.DESC);
|
|
searchSourceBuilder.sort("_score", SortOrder.DESC);
|
|
searchSourceBuilder.sort(pubTimeStr, SortOrder.DESC);
|
|
searchSourceBuilder.sort(pubTimeStr, SortOrder.DESC);
|
|
|
|
+
|
|
// 开始位置
|
|
// 开始位置
|
|
searchSourceBuilder.from((page - 1) * limit);
|
|
searchSourceBuilder.from((page - 1) * limit);
|
|
// 查询条数
|
|
// 查询条数
|
|
searchSourceBuilder.size(limit);
|
|
searchSourceBuilder.size(limit);
|
|
|
|
+ searchSourceBuilder.aggregation(aggregation);
|
|
searchRequest.source(searchSourceBuilder);
|
|
searchRequest.source(searchSourceBuilder);
|
|
System.out.println(searchSourceBuilder);
|
|
System.out.println(searchSourceBuilder);
|
|
// 执行搜索
|
|
// 执行搜索
|
|
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
|
|
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
|
|
SearchHit[] s = searchResponse.getHits().getHits();
|
|
SearchHit[] s = searchResponse.getHits().getHits();
|
|
|
|
+ // 查询分组信息
|
|
|
|
+ Terms terms = searchResponse.getAggregations().get("childtype");
|
|
|
|
+ List<? extends Bucket> buckets = terms.getBuckets();
|
|
|
|
+ Map<Object, Object> groupInfo = new HashMap<>();
|
|
|
|
+ for(Bucket bt : buckets) {
|
|
|
|
+ groupInfo.put(bt.getKey(), bt.getDocCount());
|
|
|
|
+ System.err.println(bt.getKey() + " " + bt.getDocCount());
|
|
|
|
+ }
|
|
JSONArray array = new JSONArray();
|
|
JSONArray array = new JSONArray();
|
|
JSONArray highlightArr = new JSONArray();
|
|
JSONArray highlightArr = new JSONArray();
|
|
|
|
+
|
|
for (int i = 0; i < s.length; i++) {
|
|
for (int i = 0; i < s.length; i++) {
|
|
Map<String, HighlightField> hig = s[i].getHighlightFields();
|
|
Map<String, HighlightField> hig = s[i].getHighlightFields();
|
|
JSONObject jsonObject = JSONObject.parseObject(s[i].toString());
|
|
JSONObject jsonObject = JSONObject.parseObject(s[i].toString());
|
|
@@ -483,6 +506,7 @@ public class ElkController {
|
|
Map<String, Object> map = new HashMap<>();
|
|
Map<String, Object> map = new HashMap<>();
|
|
map.put("data", array);
|
|
map.put("data", array);
|
|
map.put("highlightArr", highlightArr);
|
|
map.put("highlightArr", highlightArr);
|
|
|
|
+ map.put("groupInfo", groupInfo);
|
|
return SendUtil.send(true, null, map);
|
|
return SendUtil.send(true, null, map);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -535,4 +559,28 @@ public class ElkController {
|
|
public Map<String, Object> getChildTypeCount(String typeName) {
|
|
public Map<String, Object> getChildTypeCount(String typeName) {
|
|
return SendUtil.send(true, null, elkService.getChildTypeCount(typeName));
|
|
return SendUtil.send(true, null, elkService.getChildTypeCount(typeName));
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+// public Map<String, Long> getTypeGroupBy() throws IOException {
|
|
|
|
+// Map<String, Long> map = new LinkedHashMap<>();
|
|
|
|
+// SearchRequest searchRequest = new SearchRequest();
|
|
|
|
+// searchRequest.indices("record_traffic*");
|
|
|
|
+// //指定分组字段,terms指定别名,field指定字段名
|
|
|
|
+// TermsAggregationBuilder aggregation = AggregationBuilders.terms("childtype")
|
|
|
|
+// //聚合字段名
|
|
|
|
+// .field("childtype.keyword")
|
|
|
|
+// .size(100)
|
|
|
|
+// // 降序
|
|
|
|
+// .order(BucketOrder.count(false));
|
|
|
|
+// SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
|
|
|
+// searchSourceBuilder.aggregation(aggregation);
|
|
|
|
+// //执行查询
|
|
|
|
+// searchRequest.source(searchSourceBuilder);
|
|
|
|
+// SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
|
|
|
|
+// Terms byAgeAggregation = response.getAggregations().get("content");
|
|
|
|
+// List<? extends Terms.Bucket> buckets = byAgeAggregation.getBuckets();
|
|
|
|
+// for (Terms.Bucket buck: buckets) {
|
|
|
|
+// map.put(buck.getKeyAsString(), buck.getDocCount());
|
|
|
|
+// }
|
|
|
|
+// return map;
|
|
|
|
+// }
|
|
}
|
|
}
|