|
@@ -24,10 +24,13 @@ import cn.cslg.pas.service.common.PatentStarApiService;
|
|
|
import cn.cslg.pas.service.query.FormatQueryService;
|
|
|
import co.elastic.clients.elasticsearch.ElasticsearchClient;
|
|
|
import co.elastic.clients.elasticsearch._types.SortOrder;
|
|
|
+import co.elastic.clients.elasticsearch._types.aggregations.*;
|
|
|
import co.elastic.clients.elasticsearch._types.query_dsl.*;
|
|
|
import co.elastic.clients.elasticsearch.core.*;
|
|
|
import co.elastic.clients.elasticsearch.core.search.Hit;
|
|
|
+import co.elastic.clients.json.JsonData;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
@@ -128,6 +131,7 @@ public class EsService {
|
|
|
Integer projectId = queryRequest.getProjectId();
|
|
|
Long current = queryRequest.getCurrent();
|
|
|
Long size = queryRequest.getSize();
|
|
|
+ String groupField = queryRequest.getGroupField();
|
|
|
//判断表达式
|
|
|
if (queryRequest instanceof StringRequest) {
|
|
|
searchCondition = ((StringRequest) queryRequest).getSearchQuery();
|
|
@@ -172,8 +176,38 @@ public class EsService {
|
|
|
//格式化检索式
|
|
|
//3. 从es中检索数据
|
|
|
Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
|
|
|
- //4. 返回数据
|
|
|
- builder.query(q);
|
|
|
+ //判断同族分组
|
|
|
+ if (StringUtils.isNotEmpty(groupField)) {
|
|
|
+ String str = "";
|
|
|
+ switch (groupField) {
|
|
|
+ case "simpleFamilyId":
|
|
|
+ str = "simple_family_id";
|
|
|
+ break;
|
|
|
+ case "inpadocFamilyId":
|
|
|
+ str = "inpadoc_family_id";
|
|
|
+ break;
|
|
|
+ case "patsnapFamilyId":
|
|
|
+ str = "patsnap_family_id";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ String esField = str;
|
|
|
+ Aggregation hits = AggregationBuilders.topHits(i -> i.size(1));
|
|
|
+ Aggregation aggregation = new Aggregation.Builder().terms(new TermsAggregation.Builder()
|
|
|
+ .field(esField).build())
|
|
|
+ .aggregations(new HashMap() {{
|
|
|
+ put("hitAgg", hits);
|
|
|
+ }}).build();
|
|
|
+ Aggregation filtersAgg = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
|
|
|
+ .filters(i -> i.array(Arrays.asList(q))).build())
|
|
|
+ .aggregations(new HashMap() {{
|
|
|
+ put("filtersAgg", aggregation);
|
|
|
+ }}).build();
|
|
|
+ builder.aggregations("Agg", filtersAgg);
|
|
|
+ } else {
|
|
|
+ //4. 返回数据
|
|
|
+ builder.query(q);
|
|
|
+ }
|
|
|
+
|
|
|
//排序
|
|
|
List<OrderDTO> dtoList = queryRequest.getOrderDTOList();
|
|
|
if (!CollectionUtils.isEmpty(dtoList)) {
|
|
@@ -206,15 +240,37 @@ public class EsService {
|
|
|
|
|
|
SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
|
|
|
List<PatentColumnDTO> list = new ArrayList<>();
|
|
|
- List<Hit<Patent>> hits = response.hits().hits();
|
|
|
- long total = response.hits().total().value();
|
|
|
- for (Hit<Patent> hit : hits) {
|
|
|
- Patent esMess = hit.source();
|
|
|
- PatentColumnDTO columnDTO = new PatentColumnDTO();
|
|
|
+ long total = 0L;
|
|
|
+ if (StringUtils.isNotEmpty(groupField)) {
|
|
|
+ Aggregate agg = response.aggregations().get("Agg");
|
|
|
+ List<FiltersBucket> buckets = agg.filters().buckets().array();
|
|
|
+ for (FiltersBucket bucket : buckets) {
|
|
|
+ Aggregate filtersAgg = bucket.aggregations().get("filtersAgg");
|
|
|
+ List<StringTermsBucket> termsBuckets = filtersAgg.sterms().buckets().array();
|
|
|
+ for (StringTermsBucket termsBucket : termsBuckets) {
|
|
|
+ Aggregate hitAgg = termsBucket.aggregations().get("hitAgg");
|
|
|
+ total = hitAgg.topHits().hits().total().value();
|
|
|
+ List<Hit<JsonData>> hits = hitAgg.topHits().hits().hits();
|
|
|
+ hits.forEach(hit -> {
|
|
|
+ JsonData data = hit.source();
|
|
|
+ Patent patent1 = JSONObject.parseObject(String.valueOf(data), Patent.class);
|
|
|
+ PatentColumnDTO columnDTO = new PatentColumnDTO();
|
|
|
+ BeanUtils.copyProperties(patent1, columnDTO);
|
|
|
+ list.add(columnDTO);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ List<Hit<Patent>> hits = response.hits().hits();
|
|
|
+ total = response.hits().total().value();
|
|
|
+ for (Hit<Patent> hit : hits) {
|
|
|
+ Patent esMess = hit.source();
|
|
|
+ PatentColumnDTO columnDTO = new PatentColumnDTO();
|
|
|
// columnDTO.setPatentNo(esMess.getPatentNo());
|
|
|
- BeanUtils.copyProperties(esMess, columnDTO);
|
|
|
- list.add(columnDTO);
|
|
|
+ BeanUtils.copyProperties(esMess, columnDTO);
|
|
|
+ list.add(columnDTO);
|
|
|
|
|
|
+ }
|
|
|
}
|
|
|
this.loadCoulumnDTO(list);
|
|
|
dto.setTotal(total);
|