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/05/11 15:49:42 UTC
svn commit: r1593790 [3/8] - in /lucene/dev/branches/lucene5666:
lucene/benchmark/src/test/org/apache/lucene/benchmark/
lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/
lucene/core/src/java/org/apache/lucene/document/ lucene/core/src/java/...
Modified: lucene/dev/branches/lucene5666/lucene/core/src/test/org/apache/lucene/search/TestSort.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5666/lucene/core/src/test/org/apache/lucene/search/TestSort.java?rev=1593790&r1=1593789&r2=1593790&view=diff
==============================================================================
--- lucene/dev/branches/lucene5666/lucene/core/src/test/org/apache/lucene/search/TestSort.java (original)
+++ lucene/dev/branches/lucene5666/lucene/core/src/test/org/apache/lucene/search/TestSort.java Sun May 11 13:49:39 2014
@@ -18,31 +18,20 @@ package org.apache.lucene.search;
*/
import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import org.apache.lucene.analysis.MockAnalyzer;
+import org.apache.lucene.document.BinaryDocValuesField;
import org.apache.lucene.document.Document;
-import org.apache.lucene.document.DoubleField;
+import org.apache.lucene.document.DoubleDocValuesField;
import org.apache.lucene.document.Field;
-import org.apache.lucene.document.FloatField;
-import org.apache.lucene.document.IntField;
-import org.apache.lucene.document.LongField;
-import org.apache.lucene.document.StringField;
-import org.apache.lucene.index.DirectoryReader;
+import org.apache.lucene.document.FloatDocValuesField;
+import org.apache.lucene.document.NumericDocValuesField;
+import org.apache.lucene.document.SortedDocValuesField;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.index.IndexWriterConfig;
-import org.apache.lucene.index.MultiReader;
import org.apache.lucene.index.RandomIndexWriter;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.index.Terms;
-import org.apache.lucene.index.TermsEnum;
-import org.apache.lucene.search.BooleanClause.Occur;
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;
/*
* Very simple tests of sorting.
@@ -59,16 +48,19 @@ import org.apache.lucene.util.LuceneTest
* |
* \./
*/
+@SuppressCodecs({"Lucene40", "Lucene41", "Lucene42"}) // avoid codecs that don't support "missing"
public class TestSort extends LuceneTestCase {
-
+
/** Tests sorting on type string */
public void testString() throws IOException {
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
+ doc.add(new SortedDocValuesField("value", new BytesRef("foo")));
doc.add(newStringField("value", "foo", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
+ doc.add(new SortedDocValuesField("value", new BytesRef("bar")));
doc.add(newStringField("value", "bar", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
@@ -82,36 +74,7 @@ public class TestSort extends LuceneTest
// 'bar' comes before 'foo'
assertEquals("bar", searcher.doc(td.scoreDocs[0].doc).get("value"));
assertEquals("foo", searcher.doc(td.scoreDocs[1].doc).get("value"));
-
- ir.close();
- dir.close();
- }
-
- /** Tests sorting on type string with a missing value */
- public void testStringMissing() throws IOException {
- Directory dir = newDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
- Document doc = new Document();
- writer.addDocument(doc);
- doc = new Document();
- doc.add(newStringField("value", "foo", Field.Store.YES));
- writer.addDocument(doc);
- doc = new Document();
- doc.add(newStringField("value", "bar", Field.Store.YES));
- writer.addDocument(doc);
- IndexReader ir = writer.getReader();
- writer.shutdown();
- IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField("value", SortField.Type.STRING));
-
- TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(3, td.totalHits);
- // null comes first
- assertNull(searcher.doc(td.scoreDocs[0].doc).get("value"));
- assertEquals("bar", searcher.doc(td.scoreDocs[1].doc).get("value"));
- assertEquals("foo", searcher.doc(td.scoreDocs[2].doc).get("value"));
-
ir.close();
dir.close();
}
@@ -121,9 +84,11 @@ public class TestSort extends LuceneTest
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
+ doc.add(new SortedDocValuesField("value", new BytesRef("bar")));
doc.add(newStringField("value", "bar", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
+ doc.add(new SortedDocValuesField("value", new BytesRef("foo")));
doc.add(newStringField("value", "foo", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
@@ -147,9 +112,11 @@ public class TestSort extends LuceneTest
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
+ doc.add(new BinaryDocValuesField("value", new BytesRef("foo")));
doc.add(newStringField("value", "foo", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
+ doc.add(new BinaryDocValuesField("value", new BytesRef("bar")));
doc.add(newStringField("value", "bar", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
@@ -168,169 +135,72 @@ public class TestSort extends LuceneTest
dir.close();
}
- /** Tests sorting on type string_val with a missing value */
- public void testStringValMissing() throws IOException {
+ /** Tests reverse sorting on type string_val */
+ public void testStringValReverse() throws IOException {
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
- writer.addDocument(doc);
- doc = new Document();
- doc.add(newStringField("value", "foo", Field.Store.YES));
- writer.addDocument(doc);
- doc = new Document();
+ doc.add(new BinaryDocValuesField("value", new BytesRef("bar")));
doc.add(newStringField("value", "bar", Field.Store.YES));
writer.addDocument(doc);
- IndexReader ir = writer.getReader();
- writer.shutdown();
-
- IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField("value", SortField.Type.STRING_VAL));
-
- TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(3, td.totalHits);
- // null comes first
- assertNull(searcher.doc(td.scoreDocs[0].doc).get("value"));
- assertEquals("bar", searcher.doc(td.scoreDocs[1].doc).get("value"));
- assertEquals("foo", searcher.doc(td.scoreDocs[2].doc).get("value"));
-
- ir.close();
- dir.close();
- }
-
- /** Tests sorting on type string with a missing
- * value sorted first */
- public void testStringMissingSortedFirst() throws IOException {
- Directory dir = newDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
- Document doc = new Document();
- writer.addDocument(doc);
doc = new Document();
+ doc.add(new BinaryDocValuesField("value", new BytesRef("foo")));
doc.add(newStringField("value", "foo", Field.Store.YES));
writer.addDocument(doc);
- doc = new Document();
- doc.add(newStringField("value", "bar", Field.Store.YES));
- writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
IndexSearcher searcher = newSearcher(ir);
- SortField sf = new SortField("value", SortField.Type.STRING);
- Sort sort = new Sort(sf);
-
- TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(3, td.totalHits);
- // null comes first
- assertNull(searcher.doc(td.scoreDocs[0].doc).get("value"));
- assertEquals("bar", searcher.doc(td.scoreDocs[1].doc).get("value"));
- assertEquals("foo", searcher.doc(td.scoreDocs[2].doc).get("value"));
-
- ir.close();
- dir.close();
- }
-
- /** Tests reverse sorting on type string with a missing
- * value sorted first */
- public void testStringMissingSortedFirstReverse() throws IOException {
- Directory dir = newDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
- Document doc = new Document();
- writer.addDocument(doc);
- doc = new Document();
- doc.add(newStringField("value", "foo", Field.Store.YES));
- writer.addDocument(doc);
- doc = new Document();
- doc.add(newStringField("value", "bar", Field.Store.YES));
- writer.addDocument(doc);
- IndexReader ir = writer.getReader();
- writer.shutdown();
-
- IndexSearcher searcher = newSearcher(ir);
- SortField sf = new SortField("value", SortField.Type.STRING, true);
- Sort sort = new Sort(sf);
+ Sort sort = new Sort(new SortField("value", SortField.Type.STRING_VAL, true));
TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(3, td.totalHits);
+ assertEquals(2, td.totalHits);
+ // 'foo' comes after 'bar' in reverse order
assertEquals("foo", searcher.doc(td.scoreDocs[0].doc).get("value"));
assertEquals("bar", searcher.doc(td.scoreDocs[1].doc).get("value"));
- // null comes last
- assertNull(searcher.doc(td.scoreDocs[2].doc).get("value"));
ir.close();
dir.close();
}
-
- /** Tests sorting on type string with a missing
- * value sorted last */
- public void testStringValMissingSortedLast() throws IOException {
+
+ /** Tests sorting on type string_val, but with a SortedDocValuesField */
+ public void testStringValSorted() throws IOException {
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
- writer.addDocument(doc);
- doc = new Document();
+ doc.add(new SortedDocValuesField("value", new BytesRef("foo")));
doc.add(newStringField("value", "foo", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
+ doc.add(new SortedDocValuesField("value", new BytesRef("bar")));
doc.add(newStringField("value", "bar", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
IndexSearcher searcher = newSearcher(ir);
- SortField sf = new SortField("value", SortField.Type.STRING);
- sf.setMissingValue(SortField.STRING_LAST);
- Sort sort = new Sort(sf);
+ Sort sort = new Sort(new SortField("value", SortField.Type.STRING_VAL));
TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(3, td.totalHits);
+ assertEquals(2, td.totalHits);
+ // 'bar' comes before 'foo'
assertEquals("bar", searcher.doc(td.scoreDocs[0].doc).get("value"));
assertEquals("foo", searcher.doc(td.scoreDocs[1].doc).get("value"));
- // null comes last
- assertNull(searcher.doc(td.scoreDocs[2].doc).get("value"));
-
- ir.close();
- dir.close();
- }
-
- /** Tests reverse sorting on type string with a missing
- * value sorted last */
- public void testStringValMissingSortedLastReverse() throws IOException {
- Directory dir = newDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
- Document doc = new Document();
- writer.addDocument(doc);
- doc = new Document();
- doc.add(newStringField("value", "foo", Field.Store.YES));
- writer.addDocument(doc);
- doc = new Document();
- doc.add(newStringField("value", "bar", Field.Store.YES));
- writer.addDocument(doc);
- IndexReader ir = writer.getReader();
- writer.shutdown();
-
- IndexSearcher searcher = newSearcher(ir);
- SortField sf = new SortField("value", SortField.Type.STRING, true);
- sf.setMissingValue(SortField.STRING_LAST);
- Sort sort = new Sort(sf);
-
- TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(3, td.totalHits);
- // null comes first
- assertNull(searcher.doc(td.scoreDocs[0].doc).get("value"));
- assertEquals("foo", searcher.doc(td.scoreDocs[1].doc).get("value"));
- assertEquals("bar", searcher.doc(td.scoreDocs[2].doc).get("value"));
ir.close();
dir.close();
}
- /** Tests reverse sorting on type string_val */
- public void testStringValReverse() throws IOException {
+ /** Tests reverse sorting on type string_val, but with a SortedDocValuesField */
+ public void testStringValReverseSorted() throws IOException {
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
+ doc.add(new SortedDocValuesField("value", new BytesRef("bar")));
doc.add(newStringField("value", "bar", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
+ doc.add(new SortedDocValuesField("value", new BytesRef("foo")));
doc.add(newStringField("value", "foo", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
@@ -349,142 +219,67 @@ public class TestSort extends LuceneTest
dir.close();
}
- /** Tests sorting on internal docid order */
- public void testFieldDoc() throws Exception {
+ /** Tests sorting on type int */
+ public void testInt() throws IOException {
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
- doc.add(newStringField("value", "foo", Field.Store.NO));
+ doc.add(new NumericDocValuesField("value", 300000));
+ doc.add(newStringField("value", "300000", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(newStringField("value", "bar", Field.Store.NO));
- writer.addDocument(doc);
- IndexReader ir = writer.getReader();
- writer.shutdown();
-
- IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(SortField.FIELD_DOC);
-
- TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(2, td.totalHits);
- // docid 0, then docid 1
- assertEquals(0, td.scoreDocs[0].doc);
- assertEquals(1, td.scoreDocs[1].doc);
-
- ir.close();
- dir.close();
- }
-
- /** Tests sorting on reverse internal docid order */
- public void testFieldDocReverse() throws Exception {
- Directory dir = newDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
- Document doc = new Document();
- doc.add(newStringField("value", "foo", Field.Store.NO));
+ doc.add(new NumericDocValuesField("value", -1));
+ doc.add(newStringField("value", "-1", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(newStringField("value", "bar", Field.Store.NO));
+ doc.add(new NumericDocValuesField("value", 4));
+ doc.add(newStringField("value", "4", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField(null, SortField.Type.DOC, true));
+ Sort sort = new Sort(new SortField("value", SortField.Type.INT));
TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(2, td.totalHits);
- // docid 1, then docid 0
- assertEquals(1, td.scoreDocs[0].doc);
- assertEquals(0, td.scoreDocs[1].doc);
-
- ir.close();
- dir.close();
- }
-
- /** Tests default sort (by score) */
- public void testFieldScore() throws Exception {
- Directory dir = newDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
- Document doc = new Document();
- doc.add(newTextField("value", "foo bar bar bar bar", Field.Store.NO));
- writer.addDocument(doc);
- doc = new Document();
- doc.add(newTextField("value", "foo foo foo foo foo", Field.Store.NO));
- writer.addDocument(doc);
- IndexReader ir = writer.getReader();
- writer.shutdown();
-
- IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort();
-
- TopDocs actual = searcher.search(new TermQuery(new Term("value", "foo")), 10, sort);
- assertEquals(2, actual.totalHits);
-
- TopDocs expected = searcher.search(new TermQuery(new Term("value", "foo")), 10);
- // the two topdocs should be the same
- assertEquals(expected.totalHits, actual.totalHits);
- for (int i = 0; i < actual.scoreDocs.length; i++) {
- assertEquals(actual.scoreDocs[i].doc, expected.scoreDocs[i].doc);
- }
+ assertEquals(3, td.totalHits);
+ // numeric order
+ assertEquals("-1", searcher.doc(td.scoreDocs[0].doc).get("value"));
+ assertEquals("4", searcher.doc(td.scoreDocs[1].doc).get("value"));
+ assertEquals("300000", searcher.doc(td.scoreDocs[2].doc).get("value"));
ir.close();
dir.close();
}
- /** Tests default sort (by score) in reverse */
- public void testFieldScoreReverse() throws Exception {
- Directory dir = newDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
- Document doc = new Document();
- doc.add(newTextField("value", "foo bar bar bar bar", Field.Store.NO));
- writer.addDocument(doc);
- doc = new Document();
- doc.add(newTextField("value", "foo foo foo foo foo", Field.Store.NO));
- writer.addDocument(doc);
- IndexReader ir = writer.getReader();
- writer.shutdown();
-
- IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField(null, SortField.Type.SCORE, true));
-
- TopDocs actual = searcher.search(new TermQuery(new Term("value", "foo")), 10, sort);
- assertEquals(2, actual.totalHits);
-
- TopDocs expected = searcher.search(new TermQuery(new Term("value", "foo")), 10);
- // the two topdocs should be the reverse of each other
- assertEquals(expected.totalHits, actual.totalHits);
- assertEquals(actual.scoreDocs[0].doc, expected.scoreDocs[1].doc);
- assertEquals(actual.scoreDocs[1].doc, expected.scoreDocs[0].doc);
-
- ir.close();
- dir.close();
- }
-
- /** Tests sorting on type int */
- public void testInt() throws IOException {
+ /** Tests sorting on type int in reverse */
+ public void testIntReverse() throws IOException {
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
- doc.add(new IntField("value", 300000, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", 300000));
+ doc.add(newStringField("value", "300000", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new IntField("value", -1, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", -1));
+ doc.add(newStringField("value", "-1", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new IntField("value", 4, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", 4));
+ doc.add(newStringField("value", "4", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField("value", SortField.Type.INT));
+ Sort sort = new Sort(new SortField("value", SortField.Type.INT, true));
TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
assertEquals(3, td.totalHits);
- // numeric order
- assertEquals("-1", searcher.doc(td.scoreDocs[0].doc).get("value"));
+ // reverse numeric order
+ assertEquals("300000", searcher.doc(td.scoreDocs[0].doc).get("value"));
assertEquals("4", searcher.doc(td.scoreDocs[1].doc).get("value"));
- assertEquals("300000", searcher.doc(td.scoreDocs[2].doc).get("value"));
+ assertEquals("-1", searcher.doc(td.scoreDocs[2].doc).get("value"));
ir.close();
dir.close();
@@ -497,10 +292,12 @@ public class TestSort extends LuceneTest
Document doc = new Document();
writer.addDocument(doc);
doc = new Document();
- doc.add(new IntField("value", -1, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", -1));
+ doc.add(newStringField("value", "-1", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new IntField("value", 4, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", 4));
+ doc.add(newStringField("value", "4", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
@@ -526,10 +323,12 @@ public class TestSort extends LuceneTest
Document doc = new Document();
writer.addDocument(doc);
doc = new Document();
- doc.add(new IntField("value", -1, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", -1));
+ doc.add(newStringField("value", "-1", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new IntField("value", 4, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", 4));
+ doc.add(newStringField("value", "4", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
@@ -550,61 +349,67 @@ public class TestSort extends LuceneTest
dir.close();
}
- /** Tests sorting on type int in reverse */
- public void testIntReverse() throws IOException {
+ /** Tests sorting on type long */
+ public void testLong() throws IOException {
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
- doc.add(new IntField("value", 300000, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", 3000000000L));
+ doc.add(newStringField("value", "3000000000", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new IntField("value", -1, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", -1));
+ doc.add(newStringField("value", "-1", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new IntField("value", 4, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", 4));
+ doc.add(newStringField("value", "4", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField("value", SortField.Type.INT, true));
+ Sort sort = new Sort(new SortField("value", SortField.Type.LONG));
TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
assertEquals(3, td.totalHits);
- // reverse numeric order
- assertEquals("300000", searcher.doc(td.scoreDocs[0].doc).get("value"));
+ // numeric order
+ assertEquals("-1", searcher.doc(td.scoreDocs[0].doc).get("value"));
assertEquals("4", searcher.doc(td.scoreDocs[1].doc).get("value"));
- assertEquals("-1", searcher.doc(td.scoreDocs[2].doc).get("value"));
+ assertEquals("3000000000", searcher.doc(td.scoreDocs[2].doc).get("value"));
ir.close();
dir.close();
}
- /** Tests sorting on type long */
- public void testLong() throws IOException {
+ /** Tests sorting on type long in reverse */
+ public void testLongReverse() throws IOException {
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
- doc.add(new LongField("value", 3000000000L, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", 3000000000L));
+ doc.add(newStringField("value", "3000000000", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new LongField("value", -1, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", -1));
+ doc.add(newStringField("value", "-1", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new LongField("value", 4, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", 4));
+ doc.add(newStringField("value", "4", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField("value", SortField.Type.LONG));
+ Sort sort = new Sort(new SortField("value", SortField.Type.LONG, true));
TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
assertEquals(3, td.totalHits);
- // numeric order
- assertEquals("-1", searcher.doc(td.scoreDocs[0].doc).get("value"));
+ // reverse numeric order
+ assertEquals("3000000000", searcher.doc(td.scoreDocs[0].doc).get("value"));
assertEquals("4", searcher.doc(td.scoreDocs[1].doc).get("value"));
- assertEquals("3000000000", searcher.doc(td.scoreDocs[2].doc).get("value"));
+ assertEquals("-1", searcher.doc(td.scoreDocs[2].doc).get("value"));
ir.close();
dir.close();
@@ -617,10 +422,12 @@ public class TestSort extends LuceneTest
Document doc = new Document();
writer.addDocument(doc);
doc = new Document();
- doc.add(new LongField("value", -1, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", -1));
+ doc.add(newStringField("value", "-1", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new LongField("value", 4, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", 4));
+ doc.add(newStringField("value", "4", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
@@ -646,10 +453,12 @@ public class TestSort extends LuceneTest
Document doc = new Document();
writer.addDocument(doc);
doc = new Document();
- doc.add(new LongField("value", -1, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", -1));
+ doc.add(newStringField("value", "-1", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new LongField("value", 4, Field.Store.YES));
+ doc.add(new NumericDocValuesField("value", 4));
+ doc.add(newStringField("value", "4", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
@@ -670,61 +479,67 @@ public class TestSort extends LuceneTest
dir.close();
}
- /** Tests sorting on type long in reverse */
- public void testLongReverse() throws IOException {
+ /** Tests sorting on type float */
+ public void testFloat() throws IOException {
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
- doc.add(new LongField("value", 3000000000L, Field.Store.YES));
+ doc.add(new FloatDocValuesField("value", 30.1F));
+ doc.add(newStringField("value", "30.1", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new LongField("value", -1, Field.Store.YES));
+ doc.add(new FloatDocValuesField("value", -1.3F));
+ doc.add(newStringField("value", "-1.3", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new LongField("value", 4, Field.Store.YES));
+ doc.add(new FloatDocValuesField("value", 4.2F));
+ doc.add(newStringField("value", "4.2", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField("value", SortField.Type.LONG, true));
+ Sort sort = new Sort(new SortField("value", SortField.Type.FLOAT));
TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
assertEquals(3, td.totalHits);
- // reverse numeric order
- assertEquals("3000000000", searcher.doc(td.scoreDocs[0].doc).get("value"));
- assertEquals("4", searcher.doc(td.scoreDocs[1].doc).get("value"));
- assertEquals("-1", searcher.doc(td.scoreDocs[2].doc).get("value"));
+ // numeric order
+ assertEquals("-1.3", searcher.doc(td.scoreDocs[0].doc).get("value"));
+ assertEquals("4.2", searcher.doc(td.scoreDocs[1].doc).get("value"));
+ assertEquals("30.1", searcher.doc(td.scoreDocs[2].doc).get("value"));
ir.close();
dir.close();
}
- /** Tests sorting on type float */
- public void testFloat() throws IOException {
+ /** Tests sorting on type float in reverse */
+ public void testFloatReverse() throws IOException {
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
- doc.add(new FloatField("value", 30.1f, Field.Store.YES));
+ doc.add(new FloatDocValuesField("value", 30.1F));
+ doc.add(newStringField("value", "30.1", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new FloatField("value", -1.3f, Field.Store.YES));
+ doc.add(new FloatDocValuesField("value", -1.3F));
+ doc.add(newStringField("value", "-1.3", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new FloatField("value", 4.2f, Field.Store.YES));
+ doc.add(new FloatDocValuesField("value", 4.2F));
+ doc.add(newStringField("value", "4.2", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField("value", SortField.Type.FLOAT));
+ Sort sort = new Sort(new SortField("value", SortField.Type.FLOAT, true));
TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
assertEquals(3, td.totalHits);
- // numeric order
- assertEquals("-1.3", searcher.doc(td.scoreDocs[0].doc).get("value"));
+ // reverse numeric order
+ assertEquals("30.1", searcher.doc(td.scoreDocs[0].doc).get("value"));
assertEquals("4.2", searcher.doc(td.scoreDocs[1].doc).get("value"));
- assertEquals("30.1", searcher.doc(td.scoreDocs[2].doc).get("value"));
+ assertEquals("-1.3", searcher.doc(td.scoreDocs[2].doc).get("value"));
ir.close();
dir.close();
@@ -737,10 +552,12 @@ public class TestSort extends LuceneTest
Document doc = new Document();
writer.addDocument(doc);
doc = new Document();
- doc.add(new FloatField("value", -1.3f, Field.Store.YES));
+ doc.add(new FloatDocValuesField("value", -1.3F));
+ doc.add(newStringField("value", "-1.3", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new FloatField("value", 4.2f, Field.Store.YES));
+ doc.add(new FloatDocValuesField("value", 4.2F));
+ doc.add(newStringField("value", "4.2", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
@@ -766,10 +583,12 @@ public class TestSort extends LuceneTest
Document doc = new Document();
writer.addDocument(doc);
doc = new Document();
- doc.add(new FloatField("value", -1.3f, Field.Store.YES));
+ doc.add(new FloatDocValuesField("value", -1.3F));
+ doc.add(newStringField("value", "-1.3", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new FloatField("value", 4.2f, Field.Store.YES));
+ doc.add(new FloatDocValuesField("value", 4.2F));
+ doc.add(newStringField("value", "4.2", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
@@ -790,51 +609,25 @@ public class TestSort extends LuceneTest
dir.close();
}
- /** Tests sorting on type float in reverse */
- public void testFloatReverse() throws IOException {
- Directory dir = newDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
- Document doc = new Document();
- doc.add(new FloatField("value", 30.1f, Field.Store.YES));
- writer.addDocument(doc);
- doc = new Document();
- doc.add(new FloatField("value", -1.3f, Field.Store.YES));
- writer.addDocument(doc);
- doc = new Document();
- doc.add(new FloatField("value", 4.2f, Field.Store.YES));
- writer.addDocument(doc);
- IndexReader ir = writer.getReader();
- writer.shutdown();
-
- IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField("value", SortField.Type.FLOAT, true));
-
- TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(3, td.totalHits);
- // reverse numeric order
- assertEquals("30.1", searcher.doc(td.scoreDocs[0].doc).get("value"));
- assertEquals("4.2", searcher.doc(td.scoreDocs[1].doc).get("value"));
- assertEquals("-1.3", searcher.doc(td.scoreDocs[2].doc).get("value"));
-
- ir.close();
- dir.close();
- }
-
/** Tests sorting on type double */
public void testDouble() throws IOException {
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
- doc.add(new DoubleField("value", 30.1, Field.Store.YES));
+ doc.add(new DoubleDocValuesField("value", 30.1));
+ doc.add(newStringField("value", "30.1", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new DoubleField("value", -1.3, Field.Store.YES));
+ doc.add(new DoubleDocValuesField("value", -1.3));
+ doc.add(newStringField("value", "-1.3", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new DoubleField("value", 4.2333333333333, Field.Store.YES));
+ doc.add(new DoubleDocValuesField("value", 4.2333333333333));
+ doc.add(newStringField("value", "4.2333333333333", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new DoubleField("value", 4.2333333333332, Field.Store.YES));
+ doc.add(new DoubleDocValuesField("value", 4.2333333333332));
+ doc.add(newStringField("value", "4.2333333333332", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
@@ -859,10 +652,12 @@ public class TestSort extends LuceneTest
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
- doc.add(new DoubleField("value", +0d, Field.Store.YES));
+ doc.add(new DoubleDocValuesField("value", +0D));
+ doc.add(newStringField("value", "+0", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new DoubleField("value", -0d, Field.Store.YES));
+ doc.add(new DoubleDocValuesField("value", -0D));
+ doc.add(newStringField("value", "-0", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
IndexReader ir = writer.getReader();
@@ -874,506 +669,120 @@ public class TestSort extends LuceneTest
TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
assertEquals(2, td.totalHits);
// numeric order
- double v0 = searcher.doc(td.scoreDocs[0].doc).getField("value").numericValue().doubleValue();
- double v1 = searcher.doc(td.scoreDocs[1].doc).getField("value").numericValue().doubleValue();
- assertEquals(0, v0, 0d);
- assertEquals(0, v1, 0d);
- // check sign bits
- assertEquals(1, Double.doubleToLongBits(v0) >>> 63);
- assertEquals(0, Double.doubleToLongBits(v1) >>> 63);
+ assertEquals("-0", searcher.doc(td.scoreDocs[0].doc).get("value"));
+ assertEquals("+0", searcher.doc(td.scoreDocs[1].doc).get("value"));
ir.close();
dir.close();
}
- /** Tests sorting on type double with a missing value */
- public void testDoubleMissing() throws IOException {
+ /** Tests sorting on type double in reverse */
+ public void testDoubleReverse() throws IOException {
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
+ doc.add(new DoubleDocValuesField("value", 30.1));
+ doc.add(newStringField("value", "30.1", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new DoubleField("value", -1.3, Field.Store.YES));
+ doc.add(new DoubleDocValuesField("value", -1.3));
+ doc.add(newStringField("value", "-1.3", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new DoubleField("value", 4.2333333333333, Field.Store.YES));
+ doc.add(new DoubleDocValuesField("value", 4.2333333333333));
+ doc.add(newStringField("value", "4.2333333333333", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new DoubleField("value", 4.2333333333332, Field.Store.YES));
+ doc.add(new DoubleDocValuesField("value", 4.2333333333332));
+ doc.add(newStringField("value", "4.2333333333332", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField("value", SortField.Type.DOUBLE));
+ Sort sort = new Sort(new SortField("value", SortField.Type.DOUBLE, true));
TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
assertEquals(4, td.totalHits);
- // null treated as a 0
- assertEquals("-1.3", searcher.doc(td.scoreDocs[0].doc).get("value"));
- assertNull(searcher.doc(td.scoreDocs[1].doc).get("value"));
+ // numeric order
+ assertEquals("30.1", searcher.doc(td.scoreDocs[0].doc).get("value"));
+ assertEquals("4.2333333333333", searcher.doc(td.scoreDocs[1].doc).get("value"));
assertEquals("4.2333333333332", searcher.doc(td.scoreDocs[2].doc).get("value"));
- assertEquals("4.2333333333333", searcher.doc(td.scoreDocs[3].doc).get("value"));
+ assertEquals("-1.3", searcher.doc(td.scoreDocs[3].doc).get("value"));
ir.close();
dir.close();
}
- /** Tests sorting on type double, specifying the missing value should be treated as Double.MAX_VALUE */
- public void testDoubleMissingLast() throws IOException {
+ /** Tests sorting on type double with a missing value */
+ public void testDoubleMissing() throws IOException {
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
writer.addDocument(doc);
doc = new Document();
- doc.add(new DoubleField("value", -1.3, Field.Store.YES));
+ doc.add(new DoubleDocValuesField("value", -1.3));
+ doc.add(newStringField("value", "-1.3", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new DoubleField("value", 4.2333333333333, Field.Store.YES));
+ doc.add(new DoubleDocValuesField("value", 4.2333333333333));
+ doc.add(newStringField("value", "4.2333333333333", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new DoubleField("value", 4.2333333333332, Field.Store.YES));
+ doc.add(new DoubleDocValuesField("value", 4.2333333333332));
+ doc.add(newStringField("value", "4.2333333333332", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
IndexSearcher searcher = newSearcher(ir);
- SortField sortField = new SortField("value", SortField.Type.DOUBLE);
- sortField.setMissingValue(Double.MAX_VALUE);
- Sort sort = new Sort(sortField);
+ Sort sort = new Sort(new SortField("value", SortField.Type.DOUBLE));
TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
assertEquals(4, td.totalHits);
- // null treated as Double.MAX_VALUE
+ // null treated as a 0
assertEquals("-1.3", searcher.doc(td.scoreDocs[0].doc).get("value"));
- assertEquals("4.2333333333332", searcher.doc(td.scoreDocs[1].doc).get("value"));
- assertEquals("4.2333333333333", searcher.doc(td.scoreDocs[2].doc).get("value"));
- assertNull(searcher.doc(td.scoreDocs[3].doc).get("value"));
+ assertNull(searcher.doc(td.scoreDocs[1].doc).get("value"));
+ assertEquals("4.2333333333332", searcher.doc(td.scoreDocs[2].doc).get("value"));
+ assertEquals("4.2333333333333", searcher.doc(td.scoreDocs[3].doc).get("value"));
ir.close();
dir.close();
}
- /** Tests sorting on type double in reverse */
- public void testDoubleReverse() throws IOException {
+ /** Tests sorting on type double, specifying the missing value should be treated as Double.MAX_VALUE */
+ public void testDoubleMissingLast() throws IOException {
Directory dir = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
Document doc = new Document();
- doc.add(new DoubleField("value", 30.1, Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new DoubleField("value", -1.3, Field.Store.YES));
+ doc.add(new DoubleDocValuesField("value", -1.3));
+ doc.add(newStringField("value", "-1.3", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new DoubleField("value", 4.2333333333333, Field.Store.YES));
+ doc.add(new DoubleDocValuesField("value", 4.2333333333333));
+ doc.add(newStringField("value", "4.2333333333333", Field.Store.YES));
writer.addDocument(doc);
doc = new Document();
- doc.add(new DoubleField("value", 4.2333333333332, Field.Store.YES));
+ doc.add(new DoubleDocValuesField("value", 4.2333333333332));
+ doc.add(newStringField("value", "4.2333333333332", Field.Store.YES));
writer.addDocument(doc);
IndexReader ir = writer.getReader();
writer.shutdown();
IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField("value", SortField.Type.DOUBLE, true));
+ SortField sortField = new SortField("value", SortField.Type.DOUBLE);
+ sortField.setMissingValue(Double.MAX_VALUE);
+ Sort sort = new Sort(sortField);
TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
assertEquals(4, td.totalHits);
- // numeric order
- assertEquals("30.1", searcher.doc(td.scoreDocs[0].doc).get("value"));
- assertEquals("4.2333333333333", searcher.doc(td.scoreDocs[1].doc).get("value"));
- assertEquals("4.2333333333332", searcher.doc(td.scoreDocs[2].doc).get("value"));
- assertEquals("-1.3", searcher.doc(td.scoreDocs[3].doc).get("value"));
-
- ir.close();
- dir.close();
- }
-
- public void testEmptyStringVsNullStringSort() throws Exception {
- Directory dir = newDirectory();
- IndexWriter w = new IndexWriter(dir, newIndexWriterConfig(
- TEST_VERSION_CURRENT, new MockAnalyzer(random())));
- Document doc = new Document();
- doc.add(newStringField("f", "", Field.Store.NO));
- doc.add(newStringField("t", "1", Field.Store.NO));
- w.addDocument(doc);
- w.commit();
- doc = new Document();
- doc.add(newStringField("t", "1", Field.Store.NO));
- w.addDocument(doc);
-
- IndexReader r = DirectoryReader.open(w, true);
- w.shutdown();
- IndexSearcher s = newSearcher(r);
- TopDocs hits = s.search(new TermQuery(new Term("t", "1")), null, 10, new Sort(new SortField("f", SortField.Type.STRING)));
- assertEquals(2, hits.totalHits);
- // null sorts first
- assertEquals(1, hits.scoreDocs[0].doc);
- assertEquals(0, hits.scoreDocs[1].doc);
- r.close();
- dir.close();
- }
-
- /** test that we don't throw exception on multi-valued field (LUCENE-2142) */
- public void testMultiValuedField() throws IOException {
- Directory indexStore = newDirectory();
- IndexWriter writer = new IndexWriter(indexStore, newIndexWriterConfig(
- TEST_VERSION_CURRENT, new MockAnalyzer(random())));
- for(int i=0; i<5; i++) {
- Document doc = new Document();
- doc.add(new StringField("string", "a"+i, Field.Store.NO));
- doc.add(new StringField("string", "b"+i, Field.Store.NO));
- writer.addDocument(doc);
- }
- writer.forceMerge(1); // enforce one segment to have a higher unique term count in all cases
- writer.shutdown();
- Sort sort = new Sort(
- new SortField("string", SortField.Type.STRING),
- SortField.FIELD_DOC);
- // this should not throw AIOOBE or RuntimeEx
- IndexReader reader = DirectoryReader.open(indexStore);
- IndexSearcher searcher = newSearcher(reader);
- searcher.search(new MatchAllDocsQuery(), null, 500, sort);
- reader.close();
- indexStore.close();
- }
-
- public void testMaxScore() throws Exception {
- Directory d = newDirectory();
- // Not RIW because we need exactly 2 segs:
- IndexWriter w = new IndexWriter(d, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())));
- int id = 0;
- for(int seg=0;seg<2;seg++) {
- for(int docIDX=0;docIDX<10;docIDX++) {
- Document doc = new Document();
- doc.add(new IntField("id", docIDX, Field.Store.YES));
- StringBuilder sb = new StringBuilder();
- for(int i=0;i<id;i++) {
- sb.append(' ');
- sb.append("text");
- }
- doc.add(newTextField("body", sb.toString(), Field.Store.NO));
- w.addDocument(doc);
- id++;
- }
- w.commit();
- }
-
- IndexReader r = DirectoryReader.open(w, true);
- w.shutdown();
- Query q = new TermQuery(new Term("body", "text"));
- IndexSearcher s = newSearcher(r);
- float maxScore = s.search(q , 10).getMaxScore();
- assertEquals(maxScore, s.search(q, null, 3, Sort.INDEXORDER, random().nextBoolean(), true).getMaxScore(), 0.0);
- assertEquals(maxScore, s.search(q, null, 3, Sort.RELEVANCE, random().nextBoolean(), true).getMaxScore(), 0.0);
- assertEquals(maxScore, s.search(q, null, 3, new Sort(new SortField[] {new SortField("id", SortField.Type.INT, false)}), random().nextBoolean(), true).getMaxScore(), 0.0);
- assertEquals(maxScore, s.search(q, null, 3, new Sort(new SortField[] {new SortField("id", SortField.Type.INT, true)}), random().nextBoolean(), true).getMaxScore(), 0.0);
- r.close();
- d.close();
- }
-
- /** test sorts when there's nothing in the index */
- public void testEmptyIndex() throws Exception {
- IndexSearcher empty = newSearcher(new MultiReader());
- Query query = new TermQuery(new Term("contents", "foo"));
-
- Sort sort = new Sort();
- TopDocs td = empty.search(query, null, 10, sort, true, true);
- assertEquals(0, td.totalHits);
-
- sort.setSort(SortField.FIELD_DOC);
- td = empty.search(query, null, 10, sort, true, true);
- assertEquals(0, td.totalHits);
-
- sort.setSort(new SortField("int", SortField.Type.INT), SortField.FIELD_DOC);
- td = empty.search(query, null, 10, sort, true, true);
- assertEquals(0, td.totalHits);
-
- sort.setSort(new SortField("string", SortField.Type.STRING, true), SortField.FIELD_DOC);
- td = empty.search(query, null, 10, sort, true, true);
- assertEquals(0, td.totalHits);
-
- sort.setSort(new SortField("string_val", SortField.Type.STRING_VAL, true), SortField.FIELD_DOC);
- td = empty.search(query, null, 10, sort, true, true);
- assertEquals(0, td.totalHits);
-
- sort.setSort(new SortField("float", SortField.Type.FLOAT), new SortField("string", SortField.Type.STRING));
- td = empty.search(query, null, 10, sort, true, true);
- assertEquals(0, td.totalHits);
- }
-
- /**
- * test sorts for a custom int parser that uses a simple char encoding
- */
- public void testCustomIntParser() throws Exception {
- List<String> letters = Arrays.asList(new String[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" });
- Collections.shuffle(letters, random());
-
- Directory dir = newDirectory();
- RandomIndexWriter iw = new RandomIndexWriter(random(), dir);
- for (String letter : letters) {
- Document doc = new Document();
- doc.add(newStringField("parser", letter, Field.Store.YES));
- iw.addDocument(doc);
- }
-
- IndexReader ir = iw.getReader();
- iw.shutdown();
-
- IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField("parser", new FieldCache.IntParser() {
- @Override
- public int parseInt(BytesRef term) {
- return (term.bytes[term.offset]-'A') * 123456;
- }
-
- @Override
- public TermsEnum termsEnum(Terms terms) throws IOException {
- return terms.iterator(null);
- }
- }), SortField.FIELD_DOC );
-
- TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
-
- // results should be in alphabetical order
- assertEquals(10, td.totalHits);
- Collections.sort(letters);
- for (int i = 0; i < letters.size(); i++) {
- assertEquals(letters.get(i), searcher.doc(td.scoreDocs[i].doc).get("parser"));
- }
-
- ir.close();
- dir.close();
- }
-
- /**
- * test sorts for a custom long parser that uses a simple char encoding
- */
- public void testCustomLongParser() throws Exception {
- List<String> letters = Arrays.asList(new String[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" });
- Collections.shuffle(letters, random());
-
- Directory dir = newDirectory();
- RandomIndexWriter iw = new RandomIndexWriter(random(), dir);
- for (String letter : letters) {
- Document doc = new Document();
- doc.add(newStringField("parser", letter, Field.Store.YES));
- iw.addDocument(doc);
- }
-
- IndexReader ir = iw.getReader();
- iw.shutdown();
-
- IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField("parser", new FieldCache.LongParser() {
- @Override
- public long parseLong(BytesRef term) {
- return (term.bytes[term.offset]-'A') * 1234567890L;
- }
-
- @Override
- public TermsEnum termsEnum(Terms terms) throws IOException {
- return terms.iterator(null);
- }
- }), SortField.FIELD_DOC );
-
- TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
-
- // results should be in alphabetical order
- assertEquals(10, td.totalHits);
- Collections.sort(letters);
- for (int i = 0; i < letters.size(); i++) {
- assertEquals(letters.get(i), searcher.doc(td.scoreDocs[i].doc).get("parser"));
- }
-
- ir.close();
- dir.close();
- }
-
- /**
- * test sorts for a custom float parser that uses a simple char encoding
- */
- public void testCustomFloatParser() throws Exception {
- List<String> letters = Arrays.asList(new String[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" });
- Collections.shuffle(letters, random());
-
- Directory dir = newDirectory();
- RandomIndexWriter iw = new RandomIndexWriter(random(), dir);
- for (String letter : letters) {
- Document doc = new Document();
- doc.add(newStringField("parser", letter, Field.Store.YES));
- iw.addDocument(doc);
- }
-
- IndexReader ir = iw.getReader();
- iw.shutdown();
-
- IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField("parser", new FieldCache.FloatParser() {
- @Override
- public float parseFloat(BytesRef term) {
- return (float) Math.sqrt(term.bytes[term.offset]);
- }
-
- @Override
- public TermsEnum termsEnum(Terms terms) throws IOException {
- return terms.iterator(null);
- }
- }), SortField.FIELD_DOC );
-
- TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
-
- // results should be in alphabetical order
- assertEquals(10, td.totalHits);
- Collections.sort(letters);
- for (int i = 0; i < letters.size(); i++) {
- assertEquals(letters.get(i), searcher.doc(td.scoreDocs[i].doc).get("parser"));
- }
-
- ir.close();
- dir.close();
- }
-
- /**
- * test sorts for a custom double parser that uses a simple char encoding
- */
- public void testCustomDoubleParser() throws Exception {
- List<String> letters = Arrays.asList(new String[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" });
- Collections.shuffle(letters, random());
-
- Directory dir = newDirectory();
- RandomIndexWriter iw = new RandomIndexWriter(random(), dir);
- for (String letter : letters) {
- Document doc = new Document();
- doc.add(newStringField("parser", letter, Field.Store.YES));
- iw.addDocument(doc);
- }
-
- IndexReader ir = iw.getReader();
- iw.shutdown();
-
- IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField("parser", new FieldCache.DoubleParser() {
- @Override
- public double parseDouble(BytesRef term) {
- return Math.pow(term.bytes[term.offset], (term.bytes[term.offset]-'A'));
- }
-
- @Override
- public TermsEnum termsEnum(Terms terms) throws IOException {
- return terms.iterator(null);
- }
- }), SortField.FIELD_DOC );
-
- TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
-
- // results should be in alphabetical order
- assertEquals(10, td.totalHits);
- Collections.sort(letters);
- for (int i = 0; i < letters.size(); i++) {
- assertEquals(letters.get(i), searcher.doc(td.scoreDocs[i].doc).get("parser"));
- }
-
- ir.close();
- dir.close();
- }
-
- /** Tests sorting a single document */
- public void testSortOneDocument() throws Exception {
- Directory dir = newDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
- Document doc = new Document();
- doc.add(newStringField("value", "foo", Field.Store.YES));
- writer.addDocument(doc);
- IndexReader ir = writer.getReader();
- writer.shutdown();
-
- IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField("value", SortField.Type.STRING));
-
- TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(1, td.totalHits);
- assertEquals("foo", searcher.doc(td.scoreDocs[0].doc).get("value"));
-
- ir.close();
- dir.close();
- }
-
- /** Tests sorting a single document with scores */
- public void testSortOneDocumentWithScores() throws Exception {
- Directory dir = newDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
- Document doc = new Document();
- doc.add(newStringField("value", "foo", Field.Store.YES));
- writer.addDocument(doc);
- IndexReader ir = writer.getReader();
- writer.shutdown();
-
- IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(new SortField("value", SortField.Type.STRING));
-
- TopDocs expected = searcher.search(new TermQuery(new Term("value", "foo")), 10);
- assertEquals(1, expected.totalHits);
- TopDocs actual = searcher.search(new TermQuery(new Term("value", "foo")), null, 10, sort, true, true);
-
- assertEquals(expected.totalHits, actual.totalHits);
- assertEquals(expected.scoreDocs[0].score, actual.scoreDocs[0].score, 0F);
-
- ir.close();
- dir.close();
- }
-
- /** Tests sorting with two fields */
- public void testSortTwoFields() throws Exception {
- Directory dir = newDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
- Document doc = new Document();
- doc.add(newStringField("tievalue", "tied", Field.Store.NO));
- doc.add(newStringField("value", "foo", Field.Store.YES));
- writer.addDocument(doc);
- doc = new Document();
- doc.add(newStringField("tievalue", "tied", Field.Store.NO));
- doc.add(newStringField("value", "bar", Field.Store.YES));
- writer.addDocument(doc);
- IndexReader ir = writer.getReader();
- writer.shutdown();
-
- IndexSearcher searcher = newSearcher(ir);
- // tievalue, then value
- Sort sort = new Sort(new SortField("tievalue", SortField.Type.STRING),
- new SortField("value", SortField.Type.STRING));
-
- TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(2, td.totalHits);
- // 'bar' comes before 'foo'
- assertEquals("bar", searcher.doc(td.scoreDocs[0].doc).get("value"));
- assertEquals("foo", searcher.doc(td.scoreDocs[1].doc).get("value"));
-
- ir.close();
- dir.close();
- }
-
- public void testScore() throws IOException {
- Directory dir = newDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
- Document doc = new Document();
- doc.add(newStringField("value", "bar", Field.Store.NO));
- writer.addDocument(doc);
- doc = new Document();
- doc.add(newStringField("value", "foo", Field.Store.NO));
- writer.addDocument(doc);
- IndexReader ir = writer.getReader();
- writer.shutdown();
-
- IndexSearcher searcher = newSearcher(ir);
- Sort sort = new Sort(SortField.FIELD_SCORE);
-
- final BooleanQuery bq = new BooleanQuery();
- bq.add(new TermQuery(new Term("value", "foo")), Occur.SHOULD);
- bq.add(new MatchAllDocsQuery(), Occur.SHOULD);
- TopDocs td = searcher.search(bq, 10, sort);
- assertEquals(2, td.totalHits);
- assertEquals(1, td.scoreDocs[0].doc);
- assertEquals(0, td.scoreDocs[1].doc);
+ // null treated as Double.MAX_VALUE
+ assertEquals("-1.3", searcher.doc(td.scoreDocs[0].doc).get("value"));
+ assertEquals("4.2333333333332", searcher.doc(td.scoreDocs[1].doc).get("value"));
+ assertEquals("4.2333333333333", searcher.doc(td.scoreDocs[2].doc).get("value"));
+ assertNull(searcher.doc(td.scoreDocs[3].doc).get("value"));
ir.close();
dir.close();
Modified: lucene/dev/branches/lucene5666/lucene/core/src/test/org/apache/lucene/search/TestSortRandom.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5666/lucene/core/src/test/org/apache/lucene/search/TestSortRandom.java?rev=1593790&r1=1593789&r2=1593790&view=diff
==============================================================================
--- lucene/dev/branches/lucene5666/lucene/core/src/test/org/apache/lucene/search/TestSortRandom.java (original)
+++ lucene/dev/branches/lucene5666/lucene/core/src/test/org/apache/lucene/search/TestSortRandom.java Sun May 11 13:49:39 2014
@@ -32,7 +32,9 @@ import org.apache.lucene.document.Numeri
import org.apache.lucene.document.SortedDocValuesField;
import org.apache.lucene.document.StoredField;
import org.apache.lucene.index.AtomicReaderContext;
+import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.NumericDocValues;
import org.apache.lucene.index.RandomIndexWriter;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.store.Directory;
@@ -87,7 +89,6 @@ public class TestSortRandom extends Luce
br = new BytesRef(s);
doc.add(new SortedDocValuesField("stringdv", br));
- doc.add(newStringField("string", s, Field.Store.NO));
docValues.add(br);
} else {
@@ -124,17 +125,12 @@ public class TestSortRandom extends Luce
final SortField sf;
final boolean sortMissingLast;
final boolean missingIsNull;
- if (random.nextBoolean()) {
- sf = new SortField("stringdv", SortField.Type.STRING, reverse);
- // Can only use sort missing if the DVFormat
- // supports docsWithField:
- sortMissingLast = defaultCodecSupportsDocsWithField() && random().nextBoolean();
- missingIsNull = defaultCodecSupportsDocsWithField();
- } else {
- sf = new SortField("string", SortField.Type.STRING, reverse);
- sortMissingLast = random().nextBoolean();
- missingIsNull = true;
- }
+ sf = new SortField("stringdv", SortField.Type.STRING, reverse);
+ // Can only use sort missing if the DVFormat
+ // supports docsWithField:
+ sortMissingLast = defaultCodecSupportsDocsWithField() && random().nextBoolean();
+ missingIsNull = defaultCodecSupportsDocsWithField();
+
if (sortMissingLast) {
sf.setMissingValue(SortField.STRING_LAST);
}
@@ -264,14 +260,14 @@ public class TestSortRandom extends Luce
@Override
public DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) throws IOException {
final int maxDoc = context.reader().maxDoc();
- final FieldCache.Ints idSource = FieldCache.DEFAULT.getInts(context.reader(), "id", false);
+ final NumericDocValues idSource = DocValues.getNumeric(context.reader(), "id");
assertNotNull(idSource);
final FixedBitSet bits = new FixedBitSet(maxDoc);
for(int docID=0;docID<maxDoc;docID++) {
if (random.nextFloat() <= density && (acceptDocs == null || acceptDocs.get(docID))) {
bits.set(docID);
//System.out.println(" acc id=" + idSource.getInt(docID) + " docID=" + docID);
- matchValues.add(docValues.get(idSource.get(docID)));
+ matchValues.add(docValues.get((int) idSource.get(docID)));
}
}
Modified: lucene/dev/branches/lucene5666/lucene/core/src/test/org/apache/lucene/util/junitcompat/TestFailOnFieldCacheInsanity.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5666/lucene/core/src/test/org/apache/lucene/util/junitcompat/TestFailOnFieldCacheInsanity.java?rev=1593790&r1=1593789&r2=1593790&view=diff
==============================================================================
--- lucene/dev/branches/lucene5666/lucene/core/src/test/org/apache/lucene/util/junitcompat/TestFailOnFieldCacheInsanity.java (original)
+++ lucene/dev/branches/lucene5666/lucene/core/src/test/org/apache/lucene/util/junitcompat/TestFailOnFieldCacheInsanity.java Sun May 11 13:49:39 2014
@@ -22,10 +22,10 @@ import org.apache.lucene.document.String
import org.apache.lucene.index.AtomicReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.RandomIndexWriter;
-import org.apache.lucene.search.FieldCache;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.junit.Assert;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
@@ -58,14 +58,17 @@ public class TestFailOnFieldCacheInsanit
public void testDummy() throws Exception {
makeIndex();
+ /* nocommit
assertNotNull(FieldCache.DEFAULT.getTermsIndex(subR, "ints"));
assertNotNull(FieldCache.DEFAULT.getTerms(subR, "ints", false));
+ */
// NOTE: do not close reader/directory, else it
// purges FC entries
}
}
- @Test
+ // nocommit: move this to solr?
+ @Test @Ignore
public void testFailOnFieldCacheInsanity() {
Result r = JUnitCore.runClasses(Nested1.class);
boolean insane = false;
Modified: lucene/dev/branches/lucene5666/lucene/expressions/src/java/org/apache/lucene/expressions/SimpleBindings.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5666/lucene/expressions/src/java/org/apache/lucene/expressions/SimpleBindings.java?rev=1593790&r1=1593789&r2=1593790&view=diff
==============================================================================
--- lucene/dev/branches/lucene5666/lucene/expressions/src/java/org/apache/lucene/expressions/SimpleBindings.java (original)
+++ lucene/dev/branches/lucene5666/lucene/expressions/src/java/org/apache/lucene/expressions/SimpleBindings.java Sun May 11 13:49:39 2014
@@ -25,10 +25,6 @@ import org.apache.lucene.queries.functio
import org.apache.lucene.queries.function.valuesource.FloatFieldSource;
import org.apache.lucene.queries.function.valuesource.IntFieldSource;
import org.apache.lucene.queries.function.valuesource.LongFieldSource;
-import org.apache.lucene.search.FieldCache.DoubleParser;
-import org.apache.lucene.search.FieldCache.FloatParser;
-import org.apache.lucene.search.FieldCache.IntParser;
-import org.apache.lucene.search.FieldCache.LongParser;
import org.apache.lucene.search.SortField;
/**
@@ -87,13 +83,13 @@ public final class SimpleBindings extend
SortField field = (SortField) o;
switch(field.getType()) {
case INT:
- return new IntFieldSource(field.getField(), (IntParser) field.getParser());
+ return new IntFieldSource(field.getField());
case LONG:
- return new LongFieldSource(field.getField(), (LongParser) field.getParser());
+ return new LongFieldSource(field.getField());
case FLOAT:
- return new FloatFieldSource(field.getField(), (FloatParser) field.getParser());
+ return new FloatFieldSource(field.getField());
case DOUBLE:
- return new DoubleFieldSource(field.getField(), (DoubleParser) field.getParser());
+ return new DoubleFieldSource(field.getField());
case SCORE:
return getScoreValueSource();
default:
Modified: lucene/dev/branches/lucene5666/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5666/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java?rev=1593790&r1=1593789&r2=1593790&view=diff
==============================================================================
--- lucene/dev/branches/lucene5666/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java (original)
+++ lucene/dev/branches/lucene5666/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java Sun May 11 13:49:39 2014
@@ -1,7 +1,6 @@
package org.apache.lucene.expressions;
import org.apache.lucene.document.Document;
-import org.apache.lucene.document.DoubleField;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.NumericDocValuesField;
import org.apache.lucene.expressions.js.JavascriptCompiler;
@@ -53,24 +52,24 @@ public class TestDemoExpressions extend
doc.add(newStringField("id", "1", Field.Store.YES));
doc.add(newTextField("body", "some contents and more contents", Field.Store.NO));
doc.add(new NumericDocValuesField("popularity", 5));
- doc.add(new DoubleField("latitude", 40.759011, Field.Store.NO));
- doc.add(new DoubleField("longitude", -73.9844722, Field.Store.NO));
+ doc.add(new NumericDocValuesField("latitude", Double.doubleToRawLongBits(40.759011)));
+ doc.add(new NumericDocValuesField("longitude", Double.doubleToRawLongBits(-73.9844722)));
iw.addDocument(doc);
doc = new Document();
doc.add(newStringField("id", "2", Field.Store.YES));
doc.add(newTextField("body", "another document with different contents", Field.Store.NO));
doc.add(new NumericDocValuesField("popularity", 20));
- doc.add(new DoubleField("latitude", 40.718266, Field.Store.NO));
- doc.add(new DoubleField("longitude", -74.007819, Field.Store.NO));
+ doc.add(new NumericDocValuesField("latitude", Double.doubleToRawLongBits(40.718266)));
+ doc.add(new NumericDocValuesField("longitude", Double.doubleToRawLongBits(-74.007819)));
iw.addDocument(doc);
doc = new Document();
doc.add(newStringField("id", "3", Field.Store.YES));
doc.add(newTextField("body", "crappy contents", Field.Store.NO));
doc.add(new NumericDocValuesField("popularity", 2));
- doc.add(new DoubleField("latitude", 40.7051157, Field.Store.NO));
- doc.add(new DoubleField("longitude", -74.0088305, Field.Store.NO));
+ doc.add(new NumericDocValuesField("latitude", Double.doubleToRawLongBits(40.7051157)));
+ doc.add(new NumericDocValuesField("longitude", Double.doubleToRawLongBits(-74.0088305)));
iw.addDocument(doc);
reader = iw.getReader();
Modified: lucene/dev/branches/lucene5666/lucene/facet/src/test/org/apache/lucene/facet/TestDrillSideways.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5666/lucene/facet/src/test/org/apache/lucene/facet/TestDrillSideways.java?rev=1593790&r1=1593789&r2=1593790&view=diff
==============================================================================
--- lucene/dev/branches/lucene5666/lucene/facet/src/test/org/apache/lucene/facet/TestDrillSideways.java (original)
+++ lucene/dev/branches/lucene5666/lucene/facet/src/test/org/apache/lucene/facet/TestDrillSideways.java Sun May 11 13:49:39 2014
@@ -30,6 +30,7 @@ import java.util.Set;
import org.apache.lucene.analysis.MockAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
+import org.apache.lucene.document.SortedDocValuesField;
import org.apache.lucene.document.StringField;
import org.apache.lucene.facet.DrillSideways.DrillSidewaysResult;
import org.apache.lucene.facet.sortedset.DefaultSortedSetDocValuesReaderState;
@@ -497,6 +498,7 @@ public class TestDrillSideways extends F
for(Doc rawDoc : docs) {
Document doc = new Document();
doc.add(newStringField("id", rawDoc.id, Field.Store.YES));
+ doc.add(new SortedDocValuesField("id", new BytesRef(rawDoc.id)));
doc.add(newStringField("content", rawDoc.contentToken, Field.Store.NO));
if (VERBOSE) {
Modified: lucene/dev/branches/lucene5666/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetSumValueSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5666/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetSumValueSource.java?rev=1593790&r1=1593789&r2=1593790&view=diff
==============================================================================
--- lucene/dev/branches/lucene5666/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetSumValueSource.java (original)
+++ lucene/dev/branches/lucene5666/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetSumValueSource.java Sun May 11 13:49:39 2014
@@ -80,27 +80,27 @@ public class TestTaxonomyFacetSumValueSo
// Reused across documents, to add the necessary facet
// fields:
Document doc = new Document();
- doc.add(new IntField("num", 10, Field.Store.NO));
+ doc.add(new NumericDocValuesField("num", 10));
doc.add(new FacetField("Author", "Bob"));
writer.addDocument(config.build(taxoWriter, doc));
doc = new Document();
- doc.add(new IntField("num", 20, Field.Store.NO));
+ doc.add(new NumericDocValuesField("num", 20));
doc.add(new FacetField("Author", "Lisa"));
writer.addDocument(config.build(taxoWriter, doc));
doc = new Document();
- doc.add(new IntField("num", 30, Field.Store.NO));
+ doc.add(new NumericDocValuesField("num", 30));
doc.add(new FacetField("Author", "Lisa"));
writer.addDocument(config.build(taxoWriter, doc));
doc = new Document();
- doc.add(new IntField("num", 40, Field.Store.NO));
+ doc.add(new NumericDocValuesField("num", 40));
doc.add(new FacetField("Author", "Susan"));
writer.addDocument(config.build(taxoWriter, doc));
doc = new Document();
- doc.add(new IntField("num", 45, Field.Store.NO));
+ doc.add(new NumericDocValuesField("num", 45));
doc.add(new FacetField("Author", "Frank"));
writer.addDocument(config.build(taxoWriter, doc));
@@ -145,7 +145,7 @@ public class TestTaxonomyFacetSumValueSo
FacetsConfig config = new FacetsConfig();
Document doc = new Document();
- doc.add(new IntField("num", 10, Field.Store.NO));
+ doc.add(new NumericDocValuesField("num", 10));
doc.add(new FacetField("a", "foo1"));
writer.addDocument(config.build(taxoWriter, doc));
@@ -154,7 +154,7 @@ public class TestTaxonomyFacetSumValueSo
}
doc = new Document();
- doc.add(new IntField("num", 20, Field.Store.NO));
+ doc.add(new NumericDocValuesField("num", 20));
doc.add(new FacetField("a", "foo2"));
doc.add(new FacetField("b", "bar1"));
writer.addDocument(config.build(taxoWriter, doc));
@@ -164,7 +164,7 @@ public class TestTaxonomyFacetSumValueSo
}
doc = new Document();
- doc.add(new IntField("num", 30, Field.Store.NO));
+ doc.add(new NumericDocValuesField("num", 30));
doc.add(new FacetField("a", "foo3"));
doc.add(new FacetField("b", "bar2"));
doc.add(new FacetField("c", "baz1"));
Modified: lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/GroupingSearch.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/GroupingSearch.java?rev=1593790&r1=1593789&r2=1593790&view=diff
==============================================================================
--- lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/GroupingSearch.java (original)
+++ lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/GroupingSearch.java Sun May 11 13:49:39 2014
@@ -20,7 +20,6 @@ package org.apache.lucene.search.groupin
import org.apache.lucene.queries.function.ValueSource;
import org.apache.lucene.search.CachingCollector;
import org.apache.lucene.search.Collector;
-import org.apache.lucene.search.FieldCache;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MultiCollector;
@@ -78,7 +77,7 @@ public class GroupingSearch {
private Bits matchingGroupHeads;
/**
- * Constructs a <code>GroupingSearch</code> instance that groups documents by index terms using the {@link FieldCache}.
+ * Constructs a <code>GroupingSearch</code> instance that groups documents by index terms using DocValues.
* The group field can only have one token per document. This means that the field must not be analysed.
*
* @param groupField The name of the field to group by.
Modified: lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermAllGroupHeadsCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermAllGroupHeadsCollector.java?rev=1593790&r1=1593789&r2=1593790&view=diff
==============================================================================
--- lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermAllGroupHeadsCollector.java (original)
+++ lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermAllGroupHeadsCollector.java Sun May 11 13:49:39 2014
@@ -18,9 +18,8 @@ package org.apache.lucene.search.groupin
*/
import org.apache.lucene.index.AtomicReaderContext;
+import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.SortedDocValues;
-import org.apache.lucene.search.LeafCollector;
-import org.apache.lucene.search.FieldCache;
import org.apache.lucene.search.FieldComparator;
import org.apache.lucene.search.Scorer;
import org.apache.lucene.search.Sort;
@@ -161,7 +160,7 @@ public abstract class TermAllGroupHeadsC
@Override
protected void doSetNextReader(AtomicReaderContext context) throws IOException {
this.readerContext = context;
- groupIndex = FieldCache.DEFAULT.getTermsIndex(context.reader(), groupField);
+ groupIndex = DocValues.getSorted(context.reader(), groupField);
for (GroupHead groupHead : groups.values()) {
for (int i = 0; i < groupHead.comparators.length; i++) {
@@ -276,13 +275,13 @@ public abstract class TermAllGroupHeadsC
@Override
protected void doSetNextReader(AtomicReaderContext context) throws IOException {
this.readerContext = context;
- groupIndex = FieldCache.DEFAULT.getTermsIndex(context.reader(), groupField);
+ groupIndex = DocValues.getSorted(context.reader(), groupField);
for (int i = 0; i < fields.length; i++) {
if (fields[i].getType() == SortField.Type.SCORE) {
continue;
}
- sortsIndex[i] = FieldCache.DEFAULT.getTermsIndex(context.reader(), fields[i].getField());
+ sortsIndex[i] = DocValues.getSorted(context.reader(), fields[i].getField());
}
// Clear ordSet and fill it with previous encountered groups that can occur in the current segment.
@@ -444,9 +443,9 @@ public abstract class TermAllGroupHeadsC
@Override
protected void doSetNextReader(AtomicReaderContext context) throws IOException {
this.readerContext = context;
- groupIndex = FieldCache.DEFAULT.getTermsIndex(context.reader(), groupField);
+ groupIndex = DocValues.getSorted(context.reader(), groupField);
for (int i = 0; i < fields.length; i++) {
- sortsIndex[i] = FieldCache.DEFAULT.getTermsIndex(context.reader(), fields[i].getField());
+ sortsIndex[i] = DocValues.getSorted(context.reader(), fields[i].getField());
}
// Clear ordSet and fill it with previous encountered groups that can occur in the current segment.
@@ -587,7 +586,7 @@ public abstract class TermAllGroupHeadsC
@Override
protected void doSetNextReader(AtomicReaderContext context) throws IOException {
this.readerContext = context;
- groupIndex = FieldCache.DEFAULT.getTermsIndex(context.reader(), groupField);
+ groupIndex = DocValues.getSorted(context.reader(), groupField);
// Clear ordSet and fill it with previous encountered groups that can occur in the current segment.
ordSet.clear();
Modified: lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermAllGroupsCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermAllGroupsCollector.java?rev=1593790&r1=1593789&r2=1593790&view=diff
==============================================================================
--- lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermAllGroupsCollector.java (original)
+++ lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermAllGroupsCollector.java Sun May 11 13:49:39 2014
@@ -18,9 +18,9 @@ package org.apache.lucene.search.groupin
*/
import org.apache.lucene.index.AtomicReaderContext;
+import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.SortedDocValues;
import org.apache.lucene.search.LeafCollector;
-import org.apache.lucene.search.FieldCache;
import org.apache.lucene.search.grouping.AbstractAllGroupsCollector;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.SentinelIntSet;
@@ -105,7 +105,7 @@ public class TermAllGroupsCollector exte
@Override
protected void doSetNextReader(AtomicReaderContext context) throws IOException {
- index = FieldCache.DEFAULT.getTermsIndex(context.reader(), groupField);
+ index = DocValues.getSorted(context.reader(), groupField);
// Clear ordSet and fill it with previous encountered groups that can occur in the current segment.
ordSet.clear();
Modified: lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermDistinctValuesCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermDistinctValuesCollector.java?rev=1593790&r1=1593789&r2=1593790&view=diff
==============================================================================
--- lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermDistinctValuesCollector.java (original)
+++ lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermDistinctValuesCollector.java Sun May 11 13:49:39 2014
@@ -18,9 +18,9 @@ package org.apache.lucene.search.groupin
*/
import org.apache.lucene.index.AtomicReaderContext;
+import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.SortedDocValues;
import org.apache.lucene.search.LeafCollector;
-import org.apache.lucene.search.FieldCache;
import org.apache.lucene.search.grouping.AbstractDistinctValuesCollector;
import org.apache.lucene.search.grouping.SearchGroup;
import org.apache.lucene.util.BytesRef;
@@ -109,8 +109,8 @@ public class TermDistinctValuesCollector
@Override
protected void doSetNextReader(AtomicReaderContext context) throws IOException {
- groupFieldTermIndex = FieldCache.DEFAULT.getTermsIndex(context.reader(), groupField);
- countFieldTermIndex = FieldCache.DEFAULT.getTermsIndex(context.reader(), countField);
+ groupFieldTermIndex = DocValues.getSorted(context.reader(), groupField);
+ countFieldTermIndex = DocValues.getSorted(context.reader(), countField);
ordSet.clear();
for (GroupCount group : groups) {
int groupOrd = group.groupValue == null ? -1 : groupFieldTermIndex.lookupTerm(group.groupValue);
Modified: lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermFirstPassGroupingCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermFirstPassGroupingCollector.java?rev=1593790&r1=1593789&r2=1593790&view=diff
==============================================================================
--- lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermFirstPassGroupingCollector.java (original)
+++ lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermFirstPassGroupingCollector.java Sun May 11 13:49:39 2014
@@ -20,9 +20,9 @@ package org.apache.lucene.search.groupin
import java.io.IOException;
import org.apache.lucene.index.AtomicReaderContext;
+import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.SortedDocValues;
import org.apache.lucene.search.LeafCollector;
-import org.apache.lucene.search.FieldCache;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.grouping.AbstractFirstPassGroupingCollector;
import org.apache.lucene.util.BytesRef;
@@ -88,6 +88,6 @@ public class TermFirstPassGroupingCollec
@Override
protected void doSetNextReader(AtomicReaderContext readerContext) throws IOException {
super.doSetNextReader(readerContext);
- index = FieldCache.DEFAULT.getTermsIndex(readerContext.reader(), groupField);
+ index = DocValues.getSorted(readerContext.reader(), groupField);
}
}
Modified: lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java?rev=1593790&r1=1593789&r2=1593790&view=diff
==============================================================================
--- lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java (original)
+++ lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermGroupFacetCollector.java Sun May 11 13:49:39 2014
@@ -18,11 +18,11 @@ package org.apache.lucene.search.groupin
*/
import org.apache.lucene.index.AtomicReaderContext;
+import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.SortedDocValues;
import org.apache.lucene.index.SortedSetDocValues;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.search.LeafCollector;
-import org.apache.lucene.search.FieldCache;
import org.apache.lucene.search.grouping.AbstractGroupFacetCollector;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.SentinelIntSet;
@@ -34,7 +34,7 @@ import java.util.List;
/**
* An implementation of {@link AbstractGroupFacetCollector} that computes grouped facets based on the indexed terms
- * from the {@link FieldCache}.
+ * from DocValues.
*
* @lucene.experimental
*/
@@ -128,8 +128,8 @@ public abstract class TermGroupFacetColl
segmentResults.add(createSegmentResult());
}
- groupFieldTermsIndex = FieldCache.DEFAULT.getTermsIndex(context.reader(), groupField);
- facetFieldTermsIndex = FieldCache.DEFAULT.getTermsIndex(context.reader(), facetField);
+ groupFieldTermsIndex = DocValues.getSorted(context.reader(), groupField);
+ facetFieldTermsIndex = DocValues.getSorted(context.reader(), facetField);
// 1+ to allow for the -1 "not set":
segmentFacetCounts = new int[facetFieldTermsIndex.getValueCount()+1];
@@ -283,8 +283,8 @@ public abstract class TermGroupFacetColl
segmentResults.add(createSegmentResult());
}
- groupFieldTermsIndex = FieldCache.DEFAULT.getTermsIndex(context.reader(), groupField);
- facetFieldDocTermOrds = FieldCache.DEFAULT.getDocTermOrds(context.reader(), facetField);
+ groupFieldTermsIndex = DocValues.getSorted(context.reader(), groupField);
+ facetFieldDocTermOrds = DocValues.getSortedSet(context.reader(), facetField);
facetFieldNumTerms = (int) facetFieldDocTermOrds.getValueCount();
if (facetFieldNumTerms == 0) {
facetOrdTermsEnum = null;
Modified: lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermSecondPassGroupingCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermSecondPassGroupingCollector.java?rev=1593790&r1=1593789&r2=1593790&view=diff
==============================================================================
--- lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermSecondPassGroupingCollector.java (original)
+++ lucene/dev/branches/lucene5666/lucene/grouping/src/java/org/apache/lucene/search/grouping/term/TermSecondPassGroupingCollector.java Sun May 11 13:49:39 2014
@@ -21,9 +21,9 @@ import java.io.IOException;
import java.util.Collection;
import org.apache.lucene.index.AtomicReaderContext;
+import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.SortedDocValues;
import org.apache.lucene.search.LeafCollector;
-import org.apache.lucene.search.FieldCache;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.grouping.AbstractSecondPassGroupingCollector;
import org.apache.lucene.search.grouping.SearchGroup;
@@ -56,7 +56,7 @@ public class TermSecondPassGroupingColle
@Override
protected void doSetNextReader(AtomicReaderContext readerContext) throws IOException {
super.doSetNextReader(readerContext);
- index = FieldCache.DEFAULT.getTermsIndex(readerContext.reader(), groupField);
+ index = DocValues.getSorted(readerContext.reader(), groupField);
// Rebuild ordSet
ordSet.clear();