You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2014/06/12 21:40:38 UTC
svn commit: r1602277 [3/3] - in /lucene/dev/trunk: lucene/
lucene/codecs/src/java/org/apache/lucene/codecs/memory/
lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/
lucene/core/src/java/org/apache/lucene/codecs/
lucene/core/src/java/org/apach...
Added: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSortedNumericSortField.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSortedNumericSortField.java?rev=1602277&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSortedNumericSortField.java (added)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSortedNumericSortField.java Thu Jun 12 19:40:36 2014
@@ -0,0 +1,289 @@
+package org.apache.lucene.search;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF 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.
+ */
+
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+import org.apache.lucene.document.SortedNumericDocValuesField;
+import org.apache.lucene.document.SortedSetDocValuesField;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.MultiReader;
+import org.apache.lucene.index.RandomIndexWriter;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.MatchAllDocsQuery;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.Sort;
+import org.apache.lucene.search.SortField;
+import org.apache.lucene.search.TermQuery;
+import org.apache.lucene.search.TopDocs;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
+import org.apache.lucene.util.NumericUtils;
+
+/** Simple tests for SortedNumericSortField */
+@SuppressCodecs({"Lucene40", "Lucene41", "Lucene42", "Lucene45", "Lucene46"})
+// avoid codecs that don't support sortednumeric
+public class TestSortedNumericSortField extends LuceneTestCase {
+
+ public void testEmptyIndex() throws Exception {
+ IndexSearcher empty = newSearcher(new MultiReader());
+ Query query = new TermQuery(new Term("contents", "foo"));
+
+ Sort sort = new Sort();
+ sort.setSort(new SortedNumericSortField("sortednumeric", SortField.Type.LONG));
+ TopDocs td = empty.search(query, null, 10, sort, true, true);
+ assertEquals(0, td.totalHits);
+
+ // for an empty index, any selector should work
+ for (SortedNumericSelector.Type v : SortedNumericSelector.Type.values()) {
+ sort.setSort(new SortedNumericSortField("sortednumeric", SortField.Type.LONG, false, v));
+ td = empty.search(query, null, 10, sort, true, true);
+ assertEquals(0, td.totalHits);
+ }
+ }
+
+ public void testEquals() throws Exception {
+ SortField sf = new SortedNumericSortField("a", SortField.Type.LONG);
+ assertFalse(sf.equals(null));
+
+ assertEquals(sf, sf);
+
+ SortField sf2 = new SortedNumericSortField("a", SortField.Type.LONG);
+ assertEquals(sf, sf2);
+ assertEquals(sf.hashCode(), sf2.hashCode());
+
+ assertFalse(sf.equals(new SortedNumericSortField("a", SortField.Type.LONG, true)));
+ assertFalse(sf.equals(new SortedNumericSortField("a", SortField.Type.FLOAT)));
+ assertFalse(sf.equals(new SortedNumericSortField("b", SortField.Type.LONG)));
+ assertFalse(sf.equals(new SortedNumericSortField("a", SortField.Type.LONG, false, SortedNumericSelector.Type.MAX)));
+ assertFalse(sf.equals("foo"));
+ }
+
+ public void testForward() throws Exception {
+ Directory dir = newDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
+ Document doc = new Document();
+ doc.add(new SortedNumericDocValuesField("value", 5));
+ doc.add(newStringField("id", "2", Field.Store.YES));
+ writer.addDocument(doc);
+ doc = new Document();
+ doc.add(new SortedNumericDocValuesField("value", 3));
+ doc.add(new SortedNumericDocValuesField("value", 7));
+ doc.add(newStringField("id", "1", Field.Store.YES));
+ writer.addDocument(doc);
+ IndexReader ir = writer.getReader();
+ writer.shutdown();
+
+ IndexSearcher searcher = newSearcher(ir);
+ Sort sort = new Sort(new SortedNumericSortField("value", SortField.Type.INT));
+
+ TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
+ assertEquals(2, td.totalHits);
+ // 3 comes before 5
+ assertEquals("1", searcher.doc(td.scoreDocs[0].doc).get("id"));
+ assertEquals("2", searcher.doc(td.scoreDocs[1].doc).get("id"));
+
+ ir.close();
+ dir.close();
+ }
+
+ public void testReverse() throws Exception {
+ Directory dir = newDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
+ Document doc = new Document();
+ doc.add(new SortedNumericDocValuesField("value", 3));
+ doc.add(new SortedNumericDocValuesField("value", 7));
+ doc.add(newStringField("id", "1", Field.Store.YES));
+ writer.addDocument(doc);
+ doc = new Document();
+ doc.add(new SortedNumericDocValuesField("value", 5));
+ doc.add(newStringField("id", "2", Field.Store.YES));
+ writer.addDocument(doc);
+
+ IndexReader ir = writer.getReader();
+ writer.shutdown();
+
+ IndexSearcher searcher = newSearcher(ir);
+ Sort sort = new Sort(new SortedNumericSortField("value", SortField.Type.INT, true));
+
+ TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
+ assertEquals(2, td.totalHits);
+ // 'bar' comes before 'baz'
+ assertEquals("2", searcher.doc(td.scoreDocs[0].doc).get("id"));
+ assertEquals("1", searcher.doc(td.scoreDocs[1].doc).get("id"));
+
+ ir.close();
+ dir.close();
+ }
+
+ public void testMissingFirst() throws Exception {
+ Directory dir = newDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
+ Document doc = new Document();
+ doc.add(new SortedNumericDocValuesField("value", 5));
+ doc.add(newStringField("id", "2", Field.Store.YES));
+ writer.addDocument(doc);
+ doc = new Document();
+ doc.add(new SortedNumericDocValuesField("value", 3));
+ doc.add(new SortedNumericDocValuesField("value", 7));
+ doc.add(newStringField("id", "1", Field.Store.YES));
+ writer.addDocument(doc);
+ doc = new Document();
+ doc.add(newStringField("id", "3", Field.Store.YES));
+ writer.addDocument(doc);
+ IndexReader ir = writer.getReader();
+ writer.shutdown();
+
+ IndexSearcher searcher = newSearcher(ir);
+ SortField sortField = new SortedNumericSortField("value", SortField.Type.INT);
+ sortField.setMissingValue(Integer.MIN_VALUE);
+ Sort sort = new Sort(sortField);
+
+ TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
+ assertEquals(3, td.totalHits);
+ // 3 comes before 5
+ // null comes first
+ assertEquals("3", searcher.doc(td.scoreDocs[0].doc).get("id"));
+ assertEquals("1", searcher.doc(td.scoreDocs[1].doc).get("id"));
+ assertEquals("2", searcher.doc(td.scoreDocs[2].doc).get("id"));
+
+ ir.close();
+ dir.close();
+ }
+
+ public void testMissingLast() throws Exception {
+ Directory dir = newDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
+ Document doc = new Document();
+ doc.add(new SortedNumericDocValuesField("value", 5));
+ doc.add(newStringField("id", "2", Field.Store.YES));
+ writer.addDocument(doc);
+ doc = new Document();
+ doc.add(new SortedNumericDocValuesField("value", 3));
+ doc.add(new SortedNumericDocValuesField("value", 7));
+ doc.add(newStringField("id", "1", Field.Store.YES));
+ writer.addDocument(doc);
+ doc = new Document();
+ doc.add(newStringField("id", "3", Field.Store.YES));
+ writer.addDocument(doc);
+ IndexReader ir = writer.getReader();
+ writer.shutdown();
+
+ IndexSearcher searcher = newSearcher(ir);
+ SortField sortField = new SortedNumericSortField("value", SortField.Type.INT);
+ sortField.setMissingValue(Integer.MAX_VALUE);
+ Sort sort = new Sort(sortField);
+
+ TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
+ assertEquals(3, td.totalHits);
+ // 3 comes before 5
+ assertEquals("1", searcher.doc(td.scoreDocs[0].doc).get("id"));
+ assertEquals("2", searcher.doc(td.scoreDocs[1].doc).get("id"));
+ // null comes last
+ assertEquals("3", searcher.doc(td.scoreDocs[2].doc).get("id"));
+
+ ir.close();
+ dir.close();
+ }
+
+ public void testSingleton() throws Exception {
+ Directory dir = newDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
+ Document doc = new Document();
+ doc.add(new SortedNumericDocValuesField("value", 5));
+ doc.add(newStringField("id", "2", Field.Store.YES));
+ writer.addDocument(doc);
+ doc = new Document();
+ doc.add(new SortedNumericDocValuesField("value", 3));
+ doc.add(newStringField("id", "1", Field.Store.YES));
+ writer.addDocument(doc);
+ IndexReader ir = writer.getReader();
+ writer.shutdown();
+
+ IndexSearcher searcher = newSearcher(ir);
+ Sort sort = new Sort(new SortedNumericSortField("value", SortField.Type.INT));
+
+ TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
+ assertEquals(2, td.totalHits);
+ // 3 comes before 5
+ assertEquals("1", searcher.doc(td.scoreDocs[0].doc).get("id"));
+ assertEquals("2", searcher.doc(td.scoreDocs[1].doc).get("id"));
+
+ ir.close();
+ dir.close();
+ }
+
+ public void testFloat() throws Exception {
+ Directory dir = newDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
+ Document doc = new Document();
+ doc.add(new SortedNumericDocValuesField("value", NumericUtils.floatToSortableInt(-3f)));
+ doc.add(newStringField("id", "2", Field.Store.YES));
+ writer.addDocument(doc);
+ doc = new Document();
+ doc.add(new SortedNumericDocValuesField("value", NumericUtils.floatToSortableInt(-5f)));
+ doc.add(new SortedNumericDocValuesField("value", NumericUtils.floatToSortableInt(7f)));
+ doc.add(newStringField("id", "1", Field.Store.YES));
+ writer.addDocument(doc);
+ IndexReader ir = writer.getReader();
+ writer.shutdown();
+
+ IndexSearcher searcher = newSearcher(ir);
+ Sort sort = new Sort(new SortedNumericSortField("value", SortField.Type.FLOAT));
+
+ TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
+ assertEquals(2, td.totalHits);
+ // -5 comes before -3
+ assertEquals("1", searcher.doc(td.scoreDocs[0].doc).get("id"));
+ assertEquals("2", searcher.doc(td.scoreDocs[1].doc).get("id"));
+
+ ir.close();
+ dir.close();
+ }
+
+ public void testDouble() throws Exception {
+ Directory dir = newDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
+ Document doc = new Document();
+ doc.add(new SortedNumericDocValuesField("value", NumericUtils.doubleToSortableLong(-3d)));
+ doc.add(newStringField("id", "2", Field.Store.YES));
+ writer.addDocument(doc);
+ doc = new Document();
+ doc.add(new SortedNumericDocValuesField("value", NumericUtils.doubleToSortableLong(-5d)));
+ doc.add(new SortedNumericDocValuesField("value", NumericUtils.doubleToSortableLong(7d)));
+ doc.add(newStringField("id", "1", Field.Store.YES));
+ writer.addDocument(doc);
+ IndexReader ir = writer.getReader();
+ writer.shutdown();
+
+ IndexSearcher searcher = newSearcher(ir);
+ Sort sort = new Sort(new SortedNumericSortField("value", SortField.Type.DOUBLE));
+
+ TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
+ assertEquals(2, td.totalHits);
+ // -5 comes before -3
+ assertEquals("1", searcher.doc(td.scoreDocs[0].doc).get("id"));
+ assertEquals("2", searcher.doc(td.scoreDocs[1].doc).get("id"));
+
+ ir.close();
+ dir.close();
+ }
+}
Modified: lucene/dev/trunk/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java?rev=1602277&r1=1602276&r2=1602277&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java (original)
+++ lucene/dev/trunk/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java Thu Jun 12 19:40:36 2014
@@ -45,6 +45,7 @@ import org.apache.lucene.index.Fields;
import org.apache.lucene.index.NumericDocValues;
import org.apache.lucene.index.OrdTermState;
import org.apache.lucene.index.SortedDocValues;
+import org.apache.lucene.index.SortedNumericDocValues;
import org.apache.lucene.index.SortedSetDocValues;
import org.apache.lucene.index.StoredFieldVisitor;
import org.apache.lucene.index.TermState;
@@ -794,6 +795,11 @@ public class MemoryIndex {
}
@Override
+ public SortedNumericDocValues getSortedNumericDocValues(String field) {
+ return null;
+ }
+
+ @Override
public SortedSetDocValues getSortedSetDocValues(String field) {
return null;
}
Modified: lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/uninverting/TestUninvertingReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/uninverting/TestUninvertingReader.java?rev=1602277&r1=1602276&r2=1602277&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/uninverting/TestUninvertingReader.java (original)
+++ lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/uninverting/TestUninvertingReader.java Thu Jun 12 19:40:36 2014
@@ -235,6 +235,10 @@ public class TestUninvertingReader exten
break;
case SORTED_SET:
reader.getSortedSetDocValues(field);
+ break;
+ case SORTED_NUMERIC:
+ // not supported
+ return;
default:
throw new AssertionError();
}
Modified: lucene/dev/trunk/lucene/queries/src/test/org/apache/lucene/queries/function/TestDocValuesFieldSources.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/queries/src/test/org/apache/lucene/queries/function/TestDocValuesFieldSources.java?rev=1602277&r1=1602276&r2=1602277&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/queries/src/test/org/apache/lucene/queries/function/TestDocValuesFieldSources.java (original)
+++ lucene/dev/trunk/lucene/queries/src/test/org/apache/lucene/queries/function/TestDocValuesFieldSources.java Thu Jun 12 19:40:36 2014
@@ -146,7 +146,7 @@ public class TestDocValuesFieldSources e
public void test() throws IOException {
for (DocValuesType type : DocValuesType.values()) {
- if (type != DocValuesType.SORTED_SET) {
+ if (type != DocValuesType.SORTED_SET && type != DocValuesType.SORTED_NUMERIC) {
test(type);
}
}
Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingDocValuesFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingDocValuesFormat.java?rev=1602277&r1=1602276&r2=1602277&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingDocValuesFormat.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingDocValuesFormat.java Thu Jun 12 19:40:36 2014
@@ -32,6 +32,7 @@ import org.apache.lucene.index.NumericDo
import org.apache.lucene.index.SegmentReadState;
import org.apache.lucene.index.SegmentWriteState;
import org.apache.lucene.index.SortedDocValues;
+import org.apache.lucene.index.SortedNumericDocValues;
import org.apache.lucene.index.SortedSetDocValues;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
@@ -131,6 +132,30 @@ public class AssertingDocValuesFormat ex
}
@Override
+ public void addSortedNumericField(FieldInfo field, Iterable<Number> docToValueCount, Iterable<Number> values) throws IOException {
+ long valueCount = 0;
+ Iterator<Number> valueIterator = values.iterator();
+ for (Number count : docToValueCount) {
+ assert count != null;
+ assert count.intValue() >= 0;
+ valueCount += count.intValue();
+ long previous = Long.MIN_VALUE;
+ for (int i = 0; i < count.intValue(); i++) {
+ assert valueIterator.hasNext();
+ Number next = valueIterator.next();
+ assert next != null;
+ long nextValue = next.longValue();
+ assert nextValue >= previous;
+ previous = nextValue;
+ }
+ }
+ assert valueIterator.hasNext() == false;
+ checkIterator(docToValueCount.iterator(), maxDoc, false);
+ checkIterator(values.iterator(), valueCount, false);
+ in.addSortedNumericField(field, docToValueCount, values);
+ }
+
+ @Override
public void addSortedSetField(FieldInfo field, Iterable<BytesRef> values, Iterable<Number> docToOrdCount, Iterable<Number> ords) throws IOException {
long valueCount = 0;
BytesRef lastValue = null;
@@ -217,6 +242,11 @@ public class AssertingDocValuesFormat ex
public void addSortedField(FieldInfo field, Iterable<BytesRef> values, Iterable<Number> docToOrd) throws IOException {
throw new IllegalStateException();
}
+
+ @Override
+ public void addSortedNumericField(FieldInfo field, Iterable<Number> docToValueCount, Iterable<Number> values) throws IOException {
+ throw new IllegalStateException();
+ }
@Override
public void addSortedSetField(FieldInfo field, Iterable<BytesRef> values, Iterable<Number> docToOrdCount, Iterable<Number> ords) throws IOException {
@@ -281,6 +311,14 @@ public class AssertingDocValuesFormat ex
}
@Override
+ public SortedNumericDocValues getSortedNumeric(FieldInfo field) throws IOException {
+ assert field.getDocValuesType() == FieldInfo.DocValuesType.SORTED_NUMERIC;
+ SortedNumericDocValues values = in.getSortedNumeric(field);
+ assert values != null;
+ return new AssertingAtomicReader.AssertingSortedNumericDocValues(values, maxDoc);
+ }
+
+ @Override
public SortedSetDocValues getSortedSet(FieldInfo field) throws IOException {
assert field.getDocValuesType() == FieldInfo.DocValuesType.SORTED_SET;
SortedSetDocValues values = in.getSortedSet(field);
Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyDocValuesFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyDocValuesFormat.java?rev=1602277&r1=1602276&r2=1602277&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyDocValuesFormat.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyDocValuesFormat.java Thu Jun 12 19:40:36 2014
@@ -93,6 +93,14 @@ class CrankyDocValuesFormat extends DocV
}
delegate.addSortedField(field, values, docToOrd);
}
+
+ @Override
+ public void addSortedNumericField(FieldInfo field, Iterable<Number> docToValueCount, Iterable<Number> values) throws IOException {
+ if (random.nextInt(100) == 0) {
+ throw new IOException("Fake IOException from DocValuesConsumer.addSortedNumericField()");
+ }
+ delegate.addSortedNumericField(field, docToValueCount, values);
+ }
@Override
public void addSortedSetField(FieldInfo field, Iterable<BytesRef> values, Iterable<Number> docToOrdCount, Iterable<Number> ords) throws IOException {
Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesWriter.java?rev=1602277&r1=1602276&r2=1602277&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesWriter.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesWriter.java Thu Jun 12 19:40:36 2014
@@ -531,6 +531,11 @@ class Lucene40DocValuesWriter extends Do
}
@Override
+ public void addSortedNumericField(FieldInfo field, Iterable<Number> docToValueCount, Iterable<Number> values) throws IOException {
+ throw new UnsupportedOperationException("Lucene 4.0 does not support SortedNumeric docvalues");
+ }
+
+ @Override
public void addSortedSetField(FieldInfo field, Iterable<BytesRef> values, Iterable<Number> docToOrdCount, Iterable<Number> ords) throws IOException {
throw new UnsupportedOperationException("Lucene 4.0 does not support SortedSet docvalues");
}
Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42DocValuesConsumer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42DocValuesConsumer.java?rev=1602277&r1=1602276&r2=1602277&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42DocValuesConsumer.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42DocValuesConsumer.java Thu Jun 12 19:40:36 2014
@@ -378,4 +378,9 @@ class Lucene42DocValuesConsumer extends
throw new UnsupportedOperationException();
}
}
+
+ @Override
+ public void addSortedNumericField(FieldInfo field, Iterable<Number> docToValueCount, Iterable<Number> values) throws IOException {
+ throw new UnsupportedOperationException("Lucene 4.2 does not support SORTED_NUMERIC");
+ }
}
Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/AssertingAtomicReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/AssertingAtomicReader.java?rev=1602277&r1=1602276&r2=1602277&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/AssertingAtomicReader.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/AssertingAtomicReader.java Thu Jun 12 19:40:36 2014
@@ -512,6 +512,41 @@ public class AssertingAtomicReader exten
}
/** Wraps a SortedSetDocValues but with additional asserts */
+ public static class AssertingSortedNumericDocValues extends SortedNumericDocValues {
+ private final SortedNumericDocValues in;
+ private final int maxDoc;
+
+ public AssertingSortedNumericDocValues(SortedNumericDocValues in, int maxDoc) {
+ this.in = in;
+ this.maxDoc = maxDoc;
+ }
+
+ @Override
+ public void setDocument(int doc) {
+ assert doc >= 0 && doc < maxDoc;
+ in.setDocument(doc);
+ // check the values are actually sorted
+ long previous = Long.MIN_VALUE;
+ for (int i = 0; i < in.count(); i++) {
+ long v = in.valueAt(i);
+ assert v >= previous;
+ previous = v;
+ }
+ }
+
+ @Override
+ public long valueAt(int index) {
+ assert index < in.count();
+ return in.valueAt(index);
+ }
+
+ @Override
+ public int count() {
+ return in.count();
+ }
+ }
+
+ /** Wraps a SortedSetDocValues but with additional asserts */
public static class AssertingSortedSetDocValues extends SortedSetDocValues {
private final SortedSetDocValues in;
private final int maxDoc;
@@ -608,6 +643,20 @@ public class AssertingAtomicReader exten
return null;
}
}
+
+ @Override
+ public SortedNumericDocValues getSortedNumericDocValues(String field) throws IOException {
+ SortedNumericDocValues dv = super.getSortedNumericDocValues(field);
+ FieldInfo fi = getFieldInfos().fieldInfo(field);
+ if (dv != null) {
+ assert fi != null;
+ assert fi.getDocValuesType() == FieldInfo.DocValuesType.SORTED_NUMERIC;
+ return new AssertingSortedNumericDocValues(dv, maxDoc());
+ } else {
+ assert fi == null || fi.getDocValuesType() != FieldInfo.DocValuesType.SORTED_NUMERIC;
+ return null;
+ }
+ }
@Override
public SortedSetDocValues getSortedSetDocValues(String field) throws IOException {
Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/BaseDocValuesFormatTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/BaseDocValuesFormatTestCase.java?rev=1602277&r1=1602276&r2=1602277&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/BaseDocValuesFormatTestCase.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/BaseDocValuesFormatTestCase.java Thu Jun 12 19:40:36 2014
@@ -21,6 +21,7 @@ import static org.apache.lucene.index.So
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -38,6 +39,7 @@ import org.apache.lucene.document.Field;
import org.apache.lucene.document.FloatDocValuesField;
import org.apache.lucene.document.NumericDocValuesField;
import org.apache.lucene.document.SortedDocValuesField;
+import org.apache.lucene.document.SortedNumericDocValuesField;
import org.apache.lucene.document.SortedSetDocValuesField;
import org.apache.lucene.document.StoredField;
import org.apache.lucene.document.StringField;
@@ -79,6 +81,12 @@ public abstract class BaseDocValuesForma
doc.add(new SortedSetDocValuesField("ssdv", new BytesRef(TestUtil.randomSimpleString(random(), 2))));
}
}
+ if (defaultCodecSupportsSortedNumeric()) {
+ final int numValues = random().nextInt(5);
+ for (int i = 0; i < numValues; ++i) {
+ doc.add(new SortedNumericDocValuesField("sndv", TestUtil.nextLong(random(), Long.MIN_VALUE, Long.MAX_VALUE)));
+ }
+ }
}
public void testOneNumber() throws IOException {
@@ -1193,6 +1201,69 @@ public abstract class BaseDocValuesForma
dir.close();
}
+ private void doTestSortedNumericsVsStoredFields(LongProducer counts, LongProducer values) throws Exception {
+ Directory dir = newDirectory();
+ IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()));
+ RandomIndexWriter writer = new RandomIndexWriter(random(), dir, conf);
+
+ // index some docs
+ int numDocs = atLeast(300);
+ // numDocs should be always > 256 so that in case of a codec that optimizes
+ // for numbers of values <= 256, all storage layouts are tested
+ assert numDocs > 256;
+ for (int i = 0; i < numDocs; i++) {
+ Document doc = new Document();
+ doc.add(new StringField("id", Integer.toString(i), Field.Store.NO));
+
+ int valueCount = (int) counts.next();
+ long valueArray[] = new long[valueCount];
+ for (int j = 0; j < valueCount; j++) {
+ long value = values.next();
+ valueArray[j] = value;
+ doc.add(new SortedNumericDocValuesField("dv", value));
+ }
+ Arrays.sort(valueArray);
+ for (int j = 0; j < valueCount; j++) {
+ doc.add(new StoredField("stored", Long.toString(valueArray[j])));
+ }
+ writer.addDocument(doc);
+ if (random().nextInt(31) == 0) {
+ writer.commit();
+ }
+ }
+
+ // delete some docs
+ int numDeletions = random().nextInt(numDocs/10);
+ for (int i = 0; i < numDeletions; i++) {
+ int id = random().nextInt(numDocs);
+ writer.deleteDocuments(new Term("id", Integer.toString(id)));
+ }
+
+ // merge some segments and ensure that at least one of them has more than
+ // 256 values
+ writer.forceMerge(numDocs / 256);
+
+ writer.shutdown();
+
+ // compare
+ DirectoryReader ir = DirectoryReader.open(dir);
+ for (AtomicReaderContext context : ir.leaves()) {
+ AtomicReader r = context.reader();
+ SortedNumericDocValues docValues = DocValues.getSortedNumeric(r, "dv");
+ for (int i = 0; i < r.maxDoc(); i++) {
+ String expected[] = r.document(i).getValues("stored");
+ docValues.setDocument(i);
+ String actual[] = new String[docValues.count()];
+ for (int j = 0; j < actual.length; j++) {
+ actual[j] = Long.toString(docValues.valueAt(j));
+ }
+ assertArrayEquals(expected, actual);
+ }
+ }
+ ir.close();
+ dir.close();
+ }
+
public void testBooleanNumericsVsStoredFields() throws Exception {
int numIterations = atLeast(1);
for (int i = 0; i < numIterations; i++) {
@@ -1889,6 +1960,69 @@ public abstract class BaseDocValuesForma
}
}
+ public void testSortedNumericsSingleValuedVsStoredFields() throws Exception {
+ assumeTrue("Codec does not support SORTED_NUMERIC", defaultCodecSupportsSortedNumeric());
+ int numIterations = atLeast(1);
+ for (int i = 0; i < numIterations; i++) {
+ doTestSortedNumericsVsStoredFields(
+ new LongProducer() {
+ @Override
+ long next() {
+ return 1;
+ }
+ },
+ new LongProducer() {
+ @Override
+ long next() {
+ return TestUtil.nextLong(random(), Long.MIN_VALUE, Long.MAX_VALUE);
+ }
+ }
+ );
+ }
+ }
+
+ public void testSortedNumericsSingleValuedMissingVsStoredFields() throws Exception {
+ assumeTrue("Codec does not support SORTED_NUMERIC", defaultCodecSupportsSortedNumeric());
+ int numIterations = atLeast(1);
+ for (int i = 0; i < numIterations; i++) {
+ doTestSortedNumericsVsStoredFields(
+ new LongProducer() {
+ @Override
+ long next() {
+ return random().nextBoolean() ? 0 : 1;
+ }
+ },
+ new LongProducer() {
+ @Override
+ long next() {
+ return TestUtil.nextLong(random(), Long.MIN_VALUE, Long.MAX_VALUE);
+ }
+ }
+ );
+ }
+ }
+
+ public void testSortedNumericsMultipleValuesVsStoredFields() throws Exception {
+ assumeTrue("Codec does not support SORTED_NUMERIC", defaultCodecSupportsSortedNumeric());
+ int numIterations = atLeast(1);
+ for (int i = 0; i < numIterations; i++) {
+ doTestSortedNumericsVsStoredFields(
+ new LongProducer() {
+ @Override
+ long next() {
+ return TestUtil.nextLong(random(), 0, 50);
+ }
+ },
+ new LongProducer() {
+ @Override
+ long next() {
+ return TestUtil.nextLong(random(), Long.MIN_VALUE, Long.MAX_VALUE);
+ }
+ }
+ );
+ }
+ }
+
public void testSortedSetVariableLengthVsStoredFields() throws Exception {
assumeTrue("Codec does not support SORTED_SET", defaultCodecSupportsSortedSet());
int numIterations = atLeast(1);
@@ -2238,6 +2372,7 @@ public abstract class BaseDocValuesForma
public void testThreads2() throws Exception {
assumeTrue("Codec does not support getDocsWithField", defaultCodecSupportsDocsWithField());
assumeTrue("Codec does not support SORTED_SET", defaultCodecSupportsSortedSet());
+ assumeTrue("Codec does not support SORTED_NUMERIC", defaultCodecSupportsSortedNumeric());
Directory dir = newDirectory();
IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()));
RandomIndexWriter writer = new RandomIndexWriter(random(), dir, conf);
@@ -2281,6 +2416,15 @@ public abstract class BaseDocValuesForma
doc.add(new SortedSetDocValuesField("dvSortedSet", new BytesRef(v)));
doc.add(new StoredField("storedSortedSet", v));
}
+ int numSortedNumericFields = random().nextInt(3);
+ Set<Long> numValues = new TreeSet<>();
+ for (int j = 0; j < numSortedNumericFields; j++) {
+ numValues.add(TestUtil.nextLong(random(), Long.MIN_VALUE, Long.MAX_VALUE));
+ }
+ for (Long l : numValues) {
+ doc.add(new SortedNumericDocValuesField("dvSortedNumeric", l));
+ doc.add(new StoredField("storedSortedNumeric", Long.toString(l)));
+ }
writer.addDocument(doc);
if (random().nextInt(31) == 0) {
writer.commit();
@@ -2317,6 +2461,8 @@ public abstract class BaseDocValuesForma
Bits numericBits = r.getDocsWithField("dvNum");
SortedSetDocValues sortedSet = r.getSortedSetDocValues("dvSortedSet");
Bits sortedSetBits = r.getDocsWithField("dvSortedSet");
+ SortedNumericDocValues sortedNumeric = r.getSortedNumericDocValues("dvSortedNumeric");
+ Bits sortedNumericBits = r.getDocsWithField("dvSortedNumeric");
for (int j = 0; j < r.maxDoc(); j++) {
BytesRef binaryValue = r.document(j).getBinaryValue("storedBin");
if (binaryValue != null) {
@@ -2361,6 +2507,22 @@ public abstract class BaseDocValuesForma
assertEquals(SortedSetDocValues.NO_MORE_ORDS, sortedSet.nextOrd());
assertFalse(sortedSetBits.get(j));
}
+
+ String numValues[] = r.document(j).getValues("storedSortedNumeric");
+ if (numValues.length > 0) {
+ assertNotNull(sortedNumeric);
+ sortedNumeric.setDocument(j);
+ assertEquals(numValues.length, sortedNumeric.count());
+ for (int k = 0; k < numValues.length; k++) {
+ long v = sortedNumeric.valueAt(k);
+ assertEquals(numValues[k], Long.toString(v));
+ }
+ assertTrue(sortedNumericBits.get(j));
+ } else if (sortedNumeric != null) {
+ sortedNumeric.setDocument(j);
+ assertEquals(0, sortedNumeric.count());
+ assertFalse(sortedNumericBits.get(j));
+ }
}
}
TestUtil.checkReader(ir);
@@ -2414,6 +2576,171 @@ public abstract class BaseDocValuesForma
dir.close();
}
}
+
+ public void testOneSortedNumber() throws IOException {
+ assumeTrue("Codec does not support SORTED_NUMERIC", defaultCodecSupportsSortedNumeric());
+ Directory directory = newDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(random(), directory);
+ Document doc = new Document();
+ doc.add(new SortedNumericDocValuesField("dv", 5));
+ writer.addDocument(doc);
+ writer.shutdown();
+
+ // Now search the index:
+ IndexReader reader = DirectoryReader.open(directory);
+ assert reader.leaves().size() == 1;
+ SortedNumericDocValues dv = reader.leaves().get(0).reader().getSortedNumericDocValues("dv");
+ dv.setDocument(0);
+ assertEquals(1, dv.count());
+ assertEquals(5, dv.valueAt(0));
+
+ reader.close();
+ directory.close();
+ }
+
+ public void testOneSortedNumberOneMissing() throws IOException {
+ assumeTrue("Codec does not support SORTED_NUMERIC", defaultCodecSupportsSortedNumeric());
+ Directory directory = newDirectory();
+ IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(TEST_VERSION_CURRENT, null));
+ Document doc = new Document();
+ doc.add(new SortedNumericDocValuesField("dv", 5));
+ writer.addDocument(doc);
+ writer.addDocument(new Document());
+ writer.shutdown();
+
+ // Now search the index:
+ IndexReader reader = DirectoryReader.open(directory);
+ assert reader.leaves().size() == 1;
+ SortedNumericDocValues dv = reader.leaves().get(0).reader().getSortedNumericDocValues("dv");
+ dv.setDocument(0);
+ assertEquals(1, dv.count());
+ assertEquals(5, dv.valueAt(0));
+ dv.setDocument(1);
+ assertEquals(0, dv.count());
+
+ Bits docsWithField = reader.leaves().get(0).reader().getDocsWithField("dv");
+ assertEquals(2, docsWithField.length());
+ assertTrue(docsWithField.get(0));
+ assertFalse(docsWithField.get(1));
+
+ reader.close();
+ directory.close();
+ }
+
+ public void testTwoSortedNumber() throws IOException {
+ assumeTrue("Codec does not support SORTED_NUMERIC", defaultCodecSupportsSortedNumeric());
+ Directory directory = newDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(random(), directory);
+ Document doc = new Document();
+ doc.add(new SortedNumericDocValuesField("dv", 11));
+ doc.add(new SortedNumericDocValuesField("dv", -5));
+ writer.addDocument(doc);
+ writer.shutdown();
+
+ // Now search the index:
+ IndexReader reader = DirectoryReader.open(directory);
+ assert reader.leaves().size() == 1;
+ SortedNumericDocValues dv = reader.leaves().get(0).reader().getSortedNumericDocValues("dv");
+ dv.setDocument(0);
+ assertEquals(2, dv.count());
+ assertEquals(-5, dv.valueAt(0));
+ assertEquals(11, dv.valueAt(1));
+
+ reader.close();
+ directory.close();
+ }
+
+ public void testTwoSortedNumberOneMissing() throws IOException {
+ assumeTrue("Codec does not support SORTED_NUMERIC", defaultCodecSupportsSortedNumeric());
+ Directory directory = newDirectory();
+ IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(TEST_VERSION_CURRENT, null));
+ Document doc = new Document();
+ doc.add(new SortedNumericDocValuesField("dv", 11));
+ doc.add(new SortedNumericDocValuesField("dv", -5));
+ writer.addDocument(doc);
+ writer.addDocument(new Document());
+ writer.shutdown();
+
+ // Now search the index:
+ IndexReader reader = DirectoryReader.open(directory);
+ assert reader.leaves().size() == 1;
+ SortedNumericDocValues dv = reader.leaves().get(0).reader().getSortedNumericDocValues("dv");
+ dv.setDocument(0);
+ assertEquals(2, dv.count());
+ assertEquals(-5, dv.valueAt(0));
+ assertEquals(11, dv.valueAt(1));
+ dv.setDocument(1);
+ assertEquals(0, dv.count());
+
+ Bits docsWithField = reader.leaves().get(0).reader().getDocsWithField("dv");
+ assertEquals(2, docsWithField.length());
+ assertTrue(docsWithField.get(0));
+ assertFalse(docsWithField.get(1));
+
+ reader.close();
+ directory.close();
+ }
+
+ public void testSortedNumberMerge() throws IOException {
+ assumeTrue("Codec does not support SORTED_NUMERIC", defaultCodecSupportsSortedNumeric());
+ Directory directory = newDirectory();
+ IndexWriterConfig iwc = new IndexWriterConfig(TEST_VERSION_CURRENT, null);
+ iwc.setMergePolicy(newLogMergePolicy());
+ IndexWriter writer = new IndexWriter(directory, iwc);
+ Document doc = new Document();
+ doc.add(new SortedNumericDocValuesField("dv", 11));
+ writer.addDocument(doc);
+ writer.commit();
+ doc = new Document();
+ doc.add(new SortedNumericDocValuesField("dv", -5));
+ writer.addDocument(doc);
+ writer.forceMerge(1);
+ writer.shutdown();
+
+ // Now search the index:
+ IndexReader reader = DirectoryReader.open(directory);
+ assert reader.leaves().size() == 1;
+ SortedNumericDocValues dv = reader.leaves().get(0).reader().getSortedNumericDocValues("dv");
+ dv.setDocument(0);
+ assertEquals(1, dv.count());
+ assertEquals(11, dv.valueAt(0));
+ dv.setDocument(1);
+ assertEquals(1, dv.count());
+ assertEquals(-5, dv.valueAt(0));
+
+ reader.close();
+ directory.close();
+ }
+
+ public void testSortedNumberMergeAwayAllValues() throws IOException {
+ assumeTrue("Codec does not support SORTED_NUMERIC", defaultCodecSupportsSortedNumeric());
+ Directory directory = newDirectory();
+ Analyzer analyzer = new MockAnalyzer(random());
+ IndexWriterConfig iwconfig = newIndexWriterConfig(TEST_VERSION_CURRENT, analyzer);
+ iwconfig.setMergePolicy(newLogMergePolicy());
+ RandomIndexWriter iwriter = new RandomIndexWriter(random(), directory, iwconfig);
+
+ Document doc = new Document();
+ doc.add(new StringField("id", "0", Field.Store.NO));
+ iwriter.addDocument(doc);
+ doc = new Document();
+ doc.add(new StringField("id", "1", Field.Store.NO));
+ doc.add(new SortedNumericDocValuesField("field", 5));
+ iwriter.addDocument(doc);
+ iwriter.commit();
+ iwriter.deleteDocuments(new Term("id", "1"));
+ iwriter.forceMerge(1);
+
+ DirectoryReader ireader = iwriter.getReader();
+ iwriter.shutdown();
+
+ SortedNumericDocValues dv = getOnlySegmentReader(ireader).getSortedNumericDocValues("field");
+ dv.setDocument(0);
+ assertEquals(0, dv.count());
+
+ ireader.close();
+ directory.close();
+ }
protected boolean codecAcceptsHugeBinaryValues(String field) {
return true;
Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterAtomicReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterAtomicReader.java?rev=1602277&r1=1602276&r2=1602277&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterAtomicReader.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterAtomicReader.java Thu Jun 12 19:40:36 2014
@@ -133,6 +133,11 @@ public final class FieldFilterAtomicRead
}
@Override
+ public SortedNumericDocValues getSortedNumericDocValues(String field) throws IOException {
+ return hasField(field) ? super.getSortedNumericDocValues(field) : null;
+ }
+
+ @Override
public SortedSetDocValues getSortedSetDocValues(String field) throws IOException {
return hasField(field) ? super.getSortedSetDocValues(field) : null;
}
Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java?rev=1602277&r1=1602276&r2=1602277&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java Thu Jun 12 19:40:36 2014
@@ -95,6 +95,7 @@ import org.apache.lucene.index.SerialMer
import org.apache.lucene.index.SimpleMergedSegmentWarmer;
import org.apache.lucene.index.SlowCompositeReaderWrapper;
import org.apache.lucene.index.SortedDocValues;
+import org.apache.lucene.index.SortedNumericDocValues;
import org.apache.lucene.index.SortedSetDocValues;
import org.apache.lucene.index.StorableField;
import org.apache.lucene.index.StoredDocument;
@@ -1680,6 +1681,15 @@ public abstract class LuceneTestCase ext
return true;
}
+ /** Returns true if the default codec supports SORTED_NUMERIC docvalues */
+ public static boolean defaultCodecSupportsSortedNumeric() {
+ String name = Codec.getDefault().getName();
+ if (name.equals("Lucene40") || name.equals("Lucene41") || name.equals("Lucene42") || name.equals("Lucene45") || name.equals("Lucene46")) {
+ return false;
+ }
+ return true;
+ }
+
/** Returns true if the codec "supports" docsWithField
* (other codecs return MatchAllBits, because you couldnt write missing values before) */
public static boolean defaultCodecSupportsDocsWithField() {
@@ -2289,6 +2299,28 @@ public abstract class LuceneTestCase ext
}
{
+ SortedNumericDocValues leftValues = MultiDocValues.getSortedNumericValues(leftReader, field);
+ SortedNumericDocValues rightValues = MultiDocValues.getSortedNumericValues(rightReader, field);
+ if (leftValues != null && rightValues != null) {
+ for (int i = 0; i < leftReader.maxDoc(); i++) {
+ leftValues.setDocument(i);
+ long expected[] = new long[leftValues.count()];
+ for (int j = 0; j < expected.length; j++) {
+ expected[j] = leftValues.valueAt(j);
+ }
+ rightValues.setDocument(i);
+ for (int j = 0; j < expected.length; j++) {
+ assertEquals(info, expected[j], rightValues.valueAt(j));
+ }
+ assertEquals(info, expected.length, rightValues.count());
+ }
+ } else {
+ assertNull(info, leftValues);
+ assertNull(info, rightValues);
+ }
+ }
+
+ {
Bits leftBits = MultiDocValues.getDocsWithField(leftReader, field);
Bits rightBits = MultiDocValues.getDocsWithField(rightReader, field);
if (leftBits != null && rightBits != null) {
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestDocSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestDocSet.java?rev=1602277&r1=1602276&r2=1602277&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestDocSet.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestDocSet.java Thu Jun 12 19:40:36 2014
@@ -33,6 +33,7 @@ import org.apache.lucene.index.IndexRead
import org.apache.lucene.index.MultiReader;
import org.apache.lucene.index.NumericDocValues;
import org.apache.lucene.index.SortedDocValues;
+import org.apache.lucene.index.SortedNumericDocValues;
import org.apache.lucene.index.SortedSetDocValues;
import org.apache.lucene.index.StoredFieldVisitor;
import org.apache.lucene.search.DocIdSet;
@@ -407,6 +408,11 @@ public class TestDocSet extends LuceneTe
}
@Override
+ public SortedNumericDocValues getSortedNumericDocValues(String field) {
+ return null;
+ }
+
+ @Override
public SortedSetDocValues getSortedSetDocValues(String field) {
return null;
}