|
@@ -6,8 +6,10 @@ import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
|
|
|
@Component
|
|
|
public class ChildCountBuilder implements IEsCountBuilder{
|
|
@@ -24,48 +26,32 @@ public class ChildCountBuilder implements IEsCountBuilder{
|
|
|
public Aggregation createAggregation() {
|
|
|
Aggregation terms = null;
|
|
|
if (ifHaveChild) {
|
|
|
- if (StringUtils.isNotEmpty(valueOne)) {
|
|
|
-
|
|
|
- } else {
|
|
|
- Aggregation agg = AggregationBuilders.terms(i -> i.field("custom_field.stats_value.raw").size(topN));
|
|
|
-
|
|
|
- Query query = QueryBuilders.term(i -> i.field("custom_field.field").value(fieldId));
|
|
|
- Aggregation filtersAgg = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
|
|
|
- .filters(i -> i.array(Arrays.asList(query))).build())
|
|
|
- .aggregations(new HashMap() {{
|
|
|
- put("filters_agg", agg);
|
|
|
- }}).build();
|
|
|
- terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
|
|
|
- .field(field).size(topN).build())
|
|
|
- .aggregations(new HashMap() {{
|
|
|
- put("filter_agg", filtersAgg);
|
|
|
- }}).build();
|
|
|
+ Aggregation agg = null;
|
|
|
+ List<Query> queryList = new ArrayList<>();
|
|
|
+ if (StringUtils.isNotEmpty(valueOne) && StringUtils.isEmpty(valueTwo)) {
|
|
|
+ String str = "*";
|
|
|
+ String s = str.concat(valueOne).concat("*");
|
|
|
+ Query query = QueryBuilders.wildcard(i -> i.field("custom_field.field_value.raw").value(s));
|
|
|
+ queryList.add(query);
|
|
|
+ } else if (StringUtils.isNotEmpty(valueOne) && StringUtils.isNotEmpty(valueTwo)) {
|
|
|
+
|
|
|
}
|
|
|
+ terms = this.getAggregation(queryList);
|
|
|
|
|
|
} else {
|
|
|
+ Aggregation agg = null;
|
|
|
+ List<Query> queryList = new ArrayList<>();
|
|
|
if (StringUtils.isNotEmpty(valueOne) && StringUtils.isEmpty(valueTwo)) {
|
|
|
String str = "*";
|
|
|
String s = str.concat(valueOne).concat("*");
|
|
|
Query query = QueryBuilders.wildcard(i -> i.field("custom_field.field_value.raw").value(s));
|
|
|
- Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
|
|
|
+ queryList.add(query);
|
|
|
} else if (StringUtils.isNotEmpty(valueOne) && StringUtils.isNotEmpty(valueTwo)) {
|
|
|
|
|
|
- } else {
|
|
|
- Aggregation agg = AggregationBuilders.terms(i -> i.field("custom_field.field_value.raw").size(topN));
|
|
|
- Query query = QueryBuilders.term(i -> i.field("custom_field.field").value(fieldId));
|
|
|
- Aggregation filtersAgg = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
|
|
|
- .filters(i -> i.array(Arrays.asList(query))).build())
|
|
|
- .aggregations(new HashMap() {{
|
|
|
- put("filters_agg", agg);
|
|
|
- }}).build();
|
|
|
-
|
|
|
- terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
|
|
|
- .field(field).size(topN).build())
|
|
|
- .aggregations(new HashMap() {{
|
|
|
- put("filter_agg", filtersAgg);
|
|
|
- }}).build();
|
|
|
}
|
|
|
+ terms = this.getAggregation(queryList);
|
|
|
}
|
|
|
+
|
|
|
Aggregation finalTerms = terms;
|
|
|
Aggregation aggregation = new Aggregation.Builder().children(new ChildrenAggregation.Builder()
|
|
|
.type("project_customfield").build()).aggregations(new HashMap() {{
|
|
@@ -74,6 +60,31 @@ public class ChildCountBuilder implements IEsCountBuilder{
|
|
|
return aggregation;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 通用获取Aggregation
|
|
|
+ * @param queryList
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private Aggregation getAggregation(List<Query> queryList) {
|
|
|
+ Query query = QueryBuilders.term(i -> i.field("custom_field.field").value(fieldId));
|
|
|
+ queryList.add(query);
|
|
|
+
|
|
|
+ Aggregation filtersAgg = AggregationBuilders.filter(n -> n.bool(k -> k.must(queryList)));
|
|
|
+
|
|
|
+ Aggregation termAgg = new Aggregation.Builder().terms(new TermsAggregation.Builder()
|
|
|
+ .field("custom_field.field_value.raw").build())
|
|
|
+ .aggregations(new HashMap() {{
|
|
|
+ put("filterAgg", filtersAgg);
|
|
|
+ }}).build();
|
|
|
+
|
|
|
+ Aggregation terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
|
|
|
+ .field(field).size(topN).build())
|
|
|
+ .aggregations(new HashMap() {{
|
|
|
+ put("filter_agg", termAgg);
|
|
|
+ }}).build();
|
|
|
+ return terms;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public String getField() {
|
|
|
return field;
|