add pre/post zone, pre/post offset, and factor to date histogram builder
This commit is contained in:
parent
1b082b00ba
commit
0bf61ab6c8
|
@ -20,6 +20,7 @@
|
||||||
package org.elasticsearch.search.facet.datehistogram;
|
package org.elasticsearch.search.facet.datehistogram;
|
||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.index.query.FilterBuilder;
|
import org.elasticsearch.index.query.FilterBuilder;
|
||||||
import org.elasticsearch.search.builder.SearchSourceBuilderException;
|
import org.elasticsearch.search.builder.SearchSourceBuilderException;
|
||||||
|
@ -30,14 +31,16 @@ import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A facet builder of date histogram facets.
|
* A facet builder of date histogram facets.
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class DateHistogramFacetBuilder extends AbstractFacetBuilder {
|
public class DateHistogramFacetBuilder extends AbstractFacetBuilder {
|
||||||
private String keyFieldName;
|
private String keyFieldName;
|
||||||
private String valueFieldName;
|
private String valueFieldName;
|
||||||
private String interval = null;
|
private String interval = null;
|
||||||
private String zone = null;
|
private String preZone = null;
|
||||||
|
private String postZone = null;
|
||||||
|
long preOffset = 0;
|
||||||
|
long postOffset = 0;
|
||||||
|
float factor = 1.0f;
|
||||||
private DateHistogramFacet.ComparatorType comparatorType;
|
private DateHistogramFacet.ComparatorType comparatorType;
|
||||||
|
|
||||||
private String valueScript;
|
private String valueScript;
|
||||||
|
@ -112,11 +115,51 @@ public class DateHistogramFacetBuilder extends AbstractFacetBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the time zone to use when bucketing the values. Can either be in the form of "-10:00" or
|
* Sets the pre time zone to use when bucketing the values. This timezone will be applied before
|
||||||
|
* rounding off the result.
|
||||||
|
* <p/>
|
||||||
|
* Can either be in the form of "-10:00" or
|
||||||
* one of the values listed here: http://joda-time.sourceforge.net/timezones.html.
|
* one of the values listed here: http://joda-time.sourceforge.net/timezones.html.
|
||||||
*/
|
*/
|
||||||
public DateHistogramFacetBuilder zone(String zone) {
|
public DateHistogramFacetBuilder preZone(String preZone) {
|
||||||
this.zone = zone;
|
this.preZone = preZone;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the post time zone to use when bucketing the values. This timezone will be applied after
|
||||||
|
* rounding off the result.
|
||||||
|
* <p/>
|
||||||
|
* Can either be in the form of "-10:00" or
|
||||||
|
* one of the values listed here: http://joda-time.sourceforge.net/timezones.html.
|
||||||
|
*/
|
||||||
|
public DateHistogramFacetBuilder postZone(String postZone) {
|
||||||
|
this.postZone = postZone;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a pre offset that will be applied before rounding the results.
|
||||||
|
*/
|
||||||
|
public DateHistogramFacetBuilder preOffset(TimeValue preOffset) {
|
||||||
|
this.preOffset = preOffset.millis();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a post offset that will be applied after rounding the results.
|
||||||
|
*/
|
||||||
|
public DateHistogramFacetBuilder postOffset(TimeValue postOffset) {
|
||||||
|
this.postOffset = postOffset.millis();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the factor that will be used to multiply the value with before and divided
|
||||||
|
* by after the rounding of the results.
|
||||||
|
*/
|
||||||
|
public DateHistogramFacetBuilder factor(float factor) {
|
||||||
|
this.factor = factor;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,8 +233,20 @@ public class DateHistogramFacetBuilder extends AbstractFacetBuilder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
builder.field("interval", interval);
|
builder.field("interval", interval);
|
||||||
if (zone != null) {
|
if (preZone != null) {
|
||||||
builder.field("time_zone", zone);
|
builder.field("pre_zone", preZone);
|
||||||
|
}
|
||||||
|
if (postZone != null) {
|
||||||
|
builder.field("post_zone", postZone);
|
||||||
|
}
|
||||||
|
if (preOffset != 0) {
|
||||||
|
builder.field("pre_offset", preOffset);
|
||||||
|
}
|
||||||
|
if (postOffset != 0) {
|
||||||
|
builder.field("post_offset", postOffset);
|
||||||
|
}
|
||||||
|
if (factor != 1.0f) {
|
||||||
|
builder.field("factor", factor);
|
||||||
}
|
}
|
||||||
if (comparatorType != null) {
|
if (comparatorType != null) {
|
||||||
builder.field("comparator", comparatorType.description());
|
builder.field("comparator", comparatorType.description());
|
||||||
|
|
|
@ -1398,10 +1398,11 @@ public class SimpleFacetsTests extends AbstractNodesTests {
|
||||||
SearchResponse searchResponse = client.prepareSearch()
|
SearchResponse searchResponse = client.prepareSearch()
|
||||||
.setQuery(matchAllQuery())
|
.setQuery(matchAllQuery())
|
||||||
.addFacet(dateHistogramFacet("stats1").field("date").interval("day"))
|
.addFacet(dateHistogramFacet("stats1").field("date").interval("day"))
|
||||||
.addFacet(dateHistogramFacet("stats2").field("date").interval("day").zone("-02:00"))
|
.addFacet(dateHistogramFacet("stats2").field("date").interval("day").preZone("-02:00"))
|
||||||
.addFacet(dateHistogramFacet("stats3").field("date").valueField("num").interval("day").zone("-02:00"))
|
.addFacet(dateHistogramFacet("stats3").field("date").valueField("num").interval("day").preZone("-02:00"))
|
||||||
.addFacet(dateHistogramFacet("stats4").field("date").valueScript("doc['num'].value * 2").interval("day").zone("-02:00"))
|
.addFacet(dateHistogramFacet("stats4").field("date").valueScript("doc['num'].value * 2").interval("day").preZone("-02:00"))
|
||||||
.addFacet(dateHistogramFacet("stats5").field("date").interval("24h"))
|
.addFacet(dateHistogramFacet("stats5").field("date").interval("24h"))
|
||||||
|
.addFacet(dateHistogramFacet("stats6").field("date").valueField("num").interval("day").preZone("-02:00").postZone("-02:00"))
|
||||||
.execute().actionGet();
|
.execute().actionGet();
|
||||||
|
|
||||||
if (searchResponse.failedShards() > 0) {
|
if (searchResponse.failedShards() > 0) {
|
||||||
|
@ -1458,6 +1459,16 @@ public class SimpleFacetsTests extends AbstractNodesTests {
|
||||||
assertThat(facet.entries().get(0).count(), equalTo(2l));
|
assertThat(facet.entries().get(0).count(), equalTo(2l));
|
||||||
assertThat(facet.entries().get(1).time(), equalTo(utcTimeInMillis("2009-03-06")));
|
assertThat(facet.entries().get(1).time(), equalTo(utcTimeInMillis("2009-03-06")));
|
||||||
assertThat(facet.entries().get(1).count(), equalTo(1l));
|
assertThat(facet.entries().get(1).count(), equalTo(1l));
|
||||||
|
|
||||||
|
facet = searchResponse.facets().facet("stats6");
|
||||||
|
assertThat(facet.name(), equalTo("stats6"));
|
||||||
|
assertThat(facet.entries().size(), equalTo(2));
|
||||||
|
assertThat(facet.entries().get(0).time(), equalTo(utcTimeInMillis("2009-03-04") - TimeValue.timeValueHours(2).millis()));
|
||||||
|
assertThat(facet.entries().get(0).count(), equalTo(1l));
|
||||||
|
assertThat(facet.entries().get(0).total(), equalTo(1d));
|
||||||
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue