diff --git a/modules/elasticsearch/src/test/java/org/elasticsearch/deps/lucene/NumericFieldCacheTests.java b/modules/elasticsearch/src/test/java/org/elasticsearch/deps/lucene/NumericFieldCacheTests.java new file mode 100644 index 00000000000..bea21cc6457 --- /dev/null +++ b/modules/elasticsearch/src/test/java/org/elasticsearch/deps/lucene/NumericFieldCacheTests.java @@ -0,0 +1,63 @@ +/* + * Licensed to Elastic Search and Shay Banon under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. Elastic Search licenses this + * file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.deps.lucene; + +import org.apache.lucene.document.Document; +import org.apache.lucene.document.NumericField; +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.search.FieldCache; +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.RAMDirectory; +import org.elasticsearch.util.lucene.Lucene; +import org.testng.annotations.Test; + +import static org.hamcrest.MatcherAssert.*; +import static org.hamcrest.Matchers.*; + +/** + * @author kimchy (shay.banon) + */ +@Test +public class NumericFieldCacheTests { + + /** + * A test that verifies that when using FieldCache for a field that has been added twice (under the same name) + * to the document, returns the last one. + */ + @Test public void testTwoFieldSameNameNumericFieldCache() throws Exception { + Directory dir = new RAMDirectory(); + IndexWriter indexWriter = new IndexWriter(dir, Lucene.STANDARD_ANALYZER, true, IndexWriter.MaxFieldLength.UNLIMITED); + + Document doc = new Document(); + NumericField field = new NumericField("int1").setIntValue(1); + doc.add(field); + + field = new NumericField("int1").setIntValue(2); + doc.add(field); + + indexWriter.addDocument(doc); + + IndexReader reader = indexWriter.getReader(); + int[] ints = FieldCache.DEFAULT.getInts(reader, "int1"); + assertThat(ints.length, equalTo(1)); + assertThat(ints[0], equalTo(2)); + } +}