mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-07 13:38:49 +00:00
Date Histogram Facet: Add quarter
as an interval, closes #1884.
This commit is contained in:
parent
a96391224a
commit
a4fb33dbc3
@ -20,7 +20,10 @@
|
||||
package org.elasticsearch.common.joda;
|
||||
|
||||
import org.elasticsearch.common.Strings;
|
||||
import org.joda.time.DateTimeZone;
|
||||
import org.joda.time.*;
|
||||
import org.joda.time.field.DividedDateTimeField;
|
||||
import org.joda.time.field.OffsetDateTimeField;
|
||||
import org.joda.time.field.ScaledDurationField;
|
||||
import org.joda.time.format.*;
|
||||
|
||||
/**
|
||||
@ -132,4 +135,29 @@ public class Joda {
|
||||
}
|
||||
return new FormatDateTimeFormatter(input, formatter.withZone(DateTimeZone.UTC));
|
||||
}
|
||||
|
||||
|
||||
public static final DurationFieldType Quarters = new DurationFieldType("quarters") {
|
||||
private static final long serialVersionUID = -8167713675442491871L;
|
||||
|
||||
public DurationField getField(Chronology chronology) {
|
||||
return new ScaledDurationField(chronology.months(), Quarters, 3);
|
||||
}
|
||||
};
|
||||
|
||||
public static final DateTimeFieldType QuarterOfYear = new DateTimeFieldType("quarterOfYear") {
|
||||
private static final long serialVersionUID = -5677872459807379123L;
|
||||
|
||||
public DurationFieldType getDurationType() {
|
||||
return Quarters;
|
||||
}
|
||||
|
||||
public DurationFieldType getRangeDurationType() {
|
||||
return DurationFieldType.years();
|
||||
}
|
||||
|
||||
public DateTimeField getField(Chronology chronology) {
|
||||
return new OffsetDateTimeField(new DividedDateTimeField(new OffsetDateTimeField(chronology.monthOfYear(), -1), QuarterOfYear, 3), 1);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableMap;
|
||||
import org.elasticsearch.common.collect.MapBuilder;
|
||||
import org.elasticsearch.common.component.AbstractComponent;
|
||||
import org.elasticsearch.common.inject.Inject;
|
||||
import org.elasticsearch.common.joda.Joda;
|
||||
import org.elasticsearch.common.joda.TimeZoneRounding;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.unit.TimeValue;
|
||||
@ -58,6 +59,7 @@ public class DateHistogramFacetProcessor extends AbstractComponent implements Fa
|
||||
dateFieldParsers = MapBuilder.<String, DateFieldParser>newMapBuilder()
|
||||
.put("year", new DateFieldParser.YearOfCentury())
|
||||
.put("1y", new DateFieldParser.YearOfCentury())
|
||||
.put("quarter", new DateFieldParser.Quarter())
|
||||
.put("month", new DateFieldParser.MonthOfYear())
|
||||
.put("1m", new DateFieldParser.MonthOfYear())
|
||||
.put("week", new DateFieldParser.WeekOfWeekyear())
|
||||
@ -227,6 +229,13 @@ public class DateHistogramFacetProcessor extends AbstractComponent implements Fa
|
||||
}
|
||||
}
|
||||
|
||||
static class Quarter implements DateFieldParser {
|
||||
@Override
|
||||
public DateTimeField parse(Chronology chronology) {
|
||||
return Joda.QuarterOfYear.getField(chronology);
|
||||
}
|
||||
}
|
||||
|
||||
static class MonthOfYear implements DateFieldParser {
|
||||
@Override
|
||||
public DateTimeField parse(Chronology chronology) {
|
||||
|
@ -1403,6 +1403,7 @@ public class SimpleFacetsTests extends AbstractNodesTests {
|
||||
.addFacet(dateHistogramFacet("stats4").field("date").valueScript("doc['num'].value * 2").interval("day").preZone("-02:00"))
|
||||
.addFacet(dateHistogramFacet("stats5").field("date").interval("24h"))
|
||||
.addFacet(dateHistogramFacet("stats6").field("date").valueField("num").interval("day").preZone("-02:00").postZone("-02:00"))
|
||||
.addFacet(dateHistogramFacet("stats7").field("date").interval("quarter"))
|
||||
.execute().actionGet();
|
||||
|
||||
if (searchResponse.failedShards() > 0) {
|
||||
@ -1469,6 +1470,11 @@ public class SimpleFacetsTests extends AbstractNodesTests {
|
||||
assertThat(facet.entries().get(1).time(), equalTo(utcTimeInMillis("2009-03-05") - TimeValue.timeValueHours(2).millis()));
|
||||
assertThat(facet.entries().get(1).count(), equalTo(2l));
|
||||
assertThat(facet.entries().get(1).total(), equalTo(5d));
|
||||
|
||||
facet = searchResponse.facets().facet("stats7");
|
||||
assertThat(facet.name(), equalTo("stats7"));
|
||||
assertThat(facet.entries().size(), equalTo(1));
|
||||
assertThat(facet.entries().get(0).time(), equalTo(utcTimeInMillis("2009-01-01")));
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user