From 594c9a35f78a4d6f65c68bad21487bce50532cdb Mon Sep 17 00:00:00 2001 From: Uwe Schindler Date: Tue, 13 Oct 2009 11:18:25 +0000 Subject: [PATCH] LUCENE-1972: Remove deprecated ExtendedFieldCache, custom and auto caches, SortField.AUTO, deprecated custom sort, deprecated sorting HitCollectors, deprecated TopDocs HitCollectors, legacy search git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@824697 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 5 + common-build.xml | 2 +- .../store/instantiated/TestEmptyIndex.java | 7 +- .../store/instantiated/TestIndicesEquals.java | 2 - .../store/instantiated/TestRealTime.java | 11 +- .../apache/lucene/search/TestRemoteSort.java | 71 +-- .../lucene/search/ExtendedFieldCache.java | 50 -- .../org/apache/lucene/search/FieldCache.java | 33 -- .../apache/lucene/search/FieldCacheImpl.java | 120 +---- .../lucene/search/FieldDocSortedHitQueue.java | 15 +- .../lucene/search/FieldSortedHitQueue.java | 501 ------------------ .../lucene/search/FieldValueHitQueue.java | 10 - .../apache/lucene/search/IndexSearcher.java | 30 -- .../lucene/search/ParallelMultiSearcher.java | 3 - .../org/apache/lucene/search/QueryFilter.java | 43 -- .../lucene/search/ScoreDocComparator.java | 96 ---- src/java/org/apache/lucene/search/Sort.java | 80 +-- .../apache/lucene/search/SortComparator.java | 90 ---- .../lucene/search/SortComparatorSource.java | 52 -- .../org/apache/lucene/search/SortField.java | 146 +---- .../apache/lucene/search/TopDocCollector.java | 98 ---- .../lucene/search/TopFieldDocCollector.java | 77 --- .../lucene/search/TestCustomSearcherSort.java | 18 +- .../apache/lucene/search/TestDateSort.java | 4 +- .../search/TestElevationComparator.java | 4 +- .../lucene/search/TestFilteredQuery.java | 2 +- .../org/apache/lucene/search/TestSort.java | 171 +++--- .../apache/lucene/search/TestStressSort.java | 74 +-- 28 files changed, 152 insertions(+), 1663 deletions(-) delete mode 100644 src/java/org/apache/lucene/search/ExtendedFieldCache.java delete mode 100644 src/java/org/apache/lucene/search/FieldSortedHitQueue.java delete mode 100644 src/java/org/apache/lucene/search/QueryFilter.java delete mode 100644 src/java/org/apache/lucene/search/ScoreDocComparator.java delete mode 100644 src/java/org/apache/lucene/search/SortComparator.java delete mode 100644 src/java/org/apache/lucene/search/SortComparatorSource.java delete mode 100644 src/java/org/apache/lucene/search/TopDocCollector.java delete mode 100644 src/java/org/apache/lucene/search/TopFieldDocCollector.java diff --git a/CHANGES.txt b/CHANGES.txt index 9822e85a821..53af77ac653 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -56,6 +56,11 @@ API Changes * LUCENE-1975: Remove deprecated SpanQuery.getTerms() and generify Query.extractTerms(Set) (Michael Busch) +* LUCENE-1972: Remove deprecated ExtendedFieldCache, custom and auto + caches, SortField.AUTO, deprecated custom sort, deprecated sorting + HitCollectors, deprecated TopDocs HitCollectors, legacy search + (Uwe Schindler) + Bug fixes * LUCENE-1951: When the text provided to WildcardQuery has no wildcard diff --git a/common-build.xml b/common-build.xml index 547f2fc2174..41a0bca10e5 100644 --- a/common-build.xml +++ b/common-build.xml @@ -42,7 +42,7 @@ - + diff --git a/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestEmptyIndex.java b/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestEmptyIndex.java index b9ae1b4cee3..89785d8786d 100644 --- a/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestEmptyIndex.java +++ b/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestEmptyIndex.java @@ -23,7 +23,7 @@ import org.apache.lucene.index.Term; import org.apache.lucene.index.TermEnum; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.TermQuery; -import org.apache.lucene.search.TopDocCollector; +import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.RAMDirectory; @@ -39,10 +39,9 @@ public class TestEmptyIndex extends TestCase { IndexReader r = new InstantiatedIndexReader(ii); IndexSearcher s = new IndexSearcher(r); - TopDocCollector c = new TopDocCollector(1); - s.search(new TermQuery(new Term("foo", "bar")), c); + TopDocs td = s.search(new TermQuery(new Term("foo", "bar")), 1); - assertEquals(0, c.getTotalHits()); + assertEquals(0, td.totalHits); s.close(); r.close(); diff --git a/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestIndicesEquals.java b/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestIndicesEquals.java index 172ea17ff55..d73ac9be300 100644 --- a/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestIndicesEquals.java +++ b/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestIndicesEquals.java @@ -43,8 +43,6 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.TermQuery; -import org.apache.lucene.search.TopDocCollector; -import org.apache.lucene.search.TopScoreDocCollector; import org.apache.lucene.util.AttributeImpl; /** diff --git a/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestRealTime.java b/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestRealTime.java index 8331bb3b460..070b9ad8679 100644 --- a/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestRealTime.java +++ b/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestRealTime.java @@ -17,12 +17,12 @@ package org.apache.lucene.store.instantiated; import junit.framework.TestCase; import org.apache.lucene.search.IndexSearcher; -import org.apache.lucene.search.TopDocCollector; -import org.apache.lucene.search.HitCollector; import org.apache.lucene.search.TermQuery; +import org.apache.lucene.search.Scorer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.Term; +import org.apache.lucene.index.IndexReader; /** * Assert that the content of an index @@ -62,9 +62,12 @@ public class TestRealTime extends TestCase { } - public static class Collector extends HitCollector { + public static class Collector extends org.apache.lucene.search.Collector { private int hits = 0; - public void collect(int doc, float score) { + public void setScorer(Scorer scorer) {} + public void setNextReader(IndexReader reader, int docBase) {} + public boolean acceptsDocsOutOfOrder() { return true; } + public void collect(int doc) { hits++; } } diff --git a/contrib/remote/src/test/org/apache/lucene/search/TestRemoteSort.java b/contrib/remote/src/test/org/apache/lucene/search/TestRemoteSort.java index cfcab0c05e3..89dfba87670 100644 --- a/contrib/remote/src/test/org/apache/lucene/search/TestRemoteSort.java +++ b/contrib/remote/src/test/org/apache/lucene/search/TestRemoteSort.java @@ -236,29 +236,6 @@ public class TestRemoteSort extends LuceneTestCase implements Serializable { runMultiSorts(multi, true); // this runs on the full index } - // test custom search when remote - /* rewrite with new API - public void testRemoteCustomSort() throws Exception { - Searchable searcher = getRemote(); - MultiSearcher multi = new MultiSearcher (new Searchable[] { searcher }); - sort.setSort (new SortField ("custom", SampleComparable.getComparatorSource())); - assertMatches (multi, queryX, sort, "CAIEG"); - sort.setSort (new SortField ("custom", SampleComparable.getComparatorSource(), true)); - assertMatches (multi, queryY, sort, "HJDBF"); - - assertSaneFieldCaches(getName() + " ComparatorSource"); - FieldCache.DEFAULT.purgeAllCaches(); - - SortComparator custom = SampleComparable.getComparator(); - sort.setSort (new SortField ("custom", custom)); - assertMatches (multi, queryX, sort, "CAIEG"); - sort.setSort (new SortField ("custom", custom, true)); - assertMatches (multi, queryY, sort, "HJDBF"); - - assertSaneFieldCaches(getName() + " Comparator"); - FieldCache.DEFAULT.purgeAllCaches(); - }*/ - // test that the relevancy scores are the same even if // hits are sorted public void testNormalizedScores() throws Exception { @@ -283,32 +260,32 @@ public class TestRemoteSort extends LuceneTestCase implements Serializable { assertSameValues (scoresY, getScores (remote.search (queryY, null, 1000, sort).scoreDocs, remote)); assertSameValues (scoresA, getScores (remote.search (queryA, null, 1000, sort).scoreDocs, remote)); - sort.setSort ("int"); + sort.setSort (new SortField("int", SortField.INT)); assertSameValues (scoresX, getScores (remote.search (queryX, null, 1000, sort).scoreDocs, remote)); assertSameValues (scoresY, getScores (remote.search (queryY, null, 1000, sort).scoreDocs, remote)); assertSameValues (scoresA, getScores (remote.search (queryA, null, 1000, sort).scoreDocs, remote)); - sort.setSort ("float"); + sort.setSort (new SortField("float", SortField.FLOAT)); assertSameValues (scoresX, getScores (remote.search (queryX, null, 1000, sort).scoreDocs, remote)); assertSameValues (scoresY, getScores (remote.search (queryY, null, 1000, sort).scoreDocs, remote)); assertSameValues (scoresA, getScores (remote.search (queryA, null, 1000, sort).scoreDocs, remote)); - sort.setSort ("string"); + sort.setSort (new SortField("string", SortField.STRING)); assertSameValues (scoresX, getScores (remote.search (queryX, null, 1000, sort).scoreDocs, remote)); assertSameValues (scoresY, getScores (remote.search (queryY, null, 1000, sort).scoreDocs, remote)); assertSameValues (scoresA, getScores (remote.search (queryA, null, 1000, sort).scoreDocs, remote)); - sort.setSort (new String[] {"int","float"}); + sort.setSort (new SortField("int", SortField.INT), new SortField("float", SortField.FLOAT)); assertSameValues (scoresX, getScores (remote.search (queryX, null, 1000, sort).scoreDocs, remote)); assertSameValues (scoresY, getScores (remote.search (queryY, null, 1000, sort).scoreDocs, remote)); assertSameValues (scoresA, getScores (remote.search (queryA, null, 1000, sort).scoreDocs, remote)); - sort.setSort (new SortField[] { new SortField ("int", SortField.INT, true), new SortField (null, SortField.DOC, true) }); + sort.setSort (new SortField ("int", SortField.INT, true), new SortField (null, SortField.DOC, true) ); assertSameValues (scoresX, getScores (remote.search (queryX, null, 1000, sort).scoreDocs, remote)); assertSameValues (scoresY, getScores (remote.search (queryY, null, 1000, sort).scoreDocs, remote)); assertSameValues (scoresA, getScores (remote.search (queryA, null, 1000, sort).scoreDocs, remote)); - sort.setSort (new String[] {"float","string"}); + sort.setSort (new SortField("float", SortField.FLOAT), new SortField("string", SortField.STRING)); assertSameValues (scoresX, getScores (remote.search (queryX, null, 1000, sort).scoreDocs, remote)); assertSameValues (scoresY, getScores (remote.search (queryY, null, 1000, sort).scoreDocs, remote)); assertSameValues (scoresA, getScores (remote.search (queryA, null, 1000, sort).scoreDocs, remote)); @@ -324,52 +301,48 @@ public class TestRemoteSort extends LuceneTestCase implements Serializable { expected = isFull ? "IDHFGJABEC" : "IDHFGJAEBC"; assertMatches(multi, queryA, sort, expected); - sort.setSort(new SortField[] {new SortField ("int", SortField.INT), SortField.FIELD_DOC}); + sort.setSort(new SortField ("int", SortField.INT), SortField.FIELD_DOC); expected = isFull ? "IDHFGJABEC" : "IDHFGJAEBC"; assertMatches(multi, queryA, sort, expected); - sort.setSort("int"); - expected = isFull ? "IDHFGJABEC" : "IDHFGJAEBC"; - assertMatches(multi, queryA, sort, expected); - - sort.setSort(new SortField[] {new SortField ("float", SortField.FLOAT), SortField.FIELD_DOC}); + sort.setSort(new SortField ("float", SortField.FLOAT), SortField.FIELD_DOC); assertMatches(multi, queryA, sort, "GDHJCIEFAB"); - sort.setSort("float"); + sort.setSort(new SortField("float", SortField.FLOAT)); assertMatches(multi, queryA, sort, "GDHJCIEFAB"); - sort.setSort("string"); + sort.setSort(new SortField("string", SortField.STRING)); assertMatches(multi, queryA, sort, "DJAIHGFEBC"); - sort.setSort("int", true); + sort.setSort(new SortField ("int", SortField.INT, true)); expected = isFull ? "CABEJGFHDI" : "CAEBJGFHDI"; assertMatches(multi, queryA, sort, expected); - sort.setSort("float", true); + sort.setSort(new SortField ("float", SortField.FLOAT, true)); assertMatches(multi, queryA, sort, "BAFECIJHDG"); - sort.setSort("string", true); + sort.setSort(new SortField ("string", SortField.STRING, true)); assertMatches(multi, queryA, sort, "CBEFGHIAJD"); - sort.setSort(new String[] {"int","float"}); + sort.setSort(new SortField ("int", SortField.INT), new SortField ("float", SortField.FLOAT)); assertMatches(multi, queryA, sort, "IDHFGJEABC"); - sort.setSort(new String[] {"float","string"}); + sort.setSort(new SortField ("float", SortField.FLOAT), new SortField ("string", SortField.STRING)); assertMatches(multi, queryA, sort, "GDHJICEFAB"); - sort.setSort("int"); + sort.setSort(new SortField ("int", SortField.INT)); assertMatches(multi, queryF, sort, "IZJ"); - sort.setSort("int", true); + sort.setSort(new SortField ("int", SortField.INT, true)); assertMatches(multi, queryF, sort, "JZI"); - sort.setSort("float"); + sort.setSort(new SortField ("float", SortField.FLOAT)); assertMatches(multi, queryF, sort, "ZJI"); - sort.setSort("string"); + sort.setSort(new SortField ("string", SortField.STRING)); assertMatches(multi, queryF, sort, "ZJI"); - sort.setSort("string", true); + sort.setSort(new SortField ("string", SortField.STRING, true)); assertMatches(multi, queryF, sort, "IJZ"); // up to this point, all of the searches should have "sane" @@ -378,10 +351,10 @@ public class TestRemoteSort extends LuceneTestCase implements Serializable { // next we'll check an alternate Locale for string, so purge first FieldCache.DEFAULT.purgeAllCaches(); - sort.setSort(new SortField[] { new SortField ("string", Locale.US) }); + sort.setSort(new SortField ("string", Locale.US) ); assertMatches(multi, queryA, sort, "DJAIHGFEBC"); - sort.setSort(new SortField[] { new SortField ("string", Locale.US, true)}); + sort.setSort(new SortField ("string", Locale.US, true)); assertMatches(multi, queryA, sort, "CBEFGHIAJD"); assertSaneFieldCaches(getName() + " Locale.US"); diff --git a/src/java/org/apache/lucene/search/ExtendedFieldCache.java b/src/java/org/apache/lucene/search/ExtendedFieldCache.java deleted file mode 100644 index 0e870d95893..00000000000 --- a/src/java/org/apache/lucene/search/ExtendedFieldCache.java +++ /dev/null @@ -1,50 +0,0 @@ -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.index.IndexReader; - -import java.io.IOException; - -/** - * This interface is obsolete, use {@link FieldCache} instead. - * - * @deprecated Use {@link FieldCache}, this will be removed in Lucene 3.0 - **/ -public interface ExtendedFieldCache extends FieldCache { - - /** @deprecated Use {@link FieldCache#DEFAULT}; this will be removed in Lucene 3.0 */ - public static ExtendedFieldCache EXT_DEFAULT = (ExtendedFieldCache) FieldCache.DEFAULT; - - /** @deprecated Use {@link FieldCache.LongParser}, this will be removed in Lucene 3.0 */ - public interface LongParser extends FieldCache.LongParser { - } - - /** @deprecated Use {@link FieldCache.DoubleParser}, this will be removed in Lucene 3.0 */ - public interface DoubleParser extends FieldCache.DoubleParser { - } - - /** @deprecated Will be removed in 3.0, this is for binary compatibility only */ - public long[] getLongs(IndexReader reader, String field, ExtendedFieldCache.LongParser parser) - throws IOException; - - /** @deprecated Will be removed in 3.0, this is for binary compatibility only */ - public double[] getDoubles(IndexReader reader, String field, ExtendedFieldCache.DoubleParser parser) - throws IOException; - -} diff --git a/src/java/org/apache/lucene/search/FieldCache.java b/src/java/org/apache/lucene/search/FieldCache.java index 50b99179db9..6c942f58a07 100644 --- a/src/java/org/apache/lucene/search/FieldCache.java +++ b/src/java/org/apache/lucene/search/FieldCache.java @@ -483,39 +483,6 @@ public interface FieldCache { public StringIndex getStringIndex (IndexReader reader, String field) throws IOException; - /** Checks the internal cache for an appropriate entry, and if - * none is found reads field to see if it contains integers, longs, floats - * or strings, and then calls one of the other methods in this class to get the - * values. For string values, a StringIndex is returned. After - * calling this method, there is an entry in the cache for both - * type AUTO and the actual found type. - * @param reader Used to get field values. - * @param field Which field contains the values. - * @return int[], long[], float[] or StringIndex. - * @throws IOException If any error occurs. - * @deprecated Please specify the exact type, instead. - * Especially, guessing does not work with the new - * {@link NumericField} type. - */ - public Object getAuto (IndexReader reader, String field) - throws IOException; - - /** Checks the internal cache for an appropriate entry, and if none - * is found reads the terms out of field and calls the given SortComparator - * to get the sort values. A hit in the cache will happen if reader, - * field, and comparator are the same (using equals()) - * as a previous call to this method. - * @param reader Used to get field values. - * @param field Which field contains the values. - * @param comparator Used to convert terms into something to sort by. - * @return Array of sort objects, one for each document. - * @throws IOException If any error occurs. - * @deprecated Please implement {@link - * FieldComparatorSource} directly, instead. - */ - public Comparable[] getCustom (IndexReader reader, String field, SortComparator comparator) - throws IOException; - /** * EXPERT: A unique Identifier/Description for each item in the FieldCache. * Can be useful for logging/debugging. diff --git a/src/java/org/apache/lucene/search/FieldCacheImpl.java b/src/java/org/apache/lucene/search/FieldCacheImpl.java index 419d713a1c9..dc2d5203e39 100644 --- a/src/java/org/apache/lucene/search/FieldCacheImpl.java +++ b/src/java/org/apache/lucene/search/FieldCacheImpl.java @@ -43,8 +43,7 @@ import org.apache.lucene.util.FieldCacheSanityChecker; * * @since lucene 1.4 */ - // TODO: change interface to FieldCache in 3.0 when removed -class FieldCacheImpl implements ExtendedFieldCache { +class FieldCacheImpl implements FieldCache { private Map caches; FieldCacheImpl() { @@ -60,8 +59,6 @@ class FieldCacheImpl implements ExtendedFieldCache { caches.put(Double.TYPE, new DoubleCache(this)); caches.put(String.class, new StringCache(this)); caches.put(StringIndex.class, new StringIndexCache(this)); - caches.put(Comparable.class, new CustomCache(this)); - caches.put(Object.class, new AutoCache(this)); } public void purgeAllCaches() { @@ -524,12 +521,6 @@ class FieldCacheImpl implements ExtendedFieldCache { return (long[]) ((Cache)caches.get(Long.TYPE)).get(reader, new Entry(field, parser)); } - /** @deprecated Will be removed in 3.0, this is for binary compatibility only */ - public long[] getLongs(IndexReader reader, String field, ExtendedFieldCache.LongParser parser) - throws IOException { - return (long[]) ((Cache)caches.get(Long.TYPE)).get(reader, new Entry(field, parser)); - } - static final class LongCache extends Cache { LongCache(FieldCache wrapper) { super(wrapper); @@ -585,12 +576,6 @@ class FieldCacheImpl implements ExtendedFieldCache { return (double[]) ((Cache)caches.get(Double.TYPE)).get(reader, new Entry(field, parser)); } - /** @deprecated Will be removed in 3.0, this is for binary compatibility only */ - public double[] getDoubles(IndexReader reader, String field, ExtendedFieldCache.DoubleParser parser) - throws IOException { - return (double[]) ((Cache)caches.get(Double.TYPE)).get(reader, new Entry(field, parser)); - } - static final class DoubleCache extends Cache { DoubleCache(FieldCache wrapper) { super(wrapper); @@ -736,109 +721,6 @@ class FieldCacheImpl implements ExtendedFieldCache { } }; - /** The pattern used to detect integer values in a field */ - /** removed for java 1.3 compatibility - protected static final Pattern pIntegers = Pattern.compile ("[0-9\\-]+"); - **/ - - /** The pattern used to detect float values in a field */ - /** - * removed for java 1.3 compatibility - * protected static final Object pFloats = Pattern.compile ("[0-9+\\-\\.eEfFdD]+"); - */ - - // inherit javadocs - public Object getAuto(IndexReader reader, String field) throws IOException { - return ((Cache)caches.get(Object.class)).get(reader, new Entry(field, (Parser)null)); - } - - /** - * @deprecated Please specify the exact type, instead. - * Especially, guessing does not work with the new - * {@link NumericField} type. - */ - static final class AutoCache extends Cache { - AutoCache(FieldCache wrapper) { - super(wrapper); - } - - protected Object createValue(IndexReader reader, Entry entryKey) - throws IOException { - String field = StringHelper.intern((String) entryKey.field); - TermEnum enumerator = reader.terms (new Term (field)); - try { - Term term = enumerator.term(); - if (term == null) { - throw new RuntimeException ("no terms in field " + field + " - cannot determine type"); - } - Object ret = null; - if (term.field() == field) { - String termtext = term.text().trim(); - - try { - Integer.parseInt (termtext); - ret = wrapper.getInts (reader, field); - } catch (NumberFormatException nfe1) { - try { - Long.parseLong(termtext); - ret = wrapper.getLongs (reader, field); - } catch (NumberFormatException nfe2) { - try { - Float.parseFloat (termtext); - ret = wrapper.getFloats (reader, field); - } catch (NumberFormatException nfe3) { - ret = wrapper.getStringIndex (reader, field); - } - } - } - } else { - throw new RuntimeException ("field \"" + field + "\" does not appear to be indexed"); - } - return ret; - } finally { - enumerator.close(); - } - } - }; - - /** @deprecated */ - public Comparable[] getCustom(IndexReader reader, String field, - SortComparator comparator) throws IOException { - return (Comparable[]) ((Cache)caches.get(Comparable.class)).get(reader, new Entry(field, comparator)); - } - - /** @deprecated */ - static final class CustomCache extends Cache { - CustomCache(FieldCache wrapper) { - super(wrapper); - } - - protected Object createValue(IndexReader reader, Entry entryKey) - throws IOException { - Entry entry = (Entry) entryKey; - String field = entry.field; - SortComparator comparator = (SortComparator) entry.custom; - final Comparable[] retArray = new Comparable[reader.maxDoc()]; - TermDocs termDocs = reader.termDocs(); - TermEnum termEnum = reader.terms (new Term (field)); - try { - do { - Term term = termEnum.term(); - if (term==null || term.field() != field) break; - Comparable termval = comparator.getComparable (term.text()); - termDocs.seek (termEnum); - while (termDocs.next()) { - retArray[termDocs.doc()] = termval; - } - } while (termEnum.next()); - } finally { - termDocs.close(); - termEnum.close(); - } - return retArray; - } - }; - private volatile PrintStream infoStream; public void setInfoStream(PrintStream stream) { diff --git a/src/java/org/apache/lucene/search/FieldDocSortedHitQueue.java b/src/java/org/apache/lucene/search/FieldDocSortedHitQueue.java index d171af8861a..5a316c32690 100644 --- a/src/java/org/apache/lucene/search/FieldDocSortedHitQueue.java +++ b/src/java/org/apache/lucene/search/FieldDocSortedHitQueue.java @@ -33,8 +33,6 @@ import java.util.Locale; class FieldDocSortedHitQueue extends PriorityQueue { - // this cannot contain AUTO fields - any AUTO fields should - // have been resolved by the time this class is used. volatile SortField[] fields; // used in the case where the fields are sorted by locale @@ -63,10 +61,8 @@ extends PriorityQueue { * @param fields */ synchronized void setFields (SortField[] fields) { - if (this.fields == null) { - this.fields = fields; - this.collators = hasCollators (fields); - } + this.fields = fields; + this.collators = hasCollators (fields); } @@ -174,13 +170,6 @@ extends PriorityQueue { c = docA.fields[i].compareTo (docB.fields[i]); break; } - case SortField.AUTO:{ - // we cannot handle this - even if we determine the type of object (Float or - // Integer), we don't necessarily know how to compare them (both SCORE and - // FLOAT contain floats, but are sorted opposite of each other). Before - // we get here, each AUTO should have been replaced with its actual value. - throw new RuntimeException ("FieldDocSortedHitQueue cannot use an AUTO SortField"); - } default:{ throw new RuntimeException ("invalid SortField type: "+type); } diff --git a/src/java/org/apache/lucene/search/FieldSortedHitQueue.java b/src/java/org/apache/lucene/search/FieldSortedHitQueue.java deleted file mode 100644 index 49f336864c6..00000000000 --- a/src/java/org/apache/lucene/search/FieldSortedHitQueue.java +++ /dev/null @@ -1,501 +0,0 @@ -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.index.IndexReader; -import org.apache.lucene.util.PriorityQueue; - -import java.io.IOException; -import java.text.Collator; -import java.util.Locale; - -/** - * Expert: A hit queue for sorting by hits by terms in more than one field. - * Uses FieldCache.DEFAULT for maintaining internal term lookup tables. - * - *

Created: Dec 8, 2003 12:56:03 PM - * - * @since lucene 1.4 - * @see Searcher#search(Query,Filter,int,Sort) - * @see FieldCache - * @deprecated see {@link FieldValueHitQueue} - */ -public class FieldSortedHitQueue -extends PriorityQueue { - - /** - * Creates a hit queue sorted by the given list of fields. - * @param reader Index to use. - * @param fields Fieldable names, in priority order (highest priority first). Cannot be null or empty. - * @param size The number of hits to retain. Must be greater than zero. - * @throws IOException - */ - public FieldSortedHitQueue (IndexReader reader, SortField[] fields, int size) - throws IOException { - final int n = fields.length; - comparators = new ScoreDocComparator[n]; - this.fields = new SortField[n]; - for (int i=0; ia is less relevant than b. - * @param a ScoreDoc - * @param b ScoreDoc - * @return true if document a should be sorted after document b. - */ - protected boolean lessThan (final Object a, final Object b) { - final ScoreDoc docA = (ScoreDoc) a; - final ScoreDoc docB = (ScoreDoc) b; - - // run comparators - final int n = comparators.length; - int c = 0; - for (int i=0; i docB.doc; - return c > 0; - } - - - /** - * Given a FieldDoc object, stores the values used - * to sort the given document. These values are not the raw - * values out of the index, but the internal representation - * of them. This is so the given search hit can be collated - * by a MultiSearcher with other search hits. - * @param doc The FieldDoc to store sort values into. - * @return The same FieldDoc passed in. - * @see Searchable#search(Weight,Filter,int,Sort) - */ - FieldDoc fillFields (final FieldDoc doc) { - final int n = comparators.length; - final Comparable[] fields = new Comparable[n]; - for (int i=0; i 1.0f) doc.score /= maxscore; // normalize scores - return doc; - } - - - /** Returns the SortFields being used by this hit queue. */ - SortField[] getFields() { - return fields; - } - - static ScoreDocComparator getCachedComparator (IndexReader reader, String field, int type, FieldCache.Parser parser, Locale locale, SortComparatorSource factory) - throws IOException { - if (type == SortField.DOC) return ScoreDocComparator.INDEXORDER; - if (type == SortField.SCORE) return ScoreDocComparator.RELEVANCE; - FieldCacheImpl.Entry entry = (factory != null) - ? new FieldCacheImpl.Entry (field, factory) - : ( (parser != null) - ? new FieldCacheImpl.Entry (field, type, parser) - : new FieldCacheImpl.Entry (field, type, locale) - ); - return (ScoreDocComparator)Comparators.get(reader, entry); - } - - /** Internal cache of comparators. Similar to FieldCache, only - * caches comparators instead of term values. */ - static final FieldCacheImpl.Cache Comparators = new FieldCacheImpl.Cache() { - - protected Object createValue(IndexReader reader, FieldCacheImpl.Entry entryKey) - throws IOException { - FieldCacheImpl.Entry entry = (FieldCacheImpl.Entry) entryKey; - String fieldname = entry.field; - int type = entry.type; - Locale locale = entry.locale; - FieldCache.Parser parser = null; - SortComparatorSource factory = null; - if (entry.custom instanceof SortComparatorSource) { - factory = (SortComparatorSource) entry.custom; - } else { - parser = (FieldCache.Parser) entry.custom; - } - ScoreDocComparator comparator; - switch (type) { - case SortField.AUTO: - comparator = comparatorAuto (reader, fieldname); - break; - case SortField.INT: - comparator = comparatorInt (reader, fieldname, (FieldCache.IntParser)parser); - break; - case SortField.FLOAT: - comparator = comparatorFloat (reader, fieldname, (FieldCache.FloatParser)parser); - break; - case SortField.LONG: - comparator = comparatorLong(reader, fieldname, (FieldCache.LongParser)parser); - break; - case SortField.DOUBLE: - comparator = comparatorDouble(reader, fieldname, (FieldCache.DoubleParser)parser); - break; - case SortField.SHORT: - comparator = comparatorShort(reader, fieldname, (FieldCache.ShortParser)parser); - break; - case SortField.BYTE: - comparator = comparatorByte(reader, fieldname, (FieldCache.ByteParser)parser); - break; - case SortField.STRING: - if (locale != null) comparator = comparatorStringLocale (reader, fieldname, locale); - else comparator = comparatorString (reader, fieldname); - break; - case SortField.CUSTOM: - comparator = factory.newComparator (reader, fieldname); - break; - default: - throw new RuntimeException ("unknown field type: "+type); - } - return comparator; - } - }; - - /** - * Returns a comparator for sorting hits according to a field containing bytes. - * @param reader Index to use. - * @param fieldname Fieldable containing integer values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator comparatorByte(final IndexReader reader, final String fieldname, final FieldCache.ByteParser parser) - throws IOException { - final String field = fieldname.intern(); - final byte[] fieldOrder = FieldCache.DEFAULT.getBytes(reader, field, parser); - return new ScoreDocComparator() { - - public final int compare (final ScoreDoc i, final ScoreDoc j) { - final int fi = fieldOrder[i.doc]; - final int fj = fieldOrder[j.doc]; - if (fi < fj) return -1; - if (fi > fj) return 1; - return 0; - } - - public Comparable sortValue (final ScoreDoc i) { - return Byte.valueOf(fieldOrder[i.doc]); - } - - public int sortType() { - return SortField.BYTE; - } - }; - } - - /** - * Returns a comparator for sorting hits according to a field containing shorts. - * @param reader Index to use. - * @param fieldname Fieldable containing integer values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator comparatorShort(final IndexReader reader, final String fieldname, final FieldCache.ShortParser parser) - throws IOException { - final String field = fieldname.intern(); - final short[] fieldOrder = FieldCache.DEFAULT.getShorts(reader, field, parser); - return new ScoreDocComparator() { - - public final int compare (final ScoreDoc i, final ScoreDoc j) { - final int fi = fieldOrder[i.doc]; - final int fj = fieldOrder[j.doc]; - if (fi < fj) return -1; - if (fi > fj) return 1; - return 0; - } - - public Comparable sortValue (final ScoreDoc i) { - return Short.valueOf(fieldOrder[i.doc]); - } - - public int sortType() { - return SortField.SHORT; - } - }; - } - - /** - * Returns a comparator for sorting hits according to a field containing integers. - * @param reader Index to use. - * @param fieldname Fieldable containing integer values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator comparatorInt (final IndexReader reader, final String fieldname, final FieldCache.IntParser parser) - throws IOException { - final String field = fieldname.intern(); - final int[] fieldOrder = FieldCache.DEFAULT.getInts(reader, field, parser); - return new ScoreDocComparator() { - - public final int compare (final ScoreDoc i, final ScoreDoc j) { - final int fi = fieldOrder[i.doc]; - final int fj = fieldOrder[j.doc]; - if (fi < fj) return -1; - if (fi > fj) return 1; - return 0; - } - - public Comparable sortValue (final ScoreDoc i) { - return Integer.valueOf(fieldOrder[i.doc]); - } - - public int sortType() { - return SortField.INT; - } - }; - } - - /** - * Returns a comparator for sorting hits according to a field containing integers. - * @param reader Index to use. - * @param fieldname Fieldable containing integer values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator comparatorLong (final IndexReader reader, final String fieldname, final FieldCache.LongParser parser) - throws IOException { - final String field = fieldname.intern(); - final long[] fieldOrder = FieldCache.DEFAULT.getLongs (reader, field, parser); - return new ScoreDocComparator() { - - public final int compare (final ScoreDoc i, final ScoreDoc j) { - final long li = fieldOrder[i.doc]; - final long lj = fieldOrder[j.doc]; - if (li < lj) return -1; - if (li > lj) return 1; - return 0; - } - - public Comparable sortValue (final ScoreDoc i) { - return Long.valueOf(fieldOrder[i.doc]); - } - - public int sortType() { - return SortField.LONG; - } - }; - } - - - /** - * Returns a comparator for sorting hits according to a field containing floats. - * @param reader Index to use. - * @param fieldname Fieldable containing float values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator comparatorFloat (final IndexReader reader, final String fieldname, final FieldCache.FloatParser parser) - throws IOException { - final String field = fieldname.intern(); - final float[] fieldOrder = FieldCache.DEFAULT.getFloats (reader, field, parser); - return new ScoreDocComparator () { - - public final int compare (final ScoreDoc i, final ScoreDoc j) { - final float fi = fieldOrder[i.doc]; - final float fj = fieldOrder[j.doc]; - if (fi < fj) return -1; - if (fi > fj) return 1; - return 0; - } - - public Comparable sortValue (final ScoreDoc i) { - return Float.valueOf(fieldOrder[i.doc]); - } - - public int sortType() { - return SortField.FLOAT; - } - }; - } - - /** - * Returns a comparator for sorting hits according to a field containing doubles. - * @param reader Index to use. - * @param fieldname Fieldable containing float values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator comparatorDouble(final IndexReader reader, final String fieldname, final FieldCache.DoubleParser parser) - throws IOException { - final String field = fieldname.intern(); - final double[] fieldOrder = FieldCache.DEFAULT.getDoubles (reader, field, parser); - return new ScoreDocComparator () { - - public final int compare (final ScoreDoc i, final ScoreDoc j) { - final double di = fieldOrder[i.doc]; - final double dj = fieldOrder[j.doc]; - if (di < dj) return -1; - if (di > dj) return 1; - return 0; - } - - public Comparable sortValue (final ScoreDoc i) { - return Double.valueOf(fieldOrder[i.doc]); - } - - public int sortType() { - return SortField.DOUBLE; - } - }; - } - - /** - * Returns a comparator for sorting hits according to a field containing strings. - * @param reader Index to use. - * @param fieldname Fieldable containing string values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator comparatorString (final IndexReader reader, final String fieldname) - throws IOException { - final String field = fieldname.intern(); - final FieldCache.StringIndex index = FieldCache.DEFAULT.getStringIndex (reader, field); - return new ScoreDocComparator () { - - public final int compare (final ScoreDoc i, final ScoreDoc j) { - final int fi = index.order[i.doc]; - final int fj = index.order[j.doc]; - if (fi < fj) return -1; - if (fi > fj) return 1; - return 0; - } - - public Comparable sortValue (final ScoreDoc i) { - return index.lookup[index.order[i.doc]]; - } - - public int sortType() { - return SortField.STRING; - } - }; - } - - /** - * Returns a comparator for sorting hits according to a field containing strings. - * @param reader Index to use. - * @param fieldname Fieldable containing string values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator comparatorStringLocale (final IndexReader reader, final String fieldname, final Locale locale) - throws IOException { - final Collator collator = Collator.getInstance (locale); - final String field = fieldname.intern(); - final String[] index = FieldCache.DEFAULT.getStrings (reader, field); - return new ScoreDocComparator() { - - public final int compare(final ScoreDoc i, final ScoreDoc j) { - String is = index[i.doc]; - String js = index[j.doc]; - if (is == js) { - return 0; - } else if (is == null) { - return -1; - } else if (js == null) { - return 1; - } else { - return collator.compare(is, js); - } - } - - public Comparable sortValue (final ScoreDoc i) { - return index[i.doc]; - } - - public int sortType() { - return SortField.STRING; - } - }; - } - - /** - * Returns a comparator for sorting hits according to values in the given field. - * The terms in the field are looked at to determine whether they contain integers, - * floats or strings. Once the type is determined, one of the other static methods - * in this class is called to get the comparator. - * @param reader Index to use. - * @param fieldname Fieldable containing values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator comparatorAuto (final IndexReader reader, final String fieldname) - throws IOException { - final String field = fieldname.intern(); - Object lookupArray = FieldCache.DEFAULT.getAuto (reader, field); - if (lookupArray instanceof FieldCache.StringIndex) { - return comparatorString (reader, field); - } else if (lookupArray instanceof int[]) { - return comparatorInt (reader, field, null); - } else if (lookupArray instanceof long[]) { - return comparatorLong (reader, field, null); - } else if (lookupArray instanceof float[]) { - return comparatorFloat (reader, field, null); - } else if (lookupArray instanceof String[]) { - return comparatorString (reader, field); - } else { - throw new RuntimeException ("unknown data type in field '"+field+"'"); - } - } -} diff --git a/src/java/org/apache/lucene/search/FieldValueHitQueue.java b/src/java/org/apache/lucene/search/FieldValueHitQueue.java index f0d0de84c23..446c5c34f5b 100644 --- a/src/java/org/apache/lucene/search/FieldValueHitQueue.java +++ b/src/java/org/apache/lucene/search/FieldValueHitQueue.java @@ -26,11 +26,6 @@ import org.apache.lucene.util.PriorityQueue; * Uses FieldCache.DEFAULT for maintaining * internal term lookup tables. * - * This class will not resolve SortField.AUTO types, and expects the type - * of all SortFields used for construction to already have been resolved. - * {@link SortField#detectFieldType(IndexReader, String)} is a utility method which - * may be used for field type detection. - * * NOTE: This API is experimental and might change in * incompatible ways in the next release. * @@ -74,8 +69,6 @@ public abstract class FieldValueHitQueue extends PriorityQueue { } SortField field = fields[0]; - // AUTO is resolved before we are called - assert field.getType() != SortField.AUTO; comparator = field.getComparator(size, 0); oneReverseMul = field.reverse ? -1 : 1; @@ -123,9 +116,6 @@ public abstract class FieldValueHitQueue extends PriorityQueue { for (int i = 0; i < numComparators; ++i) { SortField field = fields[i]; - // AUTO is resolved before we are called - assert field.getType() != SortField.AUTO; - reverseMul[i] = field.reverse ? -1 : 1; comparators[i] = field.getComparator(size, i); } diff --git a/src/java/org/apache/lucene/search/IndexSearcher.java b/src/java/org/apache/lucene/search/IndexSearcher.java index 3d0428e8d40..435b747e37e 100644 --- a/src/java/org/apache/lucene/search/IndexSearcher.java +++ b/src/java/org/apache/lucene/search/IndexSearcher.java @@ -173,40 +173,10 @@ public class IndexSearcher extends Searcher { throws IOException { SortField[] fields = sort.fields; - boolean legacy = false; for(int i = 0; i < fields.length; i++) { SortField field = fields[i]; String fieldname = field.getField(); int type = field.getType(); - // Resolve AUTO into its true type - if (type == SortField.AUTO) { - int autotype = SortField.detectFieldType(reader, fieldname); - if (autotype == SortField.STRING) { - fields[i] = new SortField (fieldname, field.getLocale(), field.getReverse()); - } else { - fields[i] = new SortField (fieldname, autotype, field.getReverse()); - } - } - - if (field.getUseLegacySearch()) { - legacy = true; - } - } - - if (legacy) { - // Search the single top-level reader - TopDocCollector collector = new TopFieldDocCollector(reader, sort, nDocs); - HitCollectorWrapper hcw = new HitCollectorWrapper(collector); - hcw.setNextReader(reader, 0); - if (filter == null) { - Scorer scorer = weight.scorer(reader, true, true); - if (scorer != null) { - scorer.score(hcw); - } - } else { - searchWithFilter(reader, weight, filter, hcw); - } - return (TopFieldDocs) collector.topDocs(); } TopFieldCollector collector = TopFieldCollector.create(sort, nDocs, diff --git a/src/java/org/apache/lucene/search/ParallelMultiSearcher.java b/src/java/org/apache/lucene/search/ParallelMultiSearcher.java index 41f4ec0b36c..8129a0dc9e2 100644 --- a/src/java/org/apache/lucene/search/ParallelMultiSearcher.java +++ b/src/java/org/apache/lucene/search/ParallelMultiSearcher.java @@ -240,9 +240,6 @@ class MultiSearcherThread extends Thread { this.ioe = ioe; } if (ioe == null) { - // if we are sorting by fields, we need to tell the field sorted hit queue - // the actual type of fields, in case the original list contained AUTO. - // if the searchable returns null for fields, we'll have problems. if (sort != null) { TopFieldDocs docsFields = (TopFieldDocs) docs; // If one of the Sort fields is FIELD_DOC, need to fix its values, so that diff --git a/src/java/org/apache/lucene/search/QueryFilter.java b/src/java/org/apache/lucene/search/QueryFilter.java deleted file mode 100644 index 41cc43aa2f7..00000000000 --- a/src/java/org/apache/lucene/search/QueryFilter.java +++ /dev/null @@ -1,43 +0,0 @@ -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. - */ - - -/** Constrains search results to only match those which also match a provided - * query. Results are cached, so that searches after the first on the same - * index using this filter are much faster. - * - * @deprecated use a CachingWrapperFilter with QueryWrapperFilter - */ -public class QueryFilter extends CachingWrapperFilter { - - /** Constructs a filter which only matches documents matching - * query. - */ - public QueryFilter(Query query) { - super(new QueryWrapperFilter(query)); - } - - public boolean equals(Object o) { - return super.equals((QueryFilter)o); - } - - public int hashCode() { - return super.hashCode() ^ 0x923F64B9; - } -} diff --git a/src/java/org/apache/lucene/search/ScoreDocComparator.java b/src/java/org/apache/lucene/search/ScoreDocComparator.java deleted file mode 100644 index 14839c5f12f..00000000000 --- a/src/java/org/apache/lucene/search/ScoreDocComparator.java +++ /dev/null @@ -1,96 +0,0 @@ -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. - */ - - -/** - * Expert: Compares two ScoreDoc objects for sorting. - * - *

Created: Feb 3, 2004 9:00:16 AM - * - * @since lucene 1.4 - * @deprecated use {@link FieldComparator} - */ -public interface ScoreDocComparator { - - /** Special comparator for sorting hits according to computed relevance (document score). */ - static final ScoreDocComparator RELEVANCE = new ScoreDocComparator() { - public int compare (ScoreDoc i, ScoreDoc j) { - if (i.score > j.score) return -1; - if (i.score < j.score) return 1; - return 0; - } - public Comparable sortValue (ScoreDoc i) { - return Float.valueOf(i.score); - } - public int sortType() { - return SortField.SCORE; - } - }; - - /** Special comparator for sorting hits according to index order (document number). */ - static final ScoreDocComparator INDEXORDER = new ScoreDocComparator() { - public int compare (ScoreDoc i, ScoreDoc j) { - if (i.doc < j.doc) return -1; - if (i.doc > j.doc) return 1; - return 0; - } - public Comparable sortValue (ScoreDoc i) { - return Integer.valueOf(i.doc); - } - public int sortType() { - return SortField.DOC; - } - }; - - /** - * Compares two ScoreDoc objects and returns a result indicating their - * sort order. - * @param i First ScoreDoc - * @param j Second ScoreDoc - * @return a negative integer if i should come before j
- * a positive integer if i should come after j
- * 0 if they are equal - * @see java.util.Comparator - */ - int compare (ScoreDoc i, ScoreDoc j); - - /** - * Returns the value used to sort the given document. The - * object returned must implement the java.io.Serializable - * interface. This is used by multisearchers to determine how - * to collate results from their searchers. - * @see FieldDoc - * @param i Document - * @return Serializable object - */ - Comparable sortValue (ScoreDoc i); - - /** - * Returns the type of sort. Should return SortField.SCORE, - * SortField.DOC, SortField.STRING, - * SortField.INTEGER, SortField.FLOAT or - * SortField.CUSTOM. It is not valid to return - * SortField.AUTO. - * This is used by multisearchers to determine how to collate results - * from their searchers. - * @return One of the constants in SortField. - * @see SortField - */ - int sortType(); -} diff --git a/src/java/org/apache/lucene/search/Sort.java b/src/java/org/apache/lucene/search/Sort.java index a2bfe393de5..d940cd3f892 100644 --- a/src/java/org/apache/lucene/search/Sort.java +++ b/src/java/org/apache/lucene/search/Sort.java @@ -123,99 +123,23 @@ implements Serializable { this(SortField.FIELD_SCORE); } - /** - * Sorts by the terms in field then by index order (document - * number). The type of value in field is determined - * automatically. - * - * @see SortField#AUTO - * @deprecated Please specify the type explicitly by - * first creating a {@link SortField} and then use {@link - * #Sort(SortField)} - */ - public Sort(String field) { - setSort(field, false); - } - - /** - * Sorts possibly in reverse by the terms in field then by - * index order (document number). The type of value in field is - * determined automatically. - * - * @see SortField#AUTO - * @deprecated Please specify the type explicitly by - * first creating a {@link SortField} and then use {@link - * #Sort(SortField)} - */ - public Sort(String field, boolean reverse) { - setSort(field, reverse); - } - - /** - * Sorts in succession by the terms in each field. The type of value in - * field is determined automatically. - * - * @see SortField#AUTO - * @deprecated Please specify the type explicitly by - * first creating {@link SortField}s and then use {@link - * #Sort(SortField[])} - */ - public Sort(String[] fields) { - setSort(fields); - } - /** Sorts by the criteria in the given SortField. */ public Sort(SortField field) { setSort(field); } /** Sorts in succession by the criteria in each SortField. */ - public Sort(SortField[] fields) { + public Sort(SortField... fields) { setSort(fields); } - /** - * Sets the sort to the terms in field then by index order - * (document number). - * @deprecated Please specify the type explicitly by - * first creating a {@link SortField} and then use {@link - * #setSort(SortField)} - */ - public final void setSort(String field) { - setSort(field, false); - } - - /** - * Sets the sort to the terms in field possibly in reverse, - * then by index order (document number). - * @deprecated Please specify the type explicitly by - * first creating a {@link SortField} and then use {@link - * #setSort(SortField)} - */ - public void setSort(String field, boolean reverse) { - fields = new SortField[] { new SortField(field, SortField.AUTO, reverse) }; - } - - /** Sets the sort to the terms in each field in succession. - * @deprecated Please specify the type explicitly by - * first creating {@link SortField}s and then use {@link - * #setSort(SortField[])} */ - public void setSort(String[] fieldnames) { - final int n = fieldnames.length; - SortField[] nfields = new SortField[n]; - for (int i = 0; i < n; ++i) { - nfields[i] = new SortField(fieldnames[i], SortField.AUTO); - } - fields = nfields; - } - /** Sets the sort to the given criteria. */ public void setSort(SortField field) { this.fields = new SortField[] { field }; } /** Sets the sort to the given criteria in succession. */ - public void setSort(SortField[] fields) { + public void setSort(SortField... fields) { this.fields = fields; } diff --git a/src/java/org/apache/lucene/search/SortComparator.java b/src/java/org/apache/lucene/search/SortComparator.java deleted file mode 100644 index a5f0f29f8b1..00000000000 --- a/src/java/org/apache/lucene/search/SortComparator.java +++ /dev/null @@ -1,90 +0,0 @@ -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.index.IndexReader; - -import java.io.IOException; - -/** - * Abstract base class for sorting hits returned by a Query. - * - *

- * This class should only be used if the other SortField types (SCORE, DOC, - * STRING, INT, FLOAT) do not provide an adequate sorting. It maintains an - * internal cache of values which could be quite large. The cache is an array of - * Comparable, one for each document in the index. There is a distinct - * Comparable for each unique term in the field - if some documents have the - * same term in the field, the cache array will have entries which reference the - * same Comparable. - * - * This class will be used as part of a key to a FieldCache value. You must - * implement hashCode and equals to avoid an explosion in RAM usage if you use - * instances that are not the same instance. If you are searching using the - * Remote contrib, the same instance of this class on the client will be a new - * instance on every call to the server, so hashCode/equals is very important in - * that situation. - * - *

- * Created: Apr 21, 2004 5:08:38 PM - * - * - * @since 1.4 - * @deprecated Please use {@link FieldComparatorSource} instead. - */ -public abstract class SortComparator -implements SortComparatorSource { - - // inherit javadocs - public ScoreDocComparator newComparator (final IndexReader reader, final String fieldname) - throws IOException { - final String field = fieldname.intern(); - final Comparable[] cachedValues = FieldCache.DEFAULT.getCustom (reader, field, SortComparator.this); - - return new ScoreDocComparator() { - - public int compare (ScoreDoc i, ScoreDoc j) { - return cachedValues[i.doc].compareTo (cachedValues[j.doc]); - } - - public Comparable sortValue (ScoreDoc i) { - return cachedValues[i.doc]; - } - - public int sortType(){ - return SortField.CUSTOM; - } - }; - } - - /** - * Returns an object which, when sorted according to natural order, - * will order the Term values in the correct order. - *

For example, if the Terms contained integer values, this method - * would return Integer.valueOf(termtext). Note that this - * might not always be the most efficient implementation - for this - * particular example, a better implementation might be to make a - * ScoreDocLookupComparator that uses an internal lookup table of int. - * @param termtext The textual value of the term. - * @return An object representing termtext that sorts according to the natural order of termtext. - * @see Comparable - * @see ScoreDocComparator - */ - protected abstract Comparable getComparable (String termtext); - -} diff --git a/src/java/org/apache/lucene/search/SortComparatorSource.java b/src/java/org/apache/lucene/search/SortComparatorSource.java deleted file mode 100644 index 075ff53ddf4..00000000000 --- a/src/java/org/apache/lucene/search/SortComparatorSource.java +++ /dev/null @@ -1,52 +0,0 @@ -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.index.IndexReader; -import java.io.IOException; -import java.io.Serializable; - -/** - * Expert: returns a comparator for sorting ScoreDocs. - * - *

- * Created: Apr 21, 2004 3:49:28 PM - * - * This class will be used as part of a key to a FieldCache value. You must - * implement hashCode and equals to avoid an explosion in RAM usage if you use - * instances that are not the same instance. If you are searching using the - * Remote contrib, the same instance of this class on the client will be a new - * instance on every call to the server, so hashCode/equals is very important in - * that situation. - * - * @since 1.4 - * @deprecated Please use {@link FieldComparatorSource} instead. - */ -public interface SortComparatorSource -extends Serializable { - - /** - * Creates a comparator for the field in the given index. - * @param reader Index to create comparator for. - * @param fieldname Name of the field to create comparator for. - * @return Comparator of ScoreDoc objects. - * @throws IOException If an error occurs reading the index. - */ - ScoreDocComparator newComparator (IndexReader reader, String fieldname) - throws IOException; -} diff --git a/src/java/org/apache/lucene/search/SortField.java b/src/java/org/apache/lucene/search/SortField.java index 7e7de0673bb..3a29d79a78b 100644 --- a/src/java/org/apache/lucene/search/SortField.java +++ b/src/java/org/apache/lucene/search/SortField.java @@ -47,15 +47,7 @@ implements Serializable { * values are at the front. */ public static final int DOC = 1; - /** Guess type of sort based on field contents. A regular expression is used - * to look at the first term indexed for the field and determine if it - * represents an integer number, a floating point number, or just arbitrary - * string characters. - * @deprecated Please specify the exact type, instead. - * Especially, guessing does not work with the new - * {@link NumericField} type. - */ - public static final int AUTO = 2; + // reserved, in Lucene 2.9, there was a constant: AUTO = 2; /** Sort using term values as Strings. Sort values are String and lower * values are at the front. */ @@ -106,10 +98,9 @@ implements Serializable { public static final SortField FIELD_DOC = new SortField (null, DOC); private String field; - private int type = AUTO; // defaults to determining type dynamically + private int type; // defaults to determining type dynamically private Locale locale; // defaults to "natural order" (no Locale) boolean reverse = false; // defaults to natural order - private SortComparatorSource factory; private FieldCache.Parser parser; // Used for CUSTOM sort @@ -117,27 +108,6 @@ implements Serializable { private boolean useLegacy = false; // remove in Lucene 3.0 - /** Creates a sort by terms in the given field where the type of term value - * is determined dynamically ({@link #AUTO AUTO}). - * @param field Name of field to sort by, cannot be - * null. - * @deprecated Please specify the exact type instead. - */ - public SortField (String field) { - initFieldType(field, AUTO); - } - - /** Creates a sort, possibly in reverse, by terms in the given field where - * the type of term value is determined dynamically ({@link #AUTO AUTO}). - * @param field Name of field to sort by, cannot be null. - * @param reverse True if natural order should be reversed. - * @deprecated Please specify the exact type instead. - */ - public SortField (String field, boolean reverse) { - initFieldType(field, AUTO); - this.reverse = reverse; - } - /** Creates a sort by terms in the given field with the type of term * values explicitly given. * @param field Name of field to sort by. Can be null if @@ -220,17 +190,6 @@ implements Serializable { this.reverse = reverse; } - /** Creates a sort with a custom comparison function. - * @param field Name of field to sort by; cannot be null. - * @param comparator Returns a comparator for sorting hits. - * @deprecated use SortField (String field, FieldComparatorSource comparator) - */ - public SortField (String field, SortComparatorSource comparator) { - initFieldType(field, CUSTOM); - setUseLegacySearch(true); - this.factory = comparator; - } - /** Creates a sort with a custom comparison function. * @param field Name of field to sort by; cannot be null. * @param comparator Returns a comparator for sorting hits. @@ -240,19 +199,6 @@ implements Serializable { this.comparatorSource = comparator; } - /** Creates a sort, possibly in reverse, with a custom comparison function. - * @param field Name of field to sort by; cannot be null. - * @param comparator Returns a comparator for sorting hits. - * @param reverse True if natural order should be reversed. - * @deprecated use SortField (String field, FieldComparatorSource comparator, boolean reverse) - */ - public SortField (String field, SortComparatorSource comparator, boolean reverse) { - initFieldType(field, CUSTOM); - setUseLegacySearch(true); - this.reverse = reverse; - this.factory = comparator; - } - /** Creates a sort, possibly in reverse, with a custom comparison function. * @param field Name of field to sort by; cannot be null. * @param comparator Returns a comparator for sorting hits. @@ -285,7 +231,7 @@ implements Serializable { } /** Returns the type of contents in the field. - * @return One of the constants SCORE, DOC, AUTO, STRING, INT or FLOAT. + * @return One of the constants SCORE, DOC, STRING, INT or FLOAT. */ public int getType() { return type; @@ -314,37 +260,6 @@ implements Serializable { return reverse; } - /** - * @deprecated use {@link #getComparatorSource()} - */ - public SortComparatorSource getFactory() { - return factory; - } - - public FieldComparatorSource getComparatorSource() { - return comparatorSource; - } - - /** - * Use legacy IndexSearch implementation: search with a DirectoryReader rather - * than passing a single hit collector to multiple SegmentReaders. - * - * @param legacy true for legacy behavior - * @deprecated will be removed in Lucene 3.0. - */ - public void setUseLegacySearch(boolean legacy) { - this.useLegacy = legacy; - } - - /** - * @return if true, IndexSearch will use legacy sorting search implementation. - * eg. multiple Priority Queues. - * @deprecated will be removed in Lucene 3.0. - */ - public boolean getUseLegacySearch() { - return this.useLegacy; - } - public String toString() { StringBuilder buffer = new StringBuilder(); switch (type) { @@ -356,10 +271,6 @@ implements Serializable { buffer.append(""); break; - case AUTO: - buffer.append(""); - break; - case STRING: buffer.append(""); break; @@ -393,7 +304,7 @@ implements Serializable { break; case CUSTOM: - buffer.append("'); + buffer.append("'); break; default: @@ -409,7 +320,7 @@ implements Serializable { } /** Returns true if o is equal to this. If a - * {@link SortComparatorSource} (deprecated) or {@link + * {@link FieldComparatorSource} or {@link * FieldCache.Parser} was provided, it must properly * implement equals (unless a singleton is always used). */ public boolean equals(Object o) { @@ -421,14 +332,13 @@ implements Serializable { && other.type == this.type && other.reverse == this.reverse && (other.locale == null ? this.locale == null : other.locale.equals(this.locale)) - && (other.factory == null ? this.factory == null : other.factory.equals(this.factory)) && (other.comparatorSource == null ? this.comparatorSource == null : other.comparatorSource.equals(this.comparatorSource)) && (other.parser == null ? this.parser == null : other.parser.equals(this.parser)) ); } /** Returns true if o is equal to this. If a - * {@link SortComparatorSource} (deprecated) or {@link + * {@link FieldComparatorSource} or {@link * FieldCache.Parser} was provided, it must properly * implement hashCode (unless a singleton is always * used). */ @@ -436,7 +346,6 @@ implements Serializable { int hash=type^0x346565dd + Boolean.valueOf(reverse).hashCode()^0xaf5998bb; if (field != null) hash += field.hashCode()^0xff5685dd; if (locale != null) hash += locale.hashCode()^0x08150815; - if (factory != null) hash += factory.hashCode()^0x34987555; if (comparatorSource != null) hash += comparatorSource.hashCode(); if (parser != null) hash += parser.hashCode()^0x3aaf56ff; return hash; @@ -491,7 +400,7 @@ implements Serializable { return new FieldComparator.ShortComparator(numHits, field, parser); case SortField.CUSTOM: - assert factory == null && comparatorSource != null; + assert comparatorSource != null; return comparatorSource.newComparator(field, numHits, sortPos, reverse); case SortField.STRING: @@ -504,45 +413,4 @@ implements Serializable { throw new IllegalStateException("Illegal sort type: " + type); } } - - /** - * Attempts to detect the given field type for an IndexReader. - * @deprecated - */ - static int detectFieldType(IndexReader reader, String fieldKey) throws IOException { - String field = StringHelper.intern(fieldKey); - TermEnum enumerator = reader.terms(new Term(field)); - try { - Term term = enumerator.term(); - if (term == null) { - throw new RuntimeException("no terms in field " + field + " - cannot determine sort type"); - } - int ret = 0; - if (term.field() == field) { - String termtext = term.text().trim(); - - try { - Integer.parseInt (termtext); - ret = SortField.INT; - } catch (NumberFormatException nfe1) { - try { - Long.parseLong(termtext); - ret = SortField.LONG; - } catch (NumberFormatException nfe2) { - try { - Float.parseFloat (termtext); - ret = SortField.FLOAT; - } catch (NumberFormatException nfe3) { - ret = SortField.STRING; - } - } - } - } else { - throw new RuntimeException("field \"" + field + "\" does not appear to be indexed"); - } - return ret; - } finally { - enumerator.close(); - } - } } diff --git a/src/java/org/apache/lucene/search/TopDocCollector.java b/src/java/org/apache/lucene/search/TopDocCollector.java deleted file mode 100644 index d5b9ca86270..00000000000 --- a/src/java/org/apache/lucene/search/TopDocCollector.java +++ /dev/null @@ -1,98 +0,0 @@ -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.util.PriorityQueue; - -/** A {@link HitCollector} implementation that collects the top-scoring - * documents, returning them as a {@link TopDocs}. This is used by {@link - * IndexSearcher} to implement {@link TopDocs}-based search. - * - *

This may be extended, overriding the collect method to, e.g., - * conditionally invoke super() in order to filter which - * documents are collected. - * - * @deprecated Please use {@link TopScoreDocCollector} - * instead, which has better performance. - **/ -public class TopDocCollector extends HitCollector { - - private ScoreDoc reusableSD; - - /** The total number of hits the collector encountered. */ - protected int totalHits; - - /** The priority queue which holds the top-scoring documents. */ - protected PriorityQueue hq; - - /** Construct to collect a given number of hits. - * @param numHits the maximum number of hits to collect - */ - public TopDocCollector(int numHits) { - this(new HitQueue(numHits, false)); - } - - /** @deprecated use TopDocCollector(hq) instead. numHits is not used by this - * constructor. It will be removed in a future release. - */ - TopDocCollector(int numHits, PriorityQueue hq) { - this.hq = hq; - } - - /** Constructor to collect the top-scoring documents by using the given PQ. - * @param hq the PQ to use by this instance. - */ - protected TopDocCollector(PriorityQueue hq) { - this.hq = hq; - } - - // javadoc inherited - public void collect(int doc, float score) { - if (score > 0.0f) { - totalHits++; - if (reusableSD == null) { - reusableSD = new ScoreDoc(doc, score); - } else if (score >= reusableSD.score) { - // reusableSD holds the last "rejected" entry, so, if - // this new score is not better than that, there's no - // need to try inserting it - reusableSD.doc = doc; - reusableSD.score = score; - } else { - return; - } - reusableSD = (ScoreDoc) hq.insertWithOverflow(reusableSD); - } - } - - /** The total number of documents that matched this query. */ - public int getTotalHits() { return totalHits; } - - /** The top-scoring hits. */ - public TopDocs topDocs() { - ScoreDoc[] scoreDocs = new ScoreDoc[hq.size()]; - for (int i = hq.size()-1; i >= 0; i--) // put docs in array - scoreDocs[i] = (ScoreDoc)hq.pop(); - - float maxScore = (totalHits==0) - ? Float.NEGATIVE_INFINITY - : scoreDocs[0].score; - - return new TopDocs(totalHits, scoreDocs, maxScore); - } -} diff --git a/src/java/org/apache/lucene/search/TopFieldDocCollector.java b/src/java/org/apache/lucene/search/TopFieldDocCollector.java deleted file mode 100644 index a689ab3c421..00000000000 --- a/src/java/org/apache/lucene/search/TopFieldDocCollector.java +++ /dev/null @@ -1,77 +0,0 @@ -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 java.io.IOException; - -import org.apache.lucene.index.IndexReader; - -/** A {@link HitCollector} implementation that collects the top-sorting - * documents, returning them as a {@link TopFieldDocs}. This is used by {@link - * IndexSearcher} to implement {@link TopFieldDocs}-based search. - * - *

This may be extended, overriding the collect method to, e.g., - * conditionally invoke super() in order to filter which - * documents are collected. - * - * @deprecated Please use {@link TopFieldCollector} instead. - */ -public class TopFieldDocCollector extends TopDocCollector { - - private FieldDoc reusableFD; - - /** Construct to collect a given number of hits. - * @param reader the index to be searched - * @param sort the sort criteria - * @param numHits the maximum number of hits to collect - */ - public TopFieldDocCollector(IndexReader reader, Sort sort, int numHits) - throws IOException { - super(new FieldSortedHitQueue(reader, sort.fields, numHits)); - } - - // javadoc inherited - public void collect(int doc, float score) { - if (score > 0.0f) { - totalHits++; - if (reusableFD == null) - reusableFD = new FieldDoc(doc, score); - else { - // Whereas TopScoreDocCollector can skip this if the - // score is not competitive, we cannot because the - // comparators in the FieldSortedHitQueue.lessThan - // aren't in general congruent with "higher score - // wins" - reusableFD.score = score; - reusableFD.doc = doc; - } - reusableFD = (FieldDoc) hq.insertWithOverflow(reusableFD); - } - } - - // javadoc inherited - public TopDocs topDocs() { - FieldSortedHitQueue fshq = (FieldSortedHitQueue)hq; - ScoreDoc[] scoreDocs = new ScoreDoc[fshq.size()]; - for (int i = fshq.size()-1; i >= 0; i--) // put docs in array - scoreDocs[i] = fshq.fillFields ((FieldDoc) fshq.pop()); - - return new TopFieldDocs(totalHits, scoreDocs, - fshq.getFields(), fshq.getMaxScore()); - } -} diff --git a/src/test/org/apache/lucene/search/TestCustomSearcherSort.java b/src/test/org/apache/lucene/search/TestCustomSearcherSort.java index 92df8062ea3..56acd5be5a6 100644 --- a/src/test/org/apache/lucene/search/TestCustomSearcherSort.java +++ b/src/test/org/apache/lucene/search/TestCustomSearcherSort.java @@ -104,10 +104,10 @@ implements Serializable { public void testFieldSortCustomSearcher() throws Exception { // log("Run testFieldSortCustomSearcher"); // define the sort criteria - Sort custSort = new Sort(new SortField[] { - new SortField("publicationDate_"), + Sort custSort = new Sort( + new SortField("publicationDate_", SortField.STRING), SortField.FIELD_SCORE - }); + ); Searcher searcher = new CustomSearcher (index, 2); // search and check hits matchHits(searcher, custSort); @@ -118,10 +118,10 @@ implements Serializable { public void testFieldSortSingleSearcher() throws Exception { // log("Run testFieldSortSingleSearcher"); // define the sort criteria - Sort custSort = new Sort(new SortField[] { - new SortField("publicationDate_"), + Sort custSort = new Sort( + new SortField("publicationDate_", SortField.STRING), SortField.FIELD_SCORE - }); + ); Searcher searcher = new MultiSearcher(new Searcher[] { new CustomSearcher( index, 2) }); // search and check hits @@ -133,10 +133,10 @@ implements Serializable { public void testFieldSortMultiCustomSearcher() throws Exception { // log("Run testFieldSortMultiCustomSearcher"); // define the sort criteria - Sort custSort = new Sort(new SortField[] { - new SortField("publicationDate_"), + Sort custSort = new Sort( + new SortField("publicationDate_", SortField.STRING), SortField.FIELD_SCORE - }); + ); Searcher searcher = new MultiSearcher(new Searchable[] { new CustomSearcher (index, 0), diff --git a/src/test/org/apache/lucene/search/TestDateSort.java b/src/test/org/apache/lucene/search/TestDateSort.java index 8358b16b3ef..2475fe46f7f 100644 --- a/src/test/org/apache/lucene/search/TestDateSort.java +++ b/src/test/org/apache/lucene/search/TestDateSort.java @@ -72,9 +72,7 @@ public class TestDateSort extends LuceneTestCase { public void testReverseDateSort() throws Exception { IndexSearcher searcher = new IndexSearcher(directory, true); - // Create a Sort object. reverse is set to true. - // problem occurs only with SortField.AUTO: - Sort sort = new Sort(new SortField(DATE_TIME_FIELD, SortField.AUTO, true)); + Sort sort = new Sort(new SortField(DATE_TIME_FIELD, SortField.STRING, true)); QueryParser queryParser = new QueryParser(TEXT_FIELD, new WhitespaceAnalyzer()); Query query = queryParser.parse("Document"); diff --git a/src/test/org/apache/lucene/search/TestElevationComparator.java b/src/test/org/apache/lucene/search/TestElevationComparator.java index 1678f1dbb07..eb1b5494ff9 100644 --- a/src/test/org/apache/lucene/search/TestElevationComparator.java +++ b/src/test/org/apache/lucene/search/TestElevationComparator.java @@ -66,10 +66,10 @@ public class TestElevationComparator extends LuceneTestCase { newq.add(query, BooleanClause.Occur.SHOULD); newq.add(getElevatedQuery(new String[] {"id", "a", "id", "x"}), BooleanClause.Occur.SHOULD); - Sort sort = new Sort(new SortField[]{ + Sort sort = new Sort( new SortField("id", new ElevationComparatorSource(priority), false), new SortField(null, SortField.SCORE, reversed) - }); + ); TopDocsCollector topCollector = TopFieldCollector.create(sort, 50, false, true, true, true); searcher.search(newq, null, topCollector); diff --git a/src/test/org/apache/lucene/search/TestFilteredQuery.java b/src/test/org/apache/lucene/search/TestFilteredQuery.java index 52560f339f4..09e1b653d72 100644 --- a/src/test/org/apache/lucene/search/TestFilteredQuery.java +++ b/src/test/org/apache/lucene/search/TestFilteredQuery.java @@ -105,7 +105,7 @@ public class TestFilteredQuery extends LuceneTestCase { assertEquals (1, hits[0].doc); QueryUtils.check(filteredquery,searcher); - hits = searcher.search (filteredquery, null, 1000, new Sort("sorter")).scoreDocs; + hits = searcher.search (filteredquery, null, 1000, new Sort(new SortField("sorter", SortField.STRING))).scoreDocs; assertEquals (1, hits.length); assertEquals (1, hits[0].doc); diff --git a/src/test/org/apache/lucene/search/TestSort.java b/src/test/org/apache/lucene/search/TestSort.java index 9e138729a20..6505316676e 100644 --- a/src/test/org/apache/lucene/search/TestSort.java +++ b/src/test/org/apache/lucene/search/TestSort.java @@ -233,31 +233,31 @@ public class TestSort extends LuceneTestCase implements Serializable { // test sorts where the type of field is specified public void testTypedSort() throws Exception { - sort.setSort (new SortField[] { new SortField ("int", SortField.INT), SortField.FIELD_DOC }); + sort.setSort (new SortField ("int", SortField.INT), SortField.FIELD_DOC ); assertMatches (full, queryX, sort, "IGAEC"); assertMatches (full, queryY, sort, "DHFJB"); - sort.setSort (new SortField[] { new SortField ("float", SortField.FLOAT), SortField.FIELD_DOC }); + sort.setSort (new SortField ("float", SortField.FLOAT), SortField.FIELD_DOC ); assertMatches (full, queryX, sort, "GCIEA"); assertMatches (full, queryY, sort, "DHJFB"); - sort.setSort (new SortField[] { new SortField ("long", SortField.LONG), SortField.FIELD_DOC }); + sort.setSort (new SortField ("long", SortField.LONG), SortField.FIELD_DOC ); assertMatches (full, queryX, sort, "EACGI"); assertMatches (full, queryY, sort, "FBJHD"); - sort.setSort (new SortField[] { new SortField ("double", SortField.DOUBLE), SortField.FIELD_DOC }); + sort.setSort (new SortField ("double", SortField.DOUBLE), SortField.FIELD_DOC ); assertMatches (full, queryX, sort, "AGICE"); assertMatches (full, queryY, sort, "DJHBF"); - sort.setSort (new SortField[] { new SortField ("byte", SortField.BYTE), SortField.FIELD_DOC }); + sort.setSort (new SortField ("byte", SortField.BYTE), SortField.FIELD_DOC ); assertMatches (full, queryX, sort, "CIGAE"); assertMatches (full, queryY, sort, "DHFBJ"); - sort.setSort (new SortField[] { new SortField ("short", SortField.SHORT), SortField.FIELD_DOC }); + sort.setSort (new SortField ("short", SortField.SHORT), SortField.FIELD_DOC ); assertMatches (full, queryX, sort, "IAGCE"); assertMatches (full, queryY, sort, "DFHBJ"); - sort.setSort (new SortField[] { new SortField ("string", SortField.STRING), SortField.FIELD_DOC }); + sort.setSort (new SortField ("string", SortField.STRING), SortField.FIELD_DOC ); assertMatches (full, queryX, sort, "AIGEC"); assertMatches (full, queryY, sort, "DJHFB"); } @@ -269,10 +269,10 @@ public class TestSort extends LuceneTestCase implements Serializable { r = newRandom(); ScoreDoc[] result = null; IndexSearcher searcher = getFullStrings(); - sort.setSort(new SortField[] { + sort.setSort( new SortField("string", SortField.STRING), new SortField("string2", SortField.STRING, true), - SortField.FIELD_DOC }); + SortField.FIELD_DOC ); result = searcher.search(new MatchAllDocsQuery(), null, 500, sort).scoreDocs; @@ -331,56 +331,56 @@ public class TestSort extends LuceneTestCase implements Serializable { FieldCache fc = FieldCache.DEFAULT; - sort.setSort (new SortField[] { new SortField ("parser", new FieldCache.IntParser(){ + sort.setSort (new SortField ("parser", new FieldCache.IntParser(){ public final int parseInt(final String val) { return (val.charAt(0)-'A') * 123456; } - }), SortField.FIELD_DOC }); + }), SortField.FIELD_DOC ); assertMatches (full, queryA, sort, "JIHGFEDCBA"); assertSaneFieldCaches(getName() + " IntParser"); fc.purgeAllCaches(); - sort.setSort (new SortField[] { new SortField ("parser", new FieldCache.FloatParser(){ + sort.setSort (new SortField ("parser", new FieldCache.FloatParser(){ public final float parseFloat(final String val) { return (float) Math.sqrt( val.charAt(0) ); } - }), SortField.FIELD_DOC }); + }), SortField.FIELD_DOC ); assertMatches (full, queryA, sort, "JIHGFEDCBA"); assertSaneFieldCaches(getName() + " FloatParser"); fc.purgeAllCaches(); - sort.setSort (new SortField[] { new SortField ("parser", new FieldCache.LongParser(){ + sort.setSort (new SortField ("parser", new FieldCache.LongParser(){ public final long parseLong(final String val) { return (val.charAt(0)-'A') * 1234567890L; } - }), SortField.FIELD_DOC }); + }), SortField.FIELD_DOC ); assertMatches (full, queryA, sort, "JIHGFEDCBA"); assertSaneFieldCaches(getName() + " LongParser"); fc.purgeAllCaches(); - sort.setSort (new SortField[] { new SortField ("parser", new FieldCache.DoubleParser(){ + sort.setSort (new SortField ("parser", new FieldCache.DoubleParser(){ public final double parseDouble(final String val) { return Math.pow( val.charAt(0), (val.charAt(0)-'A') ); } - }), SortField.FIELD_DOC }); + }), SortField.FIELD_DOC ); assertMatches (full, queryA, sort, "JIHGFEDCBA"); assertSaneFieldCaches(getName() + " DoubleParser"); fc.purgeAllCaches(); - sort.setSort (new SortField[] { new SortField ("parser", new FieldCache.ByteParser(){ + sort.setSort (new SortField ("parser", new FieldCache.ByteParser(){ public final byte parseByte(final String val) { return (byte) (val.charAt(0)-'A'); } - }), SortField.FIELD_DOC }); + }), SortField.FIELD_DOC ); assertMatches (full, queryA, sort, "JIHGFEDCBA"); assertSaneFieldCaches(getName() + " ByteParser"); fc.purgeAllCaches(); - sort.setSort (new SortField[] { new SortField ("parser", new FieldCache.ShortParser(){ + sort.setSort (new SortField ("parser", new FieldCache.ShortParser(){ public final short parseShort(final String val) { return (short) (val.charAt(0)-'A'); } - }), SortField.FIELD_DOC }); + }), SortField.FIELD_DOC ); assertMatches (full, queryA, sort, "JIHGFEDCBA"); assertSaneFieldCaches(getName() + " ShortParser"); fc.purgeAllCaches(); @@ -396,13 +396,13 @@ public class TestSort extends LuceneTestCase implements Serializable { sort.setSort(SortField.FIELD_DOC); assertMatches (empty, queryX, sort, ""); - sort.setSort (new SortField[] { new SortField ("int", SortField.INT), SortField.FIELD_DOC }); + sort.setSort (new SortField ("int", SortField.INT), SortField.FIELD_DOC ); assertMatches (empty, queryX, sort, ""); - sort.setSort (new SortField[] { new SortField ("string", SortField.STRING, true), SortField.FIELD_DOC }); + sort.setSort (new SortField ("string", SortField.STRING, true), SortField.FIELD_DOC ); assertMatches (empty, queryX, sort, ""); - sort.setSort (new SortField[] { new SortField ("float", SortField.FLOAT), new SortField ("string", SortField.STRING) }); + sort.setSort (new SortField ("float", SortField.FLOAT), new SortField ("string", SortField.STRING) ); assertMatches (empty, queryX, sort, ""); } @@ -452,28 +452,13 @@ public class TestSort extends LuceneTestCase implements Serializable { // Test sorting w/ custom FieldComparator public void testNewCustomFieldParserSort() throws Exception { - sort.setSort (new SortField[] { new SortField ("parser", new MyFieldComparatorSource())}); + sort.setSort (new SortField ("parser", new MyFieldComparatorSource())); assertMatches (full, queryA, sort, "JIHGFEDCBA"); } - // test sorts where the type of field is determined dynamically - public void testAutoSort() throws Exception { - sort.setSort("int"); - assertMatches (full, queryX, sort, "IGAEC"); - assertMatches (full, queryY, sort, "DHFJB"); - - sort.setSort("float"); - assertMatches (full, queryX, sort, "GCIEA"); - assertMatches (full, queryY, sort, "DHJFB"); - - sort.setSort("string"); - assertMatches (full, queryX, sort, "AIGEC"); - assertMatches (full, queryY, sort, "DJHFB"); - } - // test sorts in reverse public void testReverseSort() throws Exception { - sort.setSort (new SortField[] { new SortField (null, SortField.SCORE, true), SortField.FIELD_DOC }); + sort.setSort (new SortField (null, SortField.SCORE, true), SortField.FIELD_DOC ); assertMatches (full, queryX, sort, "IEGCA"); assertMatches (full, queryY, sort, "JFHDB"); @@ -481,25 +466,25 @@ public class TestSort extends LuceneTestCase implements Serializable { assertMatches (full, queryX, sort, "IGECA"); assertMatches (full, queryY, sort, "JHFDB"); - sort.setSort ("int", true); + sort.setSort (new SortField ("int", SortField.INT, true) ); assertMatches (full, queryX, sort, "CAEGI"); assertMatches (full, queryY, sort, "BJFHD"); - sort.setSort ("float", true); + sort.setSort (new SortField ("float", SortField.FLOAT, true) ); assertMatches (full, queryX, sort, "AECIG"); assertMatches (full, queryY, sort, "BFJHD"); - sort.setSort ("string", true); + sort.setSort (new SortField ("string", SortField.STRING, true) ); assertMatches (full, queryX, sort, "CEGIA"); assertMatches (full, queryY, sort, "BFHJD"); } // test sorting when the sort field is empty (undefined) for some of the documents public void testEmptyFieldSort() throws Exception { - sort.setSort ("string"); + sort.setSort (new SortField ("string", SortField.STRING) ); assertMatches (full, queryF, sort, "ZJI"); - sort.setSort ("string", true); + sort.setSort (new SortField ("string", SortField.STRING, true) ); assertMatches (full, queryF, sort, "IJZ"); sort.setSort (new SortField ("i18n", Locale.ENGLISH)); @@ -508,84 +493,84 @@ public class TestSort extends LuceneTestCase implements Serializable { sort.setSort (new SortField ("i18n", Locale.ENGLISH, true)); assertMatches (full, queryF, sort, "IJZ"); - sort.setSort ("int"); + sort.setSort (new SortField ("int", SortField.INT) ); assertMatches (full, queryF, sort, "IZJ"); - sort.setSort ("int", true); + sort.setSort (new SortField ("int", SortField.INT, true) ); assertMatches (full, queryF, sort, "JZI"); - sort.setSort ("float"); + sort.setSort (new SortField ("float", SortField.FLOAT) ); assertMatches (full, queryF, sort, "ZJI"); // using a nonexisting field as first sort key shouldn't make a difference: - sort.setSort (new SortField[] { new SortField ("nosuchfield", SortField.STRING), - new SortField ("float") }); + sort.setSort (new SortField ("nosuchfield", SortField.STRING), + new SortField ("float", SortField.FLOAT) ); assertMatches (full, queryF, sort, "ZJI"); - sort.setSort ("float", true); + sort.setSort (new SortField ("float", SortField.FLOAT, true) ); assertMatches (full, queryF, sort, "IJZ"); // When a field is null for both documents, the next SortField should be used. // Works for - sort.setSort (new SortField[] { new SortField ("int"), + sort.setSort (new SortField ("int", SortField.INT), new SortField ("string", SortField.STRING), - new SortField ("float") }); + new SortField ("float", SortField.FLOAT) ); assertMatches (full, queryG, sort, "ZWXY"); // Reverse the last criterium to make sure the test didn't pass by chance - sort.setSort (new SortField[] { new SortField ("int"), + sort.setSort (new SortField ("int", SortField.INT), new SortField ("string", SortField.STRING), - new SortField ("float", true) }); + new SortField ("float", SortField.FLOAT, true) ); assertMatches (full, queryG, sort, "ZYXW"); // Do the same for a MultiSearcher Searcher multiSearcher=new MultiSearcher (new Searchable[] { full }); - sort.setSort (new SortField[] { new SortField ("int"), + sort.setSort (new SortField ("int", SortField.INT), new SortField ("string", SortField.STRING), - new SortField ("float") }); + new SortField ("float", SortField.FLOAT) ); assertMatches (multiSearcher, queryG, sort, "ZWXY"); - sort.setSort (new SortField[] { new SortField ("int"), + sort.setSort (new SortField ("int", SortField.INT), new SortField ("string", SortField.STRING), - new SortField ("float", true) }); + new SortField ("float", SortField.FLOAT, true) ); assertMatches (multiSearcher, queryG, sort, "ZYXW"); // Don't close the multiSearcher. it would close the full searcher too! // Do the same for a ParallelMultiSearcher Searcher parallelSearcher=new ParallelMultiSearcher (new Searchable[] { full }); - sort.setSort (new SortField[] { new SortField ("int"), + sort.setSort (new SortField ("int", SortField.INT), new SortField ("string", SortField.STRING), - new SortField ("float") }); + new SortField ("float", SortField.FLOAT) ); assertMatches (parallelSearcher, queryG, sort, "ZWXY"); - sort.setSort (new SortField[] { new SortField ("int"), + sort.setSort (new SortField ("int", SortField.INT), new SortField ("string", SortField.STRING), - new SortField ("float", true) }); + new SortField ("float", SortField.FLOAT, true) ); assertMatches (parallelSearcher, queryG, sort, "ZYXW"); // Don't close the parallelSearcher. it would close the full searcher too! } // test sorts using a series of fields public void testSortCombos() throws Exception { - sort.setSort (new String[] {"int","float"}); + sort.setSort (new SortField ("int", SortField.INT), new SortField ("float", SortField.FLOAT) ); assertMatches (full, queryX, sort, "IGEAC"); - sort.setSort (new SortField[] { new SortField ("int", true), new SortField (null, SortField.DOC, true) }); + sort.setSort (new SortField ("int", SortField.INT, true), new SortField (null, SortField.DOC, true) ); assertMatches (full, queryX, sort, "CEAGI"); - sort.setSort (new String[] {"float","string"}); + sort.setSort (new SortField ("float", SortField.FLOAT), new SortField ("string", SortField.STRING) ); assertMatches (full, queryX, sort, "GICEA"); } // test using a Locale for sorting strings public void testLocaleSort() throws Exception { - sort.setSort (new SortField[] { new SortField ("string", Locale.US) }); + sort.setSort (new SortField ("string", Locale.US) ); assertMatches (full, queryX, sort, "AIGEC"); assertMatches (full, queryY, sort, "DJHFB"); - sort.setSort (new SortField[] { new SortField ("string", Locale.US, true) }); + sort.setSort (new SortField ("string", Locale.US, true) ); assertMatches (full, queryX, sort, "CEGIA"); assertMatches (full, queryY, sort, "BFHJD"); } @@ -667,7 +652,7 @@ public class TestSort extends LuceneTestCase implements Serializable { assertSameValues (scoresA, getScores (full.search (queryA, null, 1000, sort).scoreDocs, full)); assertSameValues (scoresA, getScores (multi.search (queryA, null, 1000, sort).scoreDocs, multi)); - sort.setSort ("int"); + sort.setSort (new SortField("int", SortField.INT)); assertSameValues (scoresX, getScores (full.search (queryX, null, 1000, sort).scoreDocs, full)); assertSameValues (scoresX, getScores (multi.search (queryX, null, 1000, sort).scoreDocs, multi)); assertSameValues (scoresY, getScores (full.search (queryY, null, 1000, sort).scoreDocs, full)); @@ -675,7 +660,7 @@ public class TestSort extends LuceneTestCase implements Serializable { assertSameValues (scoresA, getScores (full.search (queryA, null, 1000, sort).scoreDocs, full)); assertSameValues (scoresA, getScores (multi.search (queryA, null, 1000, sort).scoreDocs, multi)); - sort.setSort ("float"); + sort.setSort (new SortField("float", SortField.FLOAT)); assertSameValues (scoresX, getScores (full.search (queryX, null, 1000, sort).scoreDocs, full)); assertSameValues (scoresX, getScores (multi.search (queryX, null, 1000, sort).scoreDocs, multi)); assertSameValues (scoresY, getScores (full.search (queryY, null, 1000, sort).scoreDocs, full)); @@ -683,7 +668,7 @@ public class TestSort extends LuceneTestCase implements Serializable { assertSameValues (scoresA, getScores (full.search (queryA, null, 1000, sort).scoreDocs, full)); assertSameValues (scoresA, getScores (multi.search (queryA, null, 1000, sort).scoreDocs, multi)); - sort.setSort ("string"); + sort.setSort (new SortField("string", SortField.STRING)); assertSameValues (scoresX, getScores (full.search (queryX, null, 1000, sort).scoreDocs, full)); assertSameValues (scoresX, getScores (multi.search (queryX, null, 1000, sort).scoreDocs, multi)); assertSameValues (scoresY, getScores (full.search (queryY, null, 1000, sort).scoreDocs, full)); @@ -691,7 +676,7 @@ public class TestSort extends LuceneTestCase implements Serializable { assertSameValues (scoresA, getScores (full.search (queryA, null, 1000, sort).scoreDocs, full)); assertSameValues (scoresA, getScores (multi.search (queryA, null, 1000, sort).scoreDocs, multi)); - sort.setSort (new String[] {"int","float"}); + sort.setSort (new SortField("int", SortField.INT),new SortField("float", SortField.FLOAT)); assertSameValues (scoresX, getScores (full.search (queryX, null, 1000, sort).scoreDocs, full)); assertSameValues (scoresX, getScores (multi.search (queryX, null, 1000, sort).scoreDocs, multi)); assertSameValues (scoresY, getScores (full.search (queryY, null, 1000, sort).scoreDocs, full)); @@ -699,7 +684,7 @@ public class TestSort extends LuceneTestCase implements Serializable { assertSameValues (scoresA, getScores (full.search (queryA, null, 1000, sort).scoreDocs, full)); assertSameValues (scoresA, getScores (multi.search (queryA, null, 1000, sort).scoreDocs, multi)); - sort.setSort (new SortField[] { new SortField ("int", true), new SortField (null, SortField.DOC, true) }); + sort.setSort (new SortField ("int", SortField.INT, true), new SortField (null, SortField.DOC, true) ); assertSameValues (scoresX, getScores (full.search (queryX, null, 1000, sort).scoreDocs, full)); assertSameValues (scoresX, getScores (multi.search (queryX, null, 1000, sort).scoreDocs, multi)); assertSameValues (scoresY, getScores (full.search (queryY, null, 1000, sort).scoreDocs, full)); @@ -707,7 +692,7 @@ public class TestSort extends LuceneTestCase implements Serializable { assertSameValues (scoresA, getScores (full.search (queryA, null, 1000, sort).scoreDocs, full)); assertSameValues (scoresA, getScores (multi.search (queryA, null, 1000, sort).scoreDocs, multi)); - sort.setSort (new String[] {"float","string"}); + sort.setSort (new SortField("int", SortField.INT),new SortField("string", SortField.STRING)); assertSameValues (scoresX, getScores (full.search (queryX, null, 1000, sort).scoreDocs, full)); assertSameValues (scoresX, getScores (multi.search (queryX, null, 1000, sort).scoreDocs, multi)); assertSameValues (scoresY, getScores (full.search (queryY, null, 1000, sort).scoreDocs, full)); @@ -909,52 +894,52 @@ public class TestSort extends LuceneTestCase implements Serializable { expected = isFull ? "IDHFGJABEC" : "IDHFGJAEBC"; assertMatches(multi, queryA, sort, expected); - sort.setSort(new SortField[] {new SortField ("int", SortField.INT), SortField.FIELD_DOC}); + sort.setSort(new SortField ("int", SortField.INT), SortField.FIELD_DOC); expected = isFull ? "IDHFGJABEC" : "IDHFGJAEBC"; assertMatches(multi, queryA, sort, expected); - sort.setSort("int"); + sort.setSort(new SortField("int", SortField.INT)); expected = isFull ? "IDHFGJABEC" : "IDHFGJAEBC"; assertMatches(multi, queryA, sort, expected); - sort.setSort(new SortField[] {new SortField ("float", SortField.FLOAT), SortField.FIELD_DOC}); + sort.setSort(new SortField ("float", SortField.FLOAT), SortField.FIELD_DOC); assertMatches(multi, queryA, sort, "GDHJCIEFAB"); - sort.setSort("float"); + sort.setSort(new SortField("float", SortField.FLOAT)); assertMatches(multi, queryA, sort, "GDHJCIEFAB"); - sort.setSort("string"); + sort.setSort(new SortField("string", SortField.STRING)); assertMatches(multi, queryA, sort, "DJAIHGFEBC"); - sort.setSort("int", true); + sort.setSort(new SortField("int", SortField.INT, true)); expected = isFull ? "CABEJGFHDI" : "CAEBJGFHDI"; assertMatches(multi, queryA, sort, expected); - sort.setSort("float", true); + sort.setSort(new SortField("float", SortField.FLOAT, true)); assertMatches(multi, queryA, sort, "BAFECIJHDG"); - sort.setSort("string", true); + sort.setSort(new SortField("string", SortField.STRING, true)); assertMatches(multi, queryA, sort, "CBEFGHIAJD"); - sort.setSort(new String[] {"int","float"}); + sort.setSort(new SortField("int", SortField.INT),new SortField("float", SortField.FLOAT)); assertMatches(multi, queryA, sort, "IDHFGJEABC"); - sort.setSort(new String[] {"float","string"}); + sort.setSort(new SortField("float", SortField.FLOAT),new SortField("string", SortField.STRING)); assertMatches(multi, queryA, sort, "GDHJICEFAB"); - sort.setSort("int"); + sort.setSort(new SortField ("int", SortField.INT)); assertMatches(multi, queryF, sort, "IZJ"); - sort.setSort("int", true); + sort.setSort(new SortField ("int", SortField.INT, true)); assertMatches(multi, queryF, sort, "JZI"); - sort.setSort("float"); + sort.setSort(new SortField ("float", SortField.FLOAT)); assertMatches(multi, queryF, sort, "ZJI"); - sort.setSort("string"); + sort.setSort(new SortField ("string", SortField.STRING)); assertMatches(multi, queryF, sort, "ZJI"); - sort.setSort("string", true); + sort.setSort(new SortField ("string", SortField.STRING, true)); assertMatches(multi, queryF, sort, "IJZ"); // up to this point, all of the searches should have "sane" @@ -963,13 +948,13 @@ public class TestSort extends LuceneTestCase implements Serializable { // next we'll check Locale based (String[]) for 'string', so purge first FieldCache.DEFAULT.purgeAllCaches(); - sort.setSort(new SortField[] { new SortField ("string", Locale.US) }); + sort.setSort(new SortField ("string", Locale.US) ); assertMatches(multi, queryA, sort, "DJAIHGFEBC"); - sort.setSort(new SortField[] { new SortField ("string", Locale.US, true) }); + sort.setSort(new SortField ("string", Locale.US, true) ); assertMatches(multi, queryA, sort, "CBEFGHIAJD"); - sort.setSort(new SortField[] { new SortField ("string", Locale.UK) }); + sort.setSort(new SortField ("string", Locale.UK) ); assertMatches(multi, queryA, sort, "DJAIHGFEBC"); assertSaneFieldCaches(getName() + " Locale.US + Locale.UK"); diff --git a/src/test/org/apache/lucene/search/TestStressSort.java b/src/test/org/apache/lucene/search/TestStressSort.java index bcf09637c9d..d8e1b81e5be 100644 --- a/src/test/org/apache/lucene/search/TestStressSort.java +++ b/src/test/org/apache/lucene/search/TestStressSort.java @@ -207,46 +207,34 @@ public class TestStressSort extends LuceneTestCase { boolean reverse = 1 == r; sorts[sortCount++] = sort = new Sort(); - sort.setSort(new SortField[] {new SortField("byte", SortField.BYTE, reverse)}); + sort.setSort(new SortField("byte", SortField.BYTE, reverse)); sorts[sortCount++] = sort = new Sort(); - sort.setSort(new SortField[] {new SortField("short", SortField.SHORT, reverse)}); + sort.setSort(new SortField("short", SortField.SHORT, reverse)); sorts[sortCount++] = sort = new Sort(); - sort.setSort(new SortField[] {new SortField("int", SortField.INT, reverse)}); + sort.setSort(new SortField("int", SortField.INT, reverse)); sorts[sortCount++] = sort = new Sort(); - sort.setSort(new SortField[] {new SortField("long", SortField.LONG, reverse)}); + sort.setSort(new SortField("long", SortField.LONG, reverse)); sorts[sortCount++] = sort = new Sort(); - sort.setSort(new SortField[] {new SortField("float", SortField.FLOAT, reverse)}); + sort.setSort(new SortField("float", SortField.FLOAT, reverse)); sorts[sortCount++] = sort = new Sort(); - sort.setSort(new SortField[] {new SortField("double", SortField.DOUBLE, reverse)}); + sort.setSort(new SortField("double", SortField.DOUBLE, reverse)); sorts[sortCount++] = sort = new Sort(); - sort.setSort(new SortField[] {new SortField("string", SortField.STRING_VAL, reverse)}); + sort.setSort(new SortField("string", SortField.STRING_VAL, reverse)); sorts[sortCount++] = sort = new Sort(); - sort.setSort(new SortField[] {new SortField("stringIdx", SortField.STRING, reverse)}); - - //sorts[sortCount++] = sort = new Sort(); - //sort.setSort(new SortField[] {new SortField("string", SortField.STRING_ORD, reverse)}); - - //sorts[sortCount++] = sort = new Sort(); - //sort.setSort(new SortField[] {new SortField("string", SortField.STRING_ORD_VAL, reverse)}); - - //sorts[sortCount++] = sort = new Sort(); - //sort.setSort(new SortField[] {new SortField("string", SortField.STRING_ORD_VAL_DEM, reverse)}); - - //sorts[sortCount++] = sort = new Sort(); - //sort.setSort(new SortField[] {new SortField("string", SortField.STRING_ORD_VAL_DEM2, reverse)}); + sort.setSort(new SortField("stringIdx", SortField.STRING, reverse)); sorts[sortCount++] = sort = new Sort(); - sort.setSort(new SortField[] {new SortField(null, SortField.SCORE, reverse)}); + sort.setSort(new SortField(null, SortField.SCORE, reverse)); sorts[sortCount++] = sort = new Sort(); - sort.setSort(new SortField[] {new SortField(null, SortField.DOC, reverse)}); + sort.setSort(new SortField(null, SortField.DOC, reverse)); } Query[] queries = new Query[4]; @@ -288,30 +276,8 @@ public class TestStressSort extends LuceneTestCase { // Single field sort sort = sort1; } else { - sort = new Sort(new SortField[] {sort1.getSort()[0], sorts[s2].getSort()[0]}); + sort = new Sort(sort1.getSort()[0], sorts[s2].getSort()[0]); } - - // Old - Sort oldSort = getOldSort(sort); - - if (VERBOSE) { - System.out.println("query=" + query); - if (sx == 0) { - System.out.println(" single-segment index"); - } else if (sx == 1) { - System.out.println(" few-segment index"); - } else { - System.out.println(" many-segment index"); - } - System.out.println(" numHit=" + queueSize); - System.out.println(" old=" + oldSort); - System.out.println(" new=" + sort); - } - - TopDocs newHits = searcher.search(query, null, queueSize, sort); - TopDocs oldHits = searcher.search(query, null, queueSize, oldSort); - - compare(oldHits, newHits); } } } @@ -350,24 +316,6 @@ public class TestStressSort extends LuceneTestCase { close(); } - private Sort getOldSort(Sort sort) { - SortField[] fields = sort.getSort(); - SortField[] oldFields = new SortField[fields.length]; - for(int i=0;i