Dates accessed from scripts should use UTC timezone
this was broken in the field data refactoring we did in 0.90, fixes #3091
This commit is contained in:
parent
24fccc91d8
commit
b4d75a50bf
|
@ -39,9 +39,9 @@ public abstract class AtomicNumericFieldData implements AtomicFieldData<ScriptDo
|
|||
@Override
|
||||
public ScriptDocValues getScriptValues() {
|
||||
if (isFloat) {
|
||||
return new ScriptDocValues.NumericDouble(getDoubleValues());
|
||||
return new ScriptDocValues.Doubles(getDoubleValues());
|
||||
} else {
|
||||
return new ScriptDocValues.NumericLong(getLongValues());
|
||||
return new ScriptDocValues.Longs(getLongValues());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,14 +19,7 @@
|
|||
|
||||
package org.elasticsearch.index.fielddata;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.lucene.util.ArrayUtil;
|
||||
import org.apache.lucene.util.BytesRef;
|
||||
import org.apache.lucene.util.CharsRef;
|
||||
import org.apache.lucene.util.RamUsageEstimator;
|
||||
import org.apache.lucene.util.UnicodeUtil;
|
||||
import org.apache.lucene.util.*;
|
||||
import org.elasticsearch.common.geo.GeoDistance;
|
||||
import org.elasticsearch.common.geo.GeoPoint;
|
||||
import org.elasticsearch.common.unit.DistanceUnit;
|
||||
|
@ -34,8 +27,12 @@ import org.elasticsearch.common.util.SlicedDoubleList;
|
|||
import org.elasticsearch.common.util.SlicedLongList;
|
||||
import org.elasticsearch.common.util.SlicedObjectList;
|
||||
import org.elasticsearch.index.fielddata.BytesValues.Iter;
|
||||
import org.joda.time.DateTimeZone;
|
||||
import org.joda.time.MutableDateTime;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Script level doc values, the assumption is that any implementation will implement a <code>getValue</code>
|
||||
* and a <code>getValues</code> that return the relevant type that then can be used in scripts.
|
||||
|
@ -129,14 +126,13 @@ public abstract class ScriptDocValues {
|
|||
}
|
||||
|
||||
|
||||
|
||||
public static class NumericLong extends ScriptDocValues {
|
||||
public static class Longs extends ScriptDocValues {
|
||||
|
||||
private final LongValues values;
|
||||
private final MutableDateTime date = new MutableDateTime(0);
|
||||
private final MutableDateTime date = new MutableDateTime(0, DateTimeZone.UTC);
|
||||
private final SlicedLongList list;
|
||||
|
||||
public NumericLong(LongValues values) {
|
||||
public Longs(LongValues values) {
|
||||
this.values = values;
|
||||
this.list = new SlicedLongList(values.isMultiValued() ? 10 : 1);
|
||||
}
|
||||
|
@ -170,12 +166,13 @@ public abstract class ScriptDocValues {
|
|||
}
|
||||
|
||||
}
|
||||
public static class NumericDouble extends ScriptDocValues {
|
||||
|
||||
public static class Doubles extends ScriptDocValues {
|
||||
|
||||
private final DoubleValues values;
|
||||
private final SlicedDoubleList list;
|
||||
|
||||
public NumericDouble(DoubleValues values) {
|
||||
public Doubles(DoubleValues values) {
|
||||
this.values = values;
|
||||
this.list = new SlicedDoubleList(values.isMultiValued() ? 10 : 1);
|
||||
|
||||
|
|
|
@ -27,11 +27,13 @@ import org.elasticsearch.common.settings.ImmutableSettings;
|
|||
import org.elasticsearch.index.fielddata.AtomicNumericFieldData;
|
||||
import org.elasticsearch.index.fielddata.FieldDataType;
|
||||
import org.elasticsearch.index.fielddata.IndexNumericFieldData;
|
||||
import org.elasticsearch.index.fielddata.ScriptDocValues;
|
||||
import org.elasticsearch.index.fielddata.plain.ByteArrayAtomicFieldData;
|
||||
import org.elasticsearch.index.fielddata.plain.IntArrayAtomicFieldData;
|
||||
import org.elasticsearch.index.fielddata.plain.LongArrayAtomicFieldData;
|
||||
import org.elasticsearch.index.fielddata.plain.ShortArrayAtomicFieldData;
|
||||
import org.elasticsearch.index.mapper.FieldMapper;
|
||||
import org.joda.time.DateTimeZone;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
|
@ -124,6 +126,19 @@ public class LongFieldDataTests extends NumericFieldDataTests {
|
|||
assertThat(fieldData.getLongValues().getValue(1), equalTo((long) Integer.MIN_VALUE - 1l));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDateScripts() throws Exception {
|
||||
fillSingleValueAllSet();
|
||||
IndexNumericFieldData indexFieldData = getForField("value");
|
||||
AtomicNumericFieldData fieldData = indexFieldData.load(refreshReader());
|
||||
|
||||
ScriptDocValues.Longs scriptValues = (ScriptDocValues.Longs) fieldData.getScriptValues();
|
||||
scriptValues.setNextDocId(0);
|
||||
assertThat(scriptValues.getValue(), equalTo(2l));
|
||||
assertThat(scriptValues.getDate().getMillis(), equalTo(2l));
|
||||
assertThat(scriptValues.getDate().getZone(), equalTo(DateTimeZone.UTC));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillSingleValueAllSet() throws Exception {
|
||||
Document d = new Document();
|
||||
|
|
Loading…
Reference in New Issue