|
@@ -9,6 +9,10 @@ import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
+import java.text.ParseException;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.Calendar;
|
|
|
+import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
|
|
|
|
@Component
|
|
@@ -18,14 +22,25 @@ public class DateAnalysisBuilder implements IEsAnalysisBuilder {
|
|
|
public Integer topN = 10;
|
|
|
public String path = "";
|
|
|
public Boolean ifHaveChild = false;
|
|
|
+ public static final int YEAR = 4;
|
|
|
+ public static final int YEARRANGE = 9;
|
|
|
+ public static final int MONTH = 7;
|
|
|
+ public static final int DAYONE = 8;
|
|
|
+ public static final int DAY = 10;
|
|
|
|
|
|
@Override
|
|
|
- public Aggregation createAnalyseAgg() {
|
|
|
-// Aggregation aggregation = AggregationBuilders.dateHistogram(i -> i.field(field).format("yyyy").calendarInterval(CalendarInterval.Year));
|
|
|
+ public Aggregation createAnalyseAgg() throws ParseException {
|
|
|
Aggregation aggregation = null;
|
|
|
if (StringUtils.isNotEmpty(fieldValue)) {
|
|
|
- if (fieldValue.length() == 4) {
|
|
|
- Query query = QueryBuilders.term(i -> i.field(field).value(fieldValue));
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ if (fieldValue.length() == YEAR) {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy");
|
|
|
+ Date year = format.parse(fieldValue);
|
|
|
+ calendar.setTime(year);
|
|
|
+ calendar.add(Calendar.YEAR, 1);
|
|
|
+ Date yearDate = calendar.getTime();
|
|
|
+ String nextYear = format.format(yearDate);
|
|
|
+ Query query = QueryBuilders.range(j -> j.field(field).from(fieldValue).to(nextYear).format("yyyy"));
|
|
|
Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
|
|
|
aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
|
|
|
.field(field).format("yyyy")
|
|
@@ -33,8 +48,15 @@ public class DateAnalysisBuilder implements IEsAnalysisBuilder {
|
|
|
.aggregations(new HashMap() {{
|
|
|
put("filter_agg", filter);
|
|
|
}}).build();
|
|
|
- } else if (fieldValue.length() == 6) {
|
|
|
- Query query = QueryBuilders.term(i -> i.field(field).value(fieldValue));
|
|
|
+ } else if (fieldValue.length() == MONTH && !fieldValue.contains("Q")
|
|
|
+ && !fieldValue.contains("H")) {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
|
|
|
+ Date month = format.parse(fieldValue);
|
|
|
+ calendar.setTime(month);
|
|
|
+ calendar.add(Calendar.MONTH, 1);
|
|
|
+ Date monthDate = calendar.getTime();
|
|
|
+ String nextMonth = format.format(monthDate);
|
|
|
+ Query query = QueryBuilders.range(j -> j.field(field).from(fieldValue).to(nextMonth).format("yyyy-MM"));
|
|
|
Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
|
|
|
aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
|
|
|
.field(field).format("yyyy-MM")
|
|
@@ -42,21 +64,118 @@ public class DateAnalysisBuilder implements IEsAnalysisBuilder {
|
|
|
.aggregations(new HashMap() {{
|
|
|
put("filter_agg", filter);
|
|
|
}}).build();
|
|
|
- } else if (fieldValue.contains("Q")) {
|
|
|
- Query query = QueryBuilders.term(i -> i.field(field).value(fieldValue));
|
|
|
- Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
|
|
|
- aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
|
|
|
- .field(field).format("yyyy-MM")
|
|
|
- .calendarInterval(CalendarInterval.Quarter).build())
|
|
|
- .aggregations(new HashMap() {{
|
|
|
- put("filter_agg", filter);
|
|
|
- }}).build();
|
|
|
- } else if (fieldValue.contains("H")) {
|
|
|
|
|
|
+ } else if (fieldValue.length() == MONTH && fieldValue.contains("Q")) {
|
|
|
+ if (fieldValue.contains("Q1")) {
|
|
|
+ String firstQuarter = fieldValue.substring(0, fieldValue.indexOf("-"));
|
|
|
+ String firstQuarterDate = firstQuarter + "-01";
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
|
|
|
+ Date quarter = format.parse(firstQuarterDate);
|
|
|
+ calendar.setTime(quarter);
|
|
|
+ calendar.add(Calendar.MONTH, 3);
|
|
|
+ Date quarterDate = calendar.getTime();
|
|
|
+ String nextQuarterDate = format.format(quarterDate);
|
|
|
+ Query query = QueryBuilders.range(j -> j.field(field).from(firstQuarterDate).to(nextQuarterDate).format("yyyy-MM"));
|
|
|
+ Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
|
|
|
+ aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
|
|
|
+ .field(field).format("yyyy-MM")
|
|
|
+ .calendarInterval(CalendarInterval.Quarter).build())
|
|
|
+ .aggregations(new HashMap() {{
|
|
|
+ put("filter_agg", filter);
|
|
|
+ }}).build();
|
|
|
+ } else if (fieldValue.contains("Q2")) {
|
|
|
+ String secondQuarter = fieldValue.substring(0, fieldValue.indexOf("-"));
|
|
|
+ String secondQuarterDate = secondQuarter + "-04";
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
|
|
|
+ Date quarter = format.parse(secondQuarterDate);
|
|
|
+ calendar.setTime(quarter);
|
|
|
+ calendar.add(Calendar.MONTH, 3);
|
|
|
+ Date quarterDate = calendar.getTime();
|
|
|
+ String nextQuarterDate = format.format(quarterDate);
|
|
|
+ Query query = QueryBuilders.range(j -> j.field(field).from(secondQuarterDate).to(nextQuarterDate).format("yyyy-MM"));
|
|
|
+ Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
|
|
|
+ aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
|
|
|
+ .field(field).format("yyyy-MM")
|
|
|
+ .calendarInterval(CalendarInterval.Quarter).build())
|
|
|
+ .aggregations(new HashMap() {{
|
|
|
+ put("filter_agg", filter);
|
|
|
+ }}).build();
|
|
|
+ } else if (fieldValue.contains("Q3")) {
|
|
|
+ String thirdQuarter = fieldValue.substring(0, fieldValue.indexOf("-"));
|
|
|
+ String thirdQuarterDate = thirdQuarter + "-07";
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
|
|
|
+ Date quarter = format.parse(thirdQuarterDate);
|
|
|
+ calendar.setTime(quarter);
|
|
|
+ calendar.add(Calendar.MONTH, 3);
|
|
|
+ Date quarterDate = calendar.getTime();
|
|
|
+ String nextQuarterDate = format.format(quarterDate);
|
|
|
+ Query query = QueryBuilders.range(j -> j.field(field).from(thirdQuarterDate).to(nextQuarterDate).format("yyyy-MM"));
|
|
|
+ Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
|
|
|
+ aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
|
|
|
+ .field(field).format("yyyy-MM")
|
|
|
+ .calendarInterval(CalendarInterval.Quarter).build())
|
|
|
+ .aggregations(new HashMap() {{
|
|
|
+ put("filter_agg", filter);
|
|
|
+ }}).build();
|
|
|
+ } else if (fieldValue.contains("Q4")) {
|
|
|
+ String fourthQuarter = fieldValue.substring(0, fieldValue.indexOf("-"));
|
|
|
+ String fourthQuarterDate = fourthQuarter + "-10";
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
|
|
|
+ Date quarter = format.parse(fourthQuarterDate);
|
|
|
+ calendar.setTime(quarter);
|
|
|
+ calendar.add(Calendar.MONTH, 3);
|
|
|
+ Date quarterDate = calendar.getTime();
|
|
|
+ String nextQuarterDate = format.format(quarterDate);
|
|
|
+ Query query = QueryBuilders.range(j -> j.field(field).from(fourthQuarterDate).to(nextQuarterDate).format("yyyy-MM"));
|
|
|
+ Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
|
|
|
+ aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
|
|
|
+ .field(field).format("yyyy-MM")
|
|
|
+ .calendarInterval(CalendarInterval.Quarter).build())
|
|
|
+ .aggregations(new HashMap() {{
|
|
|
+ put("filter_agg", filter);
|
|
|
+ }}).build();
|
|
|
+ }
|
|
|
+ } else if (fieldValue.length() == MONTH && fieldValue.contains("H")) {
|
|
|
+ if (fieldValue.contains("H1")) {
|
|
|
+ String firstHalfYear = fieldValue.substring(0, fieldValue.indexOf("-"));
|
|
|
+ String firstHalfYearDate = firstHalfYear + "-01";
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
|
|
|
+ Date halfYear = format.parse(firstHalfYearDate);
|
|
|
+ calendar.setTime(halfYear);
|
|
|
+ calendar.add(Calendar.MONTH, 6);
|
|
|
+ Date halfYearDate = calendar.getTime();
|
|
|
+ String nextHalfYearDate = format.format(halfYearDate);
|
|
|
+ Query query = QueryBuilders.range(j -> j.field(field).from(firstHalfYearDate).to(nextHalfYearDate).format("yyyy-MM"));
|
|
|
+ Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
|
|
|
+ aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
|
|
|
+ .field(field).format("yyyy-MM")
|
|
|
+ .calendarInterval(CalendarInterval.Month).build())
|
|
|
+ .aggregations(new HashMap() {{
|
|
|
+ put("filter_agg", filter);
|
|
|
+ }}).build();
|
|
|
+ } else if (fieldValue.contains("H2")) {
|
|
|
+ String secondHalfYear = fieldValue.substring(0, fieldValue.indexOf("-"));
|
|
|
+ String secondHalfYearDate = secondHalfYear + "-07";
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
|
|
|
+ Date halfYear = format.parse(secondHalfYearDate);
|
|
|
+ calendar.setTime(halfYear);
|
|
|
+ calendar.add(Calendar.MONTH, 6);
|
|
|
+ Date halfYearDate = calendar.getTime();
|
|
|
+ String nextHalfYearDate = format.format(halfYearDate);
|
|
|
+ Query query = QueryBuilders.range(j -> j.field(field).from(secondHalfYearDate).to(nextHalfYearDate).format("yyyy-MM"));
|
|
|
+ Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
|
|
|
+ aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
|
|
|
+ .field(field).format("yyyy-MM")
|
|
|
+ .calendarInterval(CalendarInterval.Month).build())
|
|
|
+ .aggregations(new HashMap() {{
|
|
|
+ put("filter_agg", filter);
|
|
|
+ }}).build();
|
|
|
+ }
|
|
|
} else {
|
|
|
String start = fieldValue.substring(0, fieldValue.indexOf("-"));
|
|
|
- String end = fieldValue.substring(fieldValue.indexOf("-"));
|
|
|
- Query query = QueryBuilders.range(j -> j.field(field).from(start).to(end));
|
|
|
+ String end = fieldValue.substring(fieldValue.indexOf("-") + 1);
|
|
|
+ String nextYear = String.valueOf(Integer.parseInt(end) + 1);
|
|
|
+ Query query = QueryBuilders.range(j -> j.field(field).from(start).to(nextYear).format("yyyy"));
|
|
|
Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
|
|
|
aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
|
|
|
.field(field).format("yyyy")
|
|
@@ -65,7 +184,6 @@ public class DateAnalysisBuilder implements IEsAnalysisBuilder {
|
|
|
put("filter_agg", filter);
|
|
|
}}).build();
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
return aggregation;
|
|
|
}
|