You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2018/07/19 08:41:46 UTC
[45/50] [abbrv] lucene-solr:jira/solr-12509: LUCENE-8405: Remove
TopDocs.maxScore.
LUCENE-8405: Remove TopDocs.maxScore.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/331ccf39
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/331ccf39
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/331ccf39
Branch: refs/heads/jira/solr-12509
Commit: 331ccf391067b7775db371bec1ec8e8c9004e904
Parents: 1ba5cff
Author: Adrien Grand <jp...@gmail.com>
Authored: Wed Jul 18 08:31:44 2018 +0200
Committer: Adrien Grand <jp...@gmail.com>
Committed: Wed Jul 18 08:38:57 2018 +0200
----------------------------------------------------------------------
lucene/CHANGES.txt | 4 +
lucene/MIGRATE.txt | 14 ++
.../lucene/benchmark/byTask/tasks/ReadTask.java | 7 -
.../byTask/tasks/SearchWithSortTask.java | 9 --
.../lucene/classification/BM25NBClassifier.java | 4 +-
.../classification/KNearestFuzzyClassifier.java | 2 +-
.../KNearestNeighborClassifier.java | 2 +-
.../org/apache/lucene/search/IndexSearcher.java | 16 +-
.../org/apache/lucene/search/QueryRescorer.java | 2 +-
.../org/apache/lucene/search/SortRescorer.java | 2 +-
.../java/org/apache/lucene/search/TopDocs.java | 35 +----
.../apache/lucene/search/TopDocsCollector.java | 2 +-
.../apache/lucene/search/TopFieldCollector.java | 81 ++--------
.../org/apache/lucene/search/TopFieldDocs.java | 5 +-
.../lucene/search/TopScoreDocCollector.java | 16 +-
.../apache/lucene/index/TestIndexSorting.java | 5 +-
.../org/apache/lucene/search/TestBoolean2.java | 8 +-
.../lucene/search/TestDoubleValuesSource.java | 4 +-
.../lucene/search/TestElevationComparator.java | 2 +-
.../apache/lucene/search/TestIndexSearcher.java | 12 +-
.../lucene/search/TestLongValuesSource.java | 4 +-
.../apache/lucene/search/TestSearchAfter.java | 9 +-
.../lucene/search/TestShardSearching.java | 4 +-
.../apache/lucene/search/TestSortRandom.java | 2 +-
.../search/TestSortedNumericSortField.java | 4 +-
.../lucene/search/TestSortedSetSortField.java | 4 +-
.../lucene/search/TestTopDocsCollector.java | 22 +--
.../apache/lucene/search/TestTopDocsMerge.java | 10 +-
.../lucene/search/TestTopFieldCollector.java | 155 +++++++------------
.../TestTopFieldCollectorEarlyTermination.java | 7 +-
.../lucene/expressions/TestDemoExpressions.java | 10 +-
.../lucene/expressions/TestExpressionSorts.java | 4 +-
.../org/apache/lucene/facet/DrillSideways.java | 6 +-
.../apache/lucene/facet/FacetsCollector.java | 21 ++-
.../apache/lucene/facet/TestDrillSideways.java | 5 +-
.../TestTaxonomyFacetSumValueSource.java | 2 +-
.../search/grouping/BlockGroupingCollector.java | 8 +-
.../lucene/search/grouping/TopGroups.java | 6 +-
.../search/grouping/TopGroupsCollector.java | 93 +++++++++--
.../TestUnifiedHighlighterStrictPhrases.java | 2 +-
.../lucene/search/join/TestBlockJoin.java | 2 +-
.../apache/lucene/search/join/TestJoinUtil.java | 3 +-
.../join/TestParentChildrenBlockJoinQuery.java | 1 -
.../search/DiversifiedTopDocsCollector.java | 16 +-
.../function/TestIndexReaderFunctions.java | 2 +-
.../queries/function/TestValueSources.java | 2 +-
.../queries/payloads/TestPayloadTermQuery.java | 2 -
.../document/FloatPointNearestNeighbor.java | 2 +-
.../org/apache/lucene/document/LatLonPoint.java | 2 +-
.../analyzing/AnalyzingInfixSuggester.java | 2 +-
.../search/suggest/document/TopSuggestDocs.java | 8 +-
.../document/TopSuggestDocsCollector.java | 2 +-
.../java/org/apache/lucene/util/TestUtil.java | 1 -
.../java/org/apache/solr/ltr/LTRRescorer.java | 2 +-
.../solr/ltr/TestLTRReRankingPipeline.java | 2 +-
.../solr/handler/component/ExpandComponent.java | 6 +-
.../apache/solr/search/ExportQParserPlugin.java | 2 +-
.../java/org/apache/solr/search/Grouping.java | 33 ++--
.../apache/solr/search/MaxScoreCollector.java | 55 +++++++
.../org/apache/solr/search/ReRankCollector.java | 5 +-
.../apache/solr/search/SolrIndexSearcher.java | 21 ++-
.../distributed/command/QueryCommand.java | 26 +++-
.../distributed/command/QueryCommandResult.java | 8 +-
.../TopGroupsShardResponseProcessor.java | 14 +-
.../TopGroupsResultTransformer.java | 10 +-
.../GroupedEndResultTransformer.java | 4 +-
.../apache/solr/search/TestRankQueryPlugin.java | 4 +-
.../test/org/apache/solr/search/TestSort.java | 3 +-
.../solr/uninverting/TestFieldCacheSort.java | 20 +--
.../uninverting/TestFieldCacheSortRandom.java | 4 +-
70 files changed, 436 insertions(+), 438 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/CHANGES.txt
----------------------------------------------------------------------
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 423a005..fe1d166 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -56,6 +56,10 @@ API Changes
* LUCENE-8388: Unused PostingsEnum#attributes() method has been removed
(Alan Woodward)
+* LUCENE-8405: TopDocs.maxScore is removed. IndexSearcher and TopFieldCollector
+ no longer have an option to compute the maximum score when sorting by field.
+ (Adrien Grand)
+
Changes in Runtime Behavior
* LUCENE-8333: Switch MoreLikeThis.setMaxDocFreqPct to use maxDoc instead of
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/MIGRATE.txt
----------------------------------------------------------------------
diff --git a/lucene/MIGRATE.txt b/lucene/MIGRATE.txt
index cc356eb..8467d72 100644
--- a/lucene/MIGRATE.txt
+++ b/lucene/MIGRATE.txt
@@ -62,3 +62,17 @@ to the constructor
English stop words are now defined in EnglishAnalyzer#ENGLISH_STOP_WORD_SET in the
analysis-common module
+
+## TopDocs.maxScore removed ##
+
+TopDocs.maxScore is removed. IndexSearcher and TopFieldCollector no longer have
+an option to compute the maximum score when sorting by field. If you need to
+know the maximum score for a query, the recommended approach is to run a
+separate query:
+
+ TopDocs topHits = searcher.search(query, 1);
+ float maxScore = topHits.scoreDocs.length == 0 ? Float.NaN : topHits.scoreDocs[0].score;
+
+Thanks to other optimizations that were added to Lucene 8, this query will be
+able to efficiently select the top-scoring document without having to visit
+all matches.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/ReadTask.java
----------------------------------------------------------------------
diff --git a/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/ReadTask.java b/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/ReadTask.java
index a3b90f5..f587357 100644
--- a/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/ReadTask.java
+++ b/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/ReadTask.java
@@ -113,7 +113,6 @@ public abstract class ReadTask extends PerfTask {
// pulling the Weight ourselves:
TopFieldCollector collector = TopFieldCollector.create(sort, numHits,
true, withScore(),
- withMaxScore(),
withTotalHits());
searcher.search(q, collector);
hits = collector.topDocs();
@@ -215,12 +214,6 @@ public abstract class ReadTask extends PerfTask {
return true;
}
- /** Whether maxScores should be computed (only useful with
- * field sort) */
- public boolean withMaxScore() {
- return true;
- }
-
/** Whether totalHits should be computed (only useful with
* field sort) */
public boolean withTotalHits() {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchWithSortTask.java
----------------------------------------------------------------------
diff --git a/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchWithSortTask.java b/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchWithSortTask.java
index 8361ab3..6a17714 100644
--- a/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchWithSortTask.java
+++ b/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchWithSortTask.java
@@ -30,7 +30,6 @@ import org.apache.lucene.search.SortField;
public class SearchWithSortTask extends ReadTask {
private boolean doScore = true;
- private boolean doMaxScore = true;
private Sort sort;
public SearchWithSortTask(PerfRunData runData) {
@@ -64,9 +63,6 @@ public class SearchWithSortTask extends ReadTask {
} else if (field.equals("noscore")) {
doScore = false;
continue;
- } else if (field.equals("nomaxscore")) {
- doMaxScore = false;
- continue;
} else {
int index = field.lastIndexOf(":");
String fieldName;
@@ -124,11 +120,6 @@ public class SearchWithSortTask extends ReadTask {
public boolean withScore() {
return doScore;
}
-
- @Override
- public boolean withMaxScore() {
- return doMaxScore;
- }
@Override
public Sort getSort() {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/classification/src/java/org/apache/lucene/classification/BM25NBClassifier.java
----------------------------------------------------------------------
diff --git a/lucene/classification/src/java/org/apache/lucene/classification/BM25NBClassifier.java b/lucene/classification/src/java/org/apache/lucene/classification/BM25NBClassifier.java
index f03fc53..0613856 100644
--- a/lucene/classification/src/java/org/apache/lucene/classification/BM25NBClassifier.java
+++ b/lucene/classification/src/java/org/apache/lucene/classification/BM25NBClassifier.java
@@ -217,7 +217,7 @@ public class BM25NBClassifier implements Classifier<BytesRef> {
builder.add(query, BooleanClause.Occur.MUST);
}
TopDocs search = indexSearcher.search(builder.build(), 1);
- return search.totalHits > 0 ? search.getMaxScore() : 1;
+ return search.totalHits > 0 ? search.scoreDocs[0].score : 1;
}
private double calculateLogPrior(Term term) throws IOException {
@@ -228,7 +228,7 @@ public class BM25NBClassifier implements Classifier<BytesRef> {
bq.add(query, BooleanClause.Occur.MUST);
}
TopDocs topDocs = indexSearcher.search(bq.build(), 1);
- return topDocs.totalHits > 0 ? Math.log(topDocs.getMaxScore()) : 0;
+ return topDocs.totalHits > 0 ? Math.log(topDocs.scoreDocs[0].score) : 0;
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/classification/src/java/org/apache/lucene/classification/KNearestFuzzyClassifier.java
----------------------------------------------------------------------
diff --git a/lucene/classification/src/java/org/apache/lucene/classification/KNearestFuzzyClassifier.java b/lucene/classification/src/java/org/apache/lucene/classification/KNearestFuzzyClassifier.java
index 941d881..0e90ccd 100644
--- a/lucene/classification/src/java/org/apache/lucene/classification/KNearestFuzzyClassifier.java
+++ b/lucene/classification/src/java/org/apache/lucene/classification/KNearestFuzzyClassifier.java
@@ -159,7 +159,7 @@ public class KNearestFuzzyClassifier implements Classifier<BytesRef> {
private List<ClassificationResult<BytesRef>> buildListFromTopDocs(TopDocs topDocs) throws IOException {
Map<BytesRef, Integer> classCounts = new HashMap<>();
Map<BytesRef, Double> classBoosts = new HashMap<>(); // this is a boost based on class ranking positions in topDocs
- float maxScore = topDocs.getMaxScore();
+ float maxScore = topDocs.totalHits == 0 ? Float.NaN : topDocs.scoreDocs[0].score;
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
IndexableField storableField = indexSearcher.doc(scoreDoc.doc).getField(classFieldName);
if (storableField != null) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/classification/src/java/org/apache/lucene/classification/KNearestNeighborClassifier.java
----------------------------------------------------------------------
diff --git a/lucene/classification/src/java/org/apache/lucene/classification/KNearestNeighborClassifier.java b/lucene/classification/src/java/org/apache/lucene/classification/KNearestNeighborClassifier.java
index 1bc53b0..6c55493 100644
--- a/lucene/classification/src/java/org/apache/lucene/classification/KNearestNeighborClassifier.java
+++ b/lucene/classification/src/java/org/apache/lucene/classification/KNearestNeighborClassifier.java
@@ -190,7 +190,7 @@ public class KNearestNeighborClassifier implements Classifier<BytesRef> {
protected List<ClassificationResult<BytesRef>> buildListFromTopDocs(TopDocs topDocs) throws IOException {
Map<BytesRef, Integer> classCounts = new HashMap<>();
Map<BytesRef, Double> classBoosts = new HashMap<>(); // this is a boost based on class ranking positions in topDocs
- float maxScore = topDocs.getMaxScore();
+ float maxScore = topDocs.totalHits == 0 ? Float.NaN : topDocs.scoreDocs[0].score;
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
IndexableField[] storableFields = indexSearcher.doc(scoreDoc.doc).getFields(classFieldName);
for (IndexableField singleStorableField : storableFields) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/java/org/apache/lucene/search/IndexSearcher.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/IndexSearcher.java b/lucene/core/src/java/org/apache/lucene/search/IndexSearcher.java
index 85a0006..64f61c0 100644
--- a/lucene/core/src/java/org/apache/lucene/search/IndexSearcher.java
+++ b/lucene/core/src/java/org/apache/lucene/search/IndexSearcher.java
@@ -441,8 +441,8 @@ public class IndexSearcher {
* {@link BooleanQuery#getMaxClauseCount()} clauses.
*/
public TopFieldDocs search(Query query, int n,
- Sort sort, boolean doDocScores, boolean doMaxScore) throws IOException {
- return searchAfter(null, query, n, sort, doDocScores, doMaxScore);
+ Sort sort, boolean doDocScores) throws IOException {
+ return searchAfter(null, query, n, sort, doDocScores);
}
/**
@@ -454,7 +454,7 @@ public class IndexSearcher {
* @throws IOException if there is a low-level I/O error
*/
public TopFieldDocs search(Query query, int n, Sort sort) throws IOException {
- return searchAfter(null, query, n, sort, false, false);
+ return searchAfter(null, query, n, sort, false);
}
/** Finds the top <code>n</code>
@@ -469,7 +469,7 @@ public class IndexSearcher {
* {@link BooleanQuery#getMaxClauseCount()} clauses.
*/
public TopDocs searchAfter(ScoreDoc after, Query query, int n, Sort sort) throws IOException {
- return searchAfter(after, query, n, sort, false, false);
+ return searchAfter(after, query, n, sort, false);
}
/** Finds the top <code>n</code>
@@ -489,17 +489,17 @@ public class IndexSearcher {
* {@link BooleanQuery#getMaxClauseCount()} clauses.
*/
public TopFieldDocs searchAfter(ScoreDoc after, Query query, int numHits, Sort sort,
- boolean doDocScores, boolean doMaxScore) throws IOException {
+ boolean doDocScores) throws IOException {
if (after != null && !(after instanceof FieldDoc)) {
// TODO: if we fix type safety of TopFieldDocs we can
// remove this
throw new IllegalArgumentException("after must be a FieldDoc; got " + after);
}
- return searchAfter((FieldDoc) after, query, numHits, sort, doDocScores, doMaxScore);
+ return searchAfter((FieldDoc) after, query, numHits, sort, doDocScores);
}
private TopFieldDocs searchAfter(FieldDoc after, Query query, int numHits, Sort sort,
- boolean doDocScores, boolean doMaxScore) throws IOException {
+ boolean doDocScores) throws IOException {
final int limit = Math.max(1, reader.maxDoc());
if (after != null && after.doc >= limit) {
throw new IllegalArgumentException("after.doc exceeds the number of documents in the reader: after.doc="
@@ -514,7 +514,7 @@ public class IndexSearcher {
public TopFieldCollector newCollector() throws IOException {
final boolean fillFields = true;
// TODO: don't pay the price for accurate hit counts by default
- return TopFieldCollector.create(rewrittenSort, cappedNumHits, after, fillFields, doDocScores, doMaxScore, true);
+ return TopFieldCollector.create(rewrittenSort, cappedNumHits, after, fillFields, doDocScores, true);
}
@Override
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/java/org/apache/lucene/search/QueryRescorer.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/QueryRescorer.java b/lucene/core/src/java/org/apache/lucene/search/QueryRescorer.java
index 1a128ec..b3452f4 100644
--- a/lucene/core/src/java/org/apache/lucene/search/QueryRescorer.java
+++ b/lucene/core/src/java/org/apache/lucene/search/QueryRescorer.java
@@ -135,7 +135,7 @@ public abstract class QueryRescorer extends Rescorer {
hits = subset;
}
- return new TopDocs(firstPassTopDocs.totalHits, hits, hits[0].score);
+ return new TopDocs(firstPassTopDocs.totalHits, hits);
}
@Override
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/java/org/apache/lucene/search/SortRescorer.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/SortRescorer.java b/lucene/core/src/java/org/apache/lucene/search/SortRescorer.java
index b83e233..d8e16b1 100644
--- a/lucene/core/src/java/org/apache/lucene/search/SortRescorer.java
+++ b/lucene/core/src/java/org/apache/lucene/search/SortRescorer.java
@@ -54,7 +54,7 @@ public class SortRescorer extends Rescorer {
List<LeafReaderContext> leaves = searcher.getIndexReader().leaves();
- TopFieldCollector collector = TopFieldCollector.create(sort, topN, true, true, true, true);
+ TopFieldCollector collector = TopFieldCollector.create(sort, topN, true, true, true);
// Now merge sort docIDs from hits, with reader's leaves:
int hitUpto = 0;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/java/org/apache/lucene/search/TopDocs.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/TopDocs.java b/lucene/core/src/java/org/apache/lucene/search/TopDocs.java
index c1a4ca6..3a2fa58 100644
--- a/lucene/core/src/java/org/apache/lucene/search/TopDocs.java
+++ b/lucene/core/src/java/org/apache/lucene/search/TopDocs.java
@@ -28,31 +28,10 @@ public class TopDocs {
/** The top hits for the query. */
public ScoreDoc[] scoreDocs;
- /** Stores the maximum score value encountered, needed for normalizing. */
- private float maxScore;
-
- /**
- * Returns the maximum score value encountered. Note that in case
- * scores are not tracked, this returns {@link Float#NaN}.
- */
- public float getMaxScore() {
- return maxScore;
- }
-
- /** Sets the maximum score value encountered. */
- public void setMaxScore(float maxScore) {
- this.maxScore = maxScore;
- }
-
- /** Constructs a TopDocs with a default maxScore=Float.NaN. */
- TopDocs(long totalHits, ScoreDoc[] scoreDocs) {
- this(totalHits, scoreDocs, Float.NaN);
- }
-
- public TopDocs(long totalHits, ScoreDoc[] scoreDocs, float maxScore) {
+ /** Constructs a TopDocs. */
+ public TopDocs(long totalHits, ScoreDoc[] scoreDocs) {
this.totalHits = totalHits;
this.scoreDocs = scoreDocs;
- this.maxScore = maxScore;
}
// Refers to one hit:
@@ -268,7 +247,6 @@ public class TopDocs {
long totalHitCount = 0;
int availHitCount = 0;
- float maxScore = Float.MIN_VALUE;
for(int shardIDX=0;shardIDX<shardHits.length;shardIDX++) {
final TopDocs shard = shardHits[shardIDX];
// totalHits can be non-zero even if no hits were
@@ -277,14 +255,9 @@ public class TopDocs {
if (shard.scoreDocs != null && shard.scoreDocs.length > 0) {
availHitCount += shard.scoreDocs.length;
queue.add(new ShardRef(shardIDX, setShardIndex == false));
- maxScore = Math.max(maxScore, shard.getMaxScore());
}
}
- if (availHitCount == 0) {
- maxScore = Float.NaN;
- }
-
final ScoreDoc[] hits;
if (availHitCount <= start) {
hits = new ScoreDoc[0];
@@ -320,9 +293,9 @@ public class TopDocs {
}
if (sort == null) {
- return new TopDocs(totalHitCount, hits, maxScore);
+ return new TopDocs(totalHitCount, hits);
} else {
- return new TopFieldDocs(totalHitCount, hits, sort.getSort(), maxScore);
+ return new TopFieldDocs(totalHitCount, hits, sort.getSort());
}
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/java/org/apache/lucene/search/TopDocsCollector.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/TopDocsCollector.java b/lucene/core/src/java/org/apache/lucene/search/TopDocsCollector.java
index 219ee3a..1ad3553 100644
--- a/lucene/core/src/java/org/apache/lucene/search/TopDocsCollector.java
+++ b/lucene/core/src/java/org/apache/lucene/search/TopDocsCollector.java
@@ -35,7 +35,7 @@ public abstract class TopDocsCollector<T extends ScoreDoc> implements Collector
/** This is used in case topDocs() is called with illegal parameters, or there
* simply aren't (enough) results. */
- protected static final TopDocs EMPTY_TOPDOCS = new TopDocs(0, new ScoreDoc[0], Float.NaN);
+ protected static final TopDocs EMPTY_TOPDOCS = new TopDocs(0, new ScoreDoc[0]);
/**
* The priority queue which holds the top documents. Note that different
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/java/org/apache/lucene/search/TopFieldCollector.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/TopFieldCollector.java b/lucene/core/src/java/org/apache/lucene/search/TopFieldCollector.java
index 3d85277..3ccd9bb 100644
--- a/lucene/core/src/java/org/apache/lucene/search/TopFieldCollector.java
+++ b/lucene/core/src/java/org/apache/lucene/search/TopFieldCollector.java
@@ -28,7 +28,7 @@ import org.apache.lucene.util.PriorityQueue;
* A {@link Collector} that sorts by {@link SortField} using
* {@link FieldComparator}s.
* <p>
- * See the {@link #create(org.apache.lucene.search.Sort, int, boolean, boolean, boolean, boolean)} method
+ * See the {@link #create(org.apache.lucene.search.Sort, int, boolean, boolean, boolean)} method
* for instantiating a TopFieldCollector.
*
* @lucene.experimental
@@ -94,24 +94,19 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
final Sort sort;
final FieldValueHitQueue<Entry> queue;
final boolean trackDocScores;
- final boolean trackMaxScore;
final boolean mayNeedScoresTwice;
final boolean trackTotalHits;
public SimpleFieldCollector(Sort sort, FieldValueHitQueue<Entry> queue, int numHits, boolean fillFields,
- boolean trackDocScores, boolean trackMaxScore, boolean trackTotalHits) {
- super(queue, numHits, fillFields, sort.needsScores() || trackDocScores || trackMaxScore);
+ boolean trackDocScores, boolean trackTotalHits) {
+ super(queue, numHits, fillFields, sort.needsScores() || trackDocScores);
this.sort = sort;
this.queue = queue;
- if (trackMaxScore) {
- maxScore = Float.NEGATIVE_INFINITY; // otherwise we would keep NaN
- }
this.trackDocScores = trackDocScores;
- this.trackMaxScore = trackMaxScore;
// If one of the sort fields needs scores, and if we also track scores, then
// we might call scorer.score() several times per doc so wrapping the scorer
// to cache scores would help
- this.mayNeedScoresTwice = sort.needsScores() && (trackDocScores || trackMaxScore);
+ this.mayNeedScoresTwice = sort.needsScores() && trackDocScores;
this.trackTotalHits = trackTotalHits;
}
@@ -123,7 +118,6 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
final int[] reverseMul = queue.getReverseMul();
final Sort indexSort = context.reader().getMetaData().getSort();
final boolean canEarlyTerminate = trackTotalHits == false &&
- trackMaxScore == false &&
indexSort != null &&
canEarlyTerminate(sort, indexSort);
final int initialTotalHits = totalHits;
@@ -133,12 +127,6 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
@Override
public void collect(int doc) throws IOException {
float score = Float.NaN;
- if (trackMaxScore) {
- score = scorer.score();
- if (score > maxScore) {
- maxScore = score;
- }
- }
++totalHits;
if (queueFull) {
@@ -158,7 +146,7 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
}
}
- if (trackDocScores && !trackMaxScore) {
+ if (trackDocScores) {
score = scorer.score();
}
@@ -170,7 +158,7 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
// Startup transient: queue hasn't gathered numHits yet
final int slot = totalHits - 1;
- if (trackDocScores && !trackMaxScore) {
+ if (trackDocScores) {
score = scorer.score();
}
@@ -197,27 +185,20 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
int collectedHits;
final FieldValueHitQueue<Entry> queue;
final boolean trackDocScores;
- final boolean trackMaxScore;
final FieldDoc after;
final boolean mayNeedScoresTwice;
final boolean trackTotalHits;
public PagingFieldCollector(Sort sort, FieldValueHitQueue<Entry> queue, FieldDoc after, int numHits, boolean fillFields,
- boolean trackDocScores, boolean trackMaxScore, boolean trackTotalHits) {
- super(queue, numHits, fillFields, trackDocScores || trackMaxScore || sort.needsScores());
+ boolean trackDocScores, boolean trackTotalHits) {
+ super(queue, numHits, fillFields, trackDocScores || sort.needsScores());
this.sort = sort;
this.queue = queue;
this.trackDocScores = trackDocScores;
- this.trackMaxScore = trackMaxScore;
this.after = after;
- this.mayNeedScoresTwice = sort.needsScores() && (trackDocScores || trackMaxScore);
+ this.mayNeedScoresTwice = sort.needsScores() && trackDocScores;
this.trackTotalHits = trackTotalHits;
- // Must set maxScore to NEG_INF, or otherwise Math.max always returns NaN.
- if (trackMaxScore) {
- maxScore = Float.NEGATIVE_INFINITY;
- }
-
FieldComparator<?>[] comparators = queue.comparators;
// Tell all comparators their top value:
for(int i=0;i<comparators.length;i++) {
@@ -233,7 +214,6 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
final int afterDoc = after.doc - docBase;
final Sort indexSort = context.reader().getMetaData().getSort();
final boolean canEarlyTerminate = trackTotalHits == false &&
- trackMaxScore == false &&
indexSort != null &&
canEarlyTerminate(sort, indexSort);
final int initialTotalHits = totalHits;
@@ -246,12 +226,6 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
totalHits++;
float score = Float.NaN;
- if (trackMaxScore) {
- score = scorer.score();
- if (score > maxScore) {
- maxScore = score;
- }
- }
if (queueFull) {
// Fastmatch: return if this hit is no better than
@@ -283,7 +257,7 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
comparator.copy(bottom.slot, doc);
// Compute score only if it is competitive.
- if (trackDocScores && !trackMaxScore) {
+ if (trackDocScores) {
score = scorer.score();
}
updateBottom(doc, score);
@@ -299,7 +273,7 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
comparator.copy(slot, doc);
// Compute score only if it is competitive.
- if (trackDocScores && !trackMaxScore) {
+ if (trackDocScores) {
score = scorer.score();
}
bottom = pq.add(new Entry(slot, docBase + doc, score));
@@ -318,12 +292,6 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
private final boolean fillFields;
- /*
- * Stores the maximum score value encountered, needed for normalizing. If
- * document scores are not tracked, this value is initialized to NaN.
- */
- float maxScore = Float.NaN;
-
final int numHits;
FieldValueHitQueue.Entry bottom = null;
boolean queueFull;
@@ -370,13 +338,6 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
* it incurs the score computation on each competitive result.
* Therefore if document scores are not required by the application,
* it is recommended to set it to false.
- * @param trackMaxScore
- * specifies whether the query's maxScore should be tracked and set
- * on the resulting {@link TopDocs}. Note that if set to false,
- * {@link TopDocs#getMaxScore()} returns Float.NaN. Setting this to
- * true affects performance as it incurs the score computation on
- * each result. Also, setting this true automatically sets
- * <code>trackDocScores</code> to true as well.
* @param trackTotalHits
* specifies whether the total number of hits should be tracked. If
* set to false, the value of {@link TopFieldDocs#totalHits} will be
@@ -385,8 +346,8 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
* the sort criteria.
*/
public static TopFieldCollector create(Sort sort, int numHits,
- boolean fillFields, boolean trackDocScores, boolean trackMaxScore, boolean trackTotalHits) {
- return create(sort, numHits, null, fillFields, trackDocScores, trackMaxScore, trackTotalHits);
+ boolean fillFields, boolean trackDocScores, boolean trackTotalHits) {
+ return create(sort, numHits, null, fillFields, trackDocScores, trackTotalHits);
}
/**
@@ -413,12 +374,6 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
* it incurs the score computation on each competitive result.
* Therefore if document scores are not required by the application,
* it is recommended to set it to false.
- * @param trackMaxScore
- * specifies whether the query's maxScore should be tracked and set
- * on the resulting {@link TopDocs}. Note that if set to false,
- * {@link TopDocs#getMaxScore()} returns Float.NaN. Setting this to
- * true affects performance as it incurs the score computation on
- * each result. Also, setting this true automatically sets
* <code>trackDocScores</code> to true as well.
* @param trackTotalHits
* specifies whether the total number of hits should be tracked. If
@@ -428,7 +383,7 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
* the sort criteria.
*/
public static TopFieldCollector create(Sort sort, int numHits, FieldDoc after,
- boolean fillFields, boolean trackDocScores, boolean trackMaxScore, boolean trackTotalHits) {
+ boolean fillFields, boolean trackDocScores, boolean trackTotalHits) {
if (sort.fields.length == 0) {
throw new IllegalArgumentException("Sort must contain at least one field");
@@ -441,7 +396,7 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
FieldValueHitQueue<Entry> queue = FieldValueHitQueue.create(sort.fields, numHits);
if (after == null) {
- return new SimpleFieldCollector(sort, queue, numHits, fillFields, trackDocScores, trackMaxScore, trackTotalHits);
+ return new SimpleFieldCollector(sort, queue, numHits, fillFields, trackDocScores, trackTotalHits);
} else {
if (after.fields == null) {
throw new IllegalArgumentException("after.fields wasn't set; you must pass fillFields=true for the previous search");
@@ -451,7 +406,7 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
throw new IllegalArgumentException("after.fields has " + after.fields.length + " values but sort has " + sort.getSort().length);
}
- return new PagingFieldCollector(sort, queue, after, numHits, fillFields, trackDocScores, trackMaxScore, trackTotalHits);
+ return new PagingFieldCollector(sort, queue, after, numHits, fillFields, trackDocScores, trackTotalHits);
}
}
@@ -497,12 +452,10 @@ public abstract class TopFieldCollector extends TopDocsCollector<Entry> {
protected TopDocs newTopDocs(ScoreDoc[] results, int start) {
if (results == null) {
results = EMPTY_SCOREDOCS;
- // Set maxScore to NaN, in case this is a maxScore tracking collector.
- maxScore = Float.NaN;
}
// If this is a maxScoring tracking collector and there were no results,
- return new TopFieldDocs(totalHits, results, ((FieldValueHitQueue<Entry>) pq).getFields(), maxScore);
+ return new TopFieldDocs(totalHits, results, ((FieldValueHitQueue<Entry>) pq).getFields());
}
@Override
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/java/org/apache/lucene/search/TopFieldDocs.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/TopFieldDocs.java b/lucene/core/src/java/org/apache/lucene/search/TopFieldDocs.java
index 52a51b7..95c7dee 100644
--- a/lucene/core/src/java/org/apache/lucene/search/TopFieldDocs.java
+++ b/lucene/core/src/java/org/apache/lucene/search/TopFieldDocs.java
@@ -30,10 +30,9 @@ public class TopFieldDocs extends TopDocs {
* @param totalHits Total number of hits for the query.
* @param scoreDocs The top hits for the query.
* @param fields The sort criteria used to find the top hits.
- * @param maxScore The maximum score encountered.
*/
- public TopFieldDocs (long totalHits, ScoreDoc[] scoreDocs, SortField[] fields, float maxScore) {
- super (totalHits, scoreDocs, maxScore);
+ public TopFieldDocs (long totalHits, ScoreDoc[] scoreDocs, SortField[] fields) {
+ super (totalHits, scoreDocs);
this.fields = fields;
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/java/org/apache/lucene/search/TopScoreDocCollector.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/TopScoreDocCollector.java b/lucene/core/src/java/org/apache/lucene/search/TopScoreDocCollector.java
index afae1fc..a319de7 100644
--- a/lucene/core/src/java/org/apache/lucene/search/TopScoreDocCollector.java
+++ b/lucene/core/src/java/org/apache/lucene/search/TopScoreDocCollector.java
@@ -148,7 +148,7 @@ public abstract class TopScoreDocCollector extends TopDocsCollector<ScoreDoc> {
@Override
protected TopDocs newTopDocs(ScoreDoc[] results, int start) {
- return results == null ? new TopDocs(totalHits, new ScoreDoc[0], Float.NaN) : new TopDocs(totalHits, results);
+ return results == null ? new TopDocs(totalHits, new ScoreDoc[0]) : new TopDocs(totalHits, results);
}
@Override
@@ -240,19 +240,7 @@ public abstract class TopScoreDocCollector extends TopDocsCollector<ScoreDoc> {
return EMPTY_TOPDOCS;
}
- // We need to compute maxScore in order to set it in TopDocs. If start == 0,
- // it means the largest element is already in results, use its score as
- // maxScore. Otherwise pop everything else, until the largest element is
- // extracted and use its score as maxScore.
- float maxScore = Float.NaN;
- if (start == 0) {
- maxScore = results[0].score;
- } else {
- for (int i = pq.size(); i > 1; i--) { pq.pop(); }
- maxScore = pq.pop().score;
- }
-
- return new TopDocs(totalHits, results, maxScore);
+ return new TopDocs(totalHits, results);
}
@Override
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/test/org/apache/lucene/index/TestIndexSorting.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexSorting.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexSorting.java
index 3679d20..9f12ca2 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexSorting.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexSorting.java
@@ -2324,11 +2324,11 @@ public class TestIndexSorting extends LuceneTestCase {
System.out.println("TEST: iter=" + iter + " numHits=" + numHits);
}
- TopFieldCollector c1 = TopFieldCollector.create(sort, numHits, true, true, true, true);
+ TopFieldCollector c1 = TopFieldCollector.create(sort, numHits, true, true, true);
s1.search(new MatchAllDocsQuery(), c1);
TopDocs hits1 = c1.topDocs();
- TopFieldCollector c2 = TopFieldCollector.create(sort, numHits, true, true, true, false);
+ TopFieldCollector c2 = TopFieldCollector.create(sort, numHits, true, true, false);
s2.search(new MatchAllDocsQuery(), c2);
TopDocs hits2 = c2.topDocs();
@@ -2344,7 +2344,6 @@ public class TestIndexSorting extends LuceneTestCase {
}
}
- assertTrue(hits2.totalHits <= hits1.totalHits);
assertEquals(hits2.scoreDocs.length, hits1.scoreDocs.length);
for(int i=0;i<hits2.scoreDocs.length;i++) {
ScoreDoc hit1 = hits1.scoreDocs[i];
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java b/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java
index 66b895a..7522cd0 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java
@@ -386,10 +386,10 @@ public class TestBoolean2 extends LuceneTestCase {
}
// check diff (randomized) scorers (from AssertingSearcher) produce the same results
- TopFieldCollector collector = TopFieldCollector.create(sort, 1000, false, true, true, false);
+ TopFieldCollector collector = TopFieldCollector.create(sort, 1000, false, true, false);
searcher.search(q1, collector);
ScoreDoc[] hits1 = collector.topDocs().scoreDocs;
- collector = TopFieldCollector.create(sort, 1000, false, true, true, false);
+ collector = TopFieldCollector.create(sort, 1000, false, true, false);
searcher.search(q1, collector);
ScoreDoc[] hits2 = collector.topDocs().scoreDocs;
tot+=hits2.length;
@@ -402,10 +402,10 @@ public class TestBoolean2 extends LuceneTestCase {
assertEquals(mulFactor*collector.totalHits + NUM_EXTRA_DOCS/2, hits4.totalHits);
// test diff (randomized) scorers produce the same results on bigSearcher as well
- collector = TopFieldCollector.create(sort, 1000 * mulFactor, false, true, true, false);
+ collector = TopFieldCollector.create(sort, 1000 * mulFactor, false, true, false);
bigSearcher.search(q1, collector);
hits1 = collector.topDocs().scoreDocs;
- collector = TopFieldCollector.create(sort, 1000 * mulFactor, false, true, true, false);
+ collector = TopFieldCollector.create(sort, 1000 * mulFactor, false, true, false);
bigSearcher.search(q1, collector);
hits2 = collector.topDocs().scoreDocs;
CheckHits.checkEqual(q1, hits1, hits2);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/test/org/apache/lucene/search/TestDoubleValuesSource.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestDoubleValuesSource.java b/lucene/core/src/test/org/apache/lucene/search/TestDoubleValuesSource.java
index 49b0e11..9806add 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestDoubleValuesSource.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestDoubleValuesSource.java
@@ -163,9 +163,9 @@ public class TestDoubleValuesSource extends LuceneTestCase {
void checkSorts(Query query, Sort sort) throws Exception {
int size = TestUtil.nextInt(random(), 1, searcher.getIndexReader().maxDoc() / 5);
- TopDocs expected = searcher.search(query, size, sort, random().nextBoolean(), random().nextBoolean());
+ TopDocs expected = searcher.search(query, size, sort, random().nextBoolean());
Sort mutatedSort = convertSortToSortable(sort);
- TopDocs actual = searcher.search(query, size, mutatedSort, random().nextBoolean(), random().nextBoolean());
+ TopDocs actual = searcher.search(query, size, mutatedSort, random().nextBoolean());
CheckHits.checkEqual(query, expected.scoreDocs, actual.scoreDocs);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java b/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java
index 3178c35..bc849e9 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java
@@ -86,7 +86,7 @@ public class TestElevationComparator extends LuceneTestCase {
new SortField(null, SortField.Type.SCORE, reversed)
);
- TopDocsCollector<Entry> topCollector = TopFieldCollector.create(sort, 50, false, true, true, true);
+ TopDocsCollector<Entry> topCollector = TopFieldCollector.create(sort, 50, false, true, true);
searcher.search(newq.build(), topCollector);
TopDocs topDocs = topCollector.topDocs(0, 10);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/test/org/apache/lucene/search/TestIndexSearcher.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestIndexSearcher.java b/lucene/core/src/test/org/apache/lucene/search/TestIndexSearcher.java
index 206ee86..37f90de 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestIndexSearcher.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestIndexSearcher.java
@@ -100,15 +100,11 @@ public class TestIndexSearcher extends LuceneTestCase {
searcher.searchAfter(after, query, Integer.MAX_VALUE);
if (sort != null) {
searcher.search(query, Integer.MAX_VALUE, sort);
- searcher.search(query, Integer.MAX_VALUE, sort, true, true);
- searcher.search(query, Integer.MAX_VALUE, sort, true, false);
- searcher.search(query, Integer.MAX_VALUE, sort, false, true);
- searcher.search(query, Integer.MAX_VALUE, sort, false, false);
+ searcher.search(query, Integer.MAX_VALUE, sort, true);
+ searcher.search(query, Integer.MAX_VALUE, sort, false);
searcher.searchAfter(after, query, Integer.MAX_VALUE, sort);
- searcher.searchAfter(after, query, Integer.MAX_VALUE, sort, true, true);
- searcher.searchAfter(after, query, Integer.MAX_VALUE, sort, true, false);
- searcher.searchAfter(after, query, Integer.MAX_VALUE, sort, false, true);
- searcher.searchAfter(after, query, Integer.MAX_VALUE, sort, false, false);
+ searcher.searchAfter(after, query, Integer.MAX_VALUE, sort, true);
+ searcher.searchAfter(after, query, Integer.MAX_VALUE, sort, false);
}
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/test/org/apache/lucene/search/TestLongValuesSource.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestLongValuesSource.java b/lucene/core/src/test/org/apache/lucene/search/TestLongValuesSource.java
index 4c77e7e..f33292d 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestLongValuesSource.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestLongValuesSource.java
@@ -136,8 +136,8 @@ public class TestLongValuesSource extends LuceneTestCase {
void checkSorts(Query query, Sort sort) throws Exception {
int size = TestUtil.nextInt(random(), 1, searcher.getIndexReader().maxDoc() / 5);
Sort mutatedSort = convertSortToSortable(sort);
- TopDocs actual = searcher.search(query, size, mutatedSort, random().nextBoolean(), random().nextBoolean());
- TopDocs expected = searcher.search(query, size, sort, random().nextBoolean(), random().nextBoolean());
+ TopDocs actual = searcher.search(query, size, mutatedSort, random().nextBoolean());
+ TopDocs expected = searcher.search(query, size, sort, random().nextBoolean());
CheckHits.checkEqual(query, expected.scoreDocs, actual.scoreDocs);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/test/org/apache/lucene/search/TestSearchAfter.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestSearchAfter.java b/lucene/core/src/test/org/apache/lucene/search/TestSearchAfter.java
index 7017dde..363c974 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestSearchAfter.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestSearchAfter.java
@@ -216,14 +216,13 @@ public class TestSearchAfter extends LuceneTestCase {
if (VERBOSE) {
System.out.println("\nassertQuery " + (iter++) + ": query=" + query + " sort=" + sort + " pageSize=" + pageSize);
}
- final boolean doMaxScore = random().nextBoolean();
final boolean doScores = random().nextBoolean();
if (sort == null) {
all = searcher.search(query, maxDoc);
} else if (sort == Sort.RELEVANCE) {
- all = searcher.search(query, maxDoc, sort, true, doMaxScore);
+ all = searcher.search(query, maxDoc, sort, true);
} else {
- all = searcher.search(query, maxDoc, sort, doScores, doMaxScore);
+ all = searcher.search(query, maxDoc, sort, doScores);
}
if (VERBOSE) {
System.out.println(" all.totalHits=" + all.totalHits);
@@ -246,9 +245,9 @@ public class TestSearchAfter extends LuceneTestCase {
System.out.println(" iter lastBottom=" + lastBottom);
}
if (sort == Sort.RELEVANCE) {
- paged = searcher.searchAfter(lastBottom, query, pageSize, sort, true, doMaxScore);
+ paged = searcher.searchAfter(lastBottom, query, pageSize, sort, true);
} else {
- paged = searcher.searchAfter(lastBottom, query, pageSize, sort, doScores, doMaxScore);
+ paged = searcher.searchAfter(lastBottom, query, pageSize, sort, doScores);
}
}
if (VERBOSE) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/test/org/apache/lucene/search/TestShardSearching.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestShardSearching.java b/lucene/core/src/test/org/apache/lucene/search/TestShardSearching.java
index ebc7062..df34107 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestShardSearching.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestShardSearching.java
@@ -328,12 +328,12 @@ public class TestShardSearching extends ShardSearchingTestBase {
System.out.println(" shard=" + shardID + " maxDoc=" + shardSearchers[shardID].searcher.getIndexReader().maxDoc());
}
*/
- System.out.println(" single searcher: " + hits.totalHits + " totalHits maxScore=" + hits.getMaxScore());
+ System.out.println(" single searcher: " + hits.totalHits);
for(int i=0;i<hits.scoreDocs.length;i++) {
final ScoreDoc sd = hits.scoreDocs[i];
System.out.println(" doc=" + sd.doc + " score=" + sd.score);
}
- System.out.println(" shard searcher: " + shardHits.totalHits + " totalHits maxScore=" + shardHits.getMaxScore());
+ System.out.println(" shard searcher: " + shardHits.totalHits);
for(int i=0;i<shardHits.scoreDocs.length;i++) {
final ScoreDoc sd = shardHits.scoreDocs[i];
System.out.println(" doc=" + sd.doc + " (rebased: " + (sd.doc + base[sd.shardIndex]) + ") score=" + sd.score + " shard=" + sd.shardIndex);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/test/org/apache/lucene/search/TestSortRandom.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestSortRandom.java b/lucene/core/src/test/org/apache/lucene/search/TestSortRandom.java
index 05b016c..a96399e 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestSortRandom.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestSortRandom.java
@@ -146,7 +146,7 @@ public class TestSortRandom extends LuceneTestCase {
}
final int hitCount = TestUtil.nextInt(random, 1, r.maxDoc() + 20);
final RandomQuery f = new RandomQuery(random.nextLong(), random.nextFloat(), docValues);
- hits = s.search(f, hitCount, sort, random.nextBoolean(), random.nextBoolean());
+ hits = s.search(f, hitCount, sort, random.nextBoolean());
if (VERBOSE) {
System.out.println("\nTEST: iter=" + iter + " " + hits.totalHits + " hits; topN=" + hitCount + "; reverse=" + reverse + "; sortMissingLast=" + sortMissingLast + " sort=" + sort);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/test/org/apache/lucene/search/TestSortedNumericSortField.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestSortedNumericSortField.java b/lucene/core/src/test/org/apache/lucene/search/TestSortedNumericSortField.java
index 210ff89..37fb710 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestSortedNumericSortField.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestSortedNumericSortField.java
@@ -36,13 +36,13 @@ public class TestSortedNumericSortField extends LuceneTestCase {
Sort sort = new Sort();
sort.setSort(new SortedNumericSortField("sortednumeric", SortField.Type.LONG));
- TopDocs td = empty.search(query, 10, sort, true, true);
+ TopDocs td = empty.search(query, 10, sort, true);
assertEquals(0, td.totalHits);
// for an empty index, any selector should work
for (SortedNumericSelector.Type v : SortedNumericSelector.Type.values()) {
sort.setSort(new SortedNumericSortField("sortednumeric", SortField.Type.LONG, false, v));
- td = empty.search(query, 10, sort, true, true);
+ td = empty.search(query, 10, sort, true);
assertEquals(0, td.totalHits);
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/test/org/apache/lucene/search/TestSortedSetSortField.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestSortedSetSortField.java b/lucene/core/src/test/org/apache/lucene/search/TestSortedSetSortField.java
index 7b4ca27..899e46d 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestSortedSetSortField.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestSortedSetSortField.java
@@ -37,13 +37,13 @@ public class TestSortedSetSortField extends LuceneTestCase {
Sort sort = new Sort();
sort.setSort(new SortedSetSortField("sortedset", false));
- TopDocs td = empty.search(query, 10, sort, true, true);
+ TopDocs td = empty.search(query, 10, sort, true);
assertEquals(0, td.totalHits);
// for an empty index, any selector should work
for (SortedSetSelector.Type v : SortedSetSelector.Type.values()) {
sort.setSort(new SortedSetSortField("sortedset", false, v));
- td = empty.search(query, 10, sort, true, true);
+ td = empty.search(query, 10, sort, true);
assertEquals(0, td.totalHits);
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/test/org/apache/lucene/search/TestTopDocsCollector.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestTopDocsCollector.java b/lucene/core/src/test/org/apache/lucene/search/TestTopDocsCollector.java
index 17c5f85..4cf36ef 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestTopDocsCollector.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestTopDocsCollector.java
@@ -46,15 +46,7 @@ public class TestTopDocsCollector extends LuceneTestCase {
return EMPTY_TOPDOCS;
}
- float maxScore = Float.NaN;
- if (start == 0) {
- maxScore = results[0].score;
- } else {
- for (int i = pq.size(); i > 1; i--) { pq.pop(); }
- maxScore = pq.pop().score;
- }
-
- return new TopDocs(totalHits, results, maxScore);
+ return new TopDocs(totalHits, results);
}
@Override
@@ -188,18 +180,6 @@ public class TestTopDocsCollector extends LuceneTestCase {
assertEquals(5, tdc.topDocs(10).scoreDocs.length);
}
- public void testMaxScore() throws Exception {
- // ask for all results
- TopDocsCollector<ScoreDoc> tdc = doSearch(15);
- TopDocs td = tdc.topDocs();
- assertEquals(MAX_SCORE, td.getMaxScore(), 0f);
-
- // ask for 5 last results
- tdc = doSearch(15);
- td = tdc.topDocs(10);
- assertEquals(MAX_SCORE, td.getMaxScore(), 0f);
- }
-
// This does not test the PQ's correctness, but whether topDocs()
// implementations return the results in decreasing score order.
public void testResultsOrder() throws Exception {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/test/org/apache/lucene/search/TestTopDocsMerge.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestTopDocsMerge.java b/lucene/core/src/test/org/apache/lucene/search/TestTopDocsMerge.java
index 0173cf9..65de8f5 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestTopDocsMerge.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestTopDocsMerge.java
@@ -275,13 +275,13 @@ public class TestTopDocsMerge extends LuceneTestCase {
tempTopHits.scoreDocs = newScoreDocs;
topHits = tempTopHits;
} else {
- topHits = new TopDocs(tempTopHits.totalHits, new ScoreDoc[0], tempTopHits.getMaxScore());
+ topHits = new TopDocs(tempTopHits.totalHits, new ScoreDoc[0]);
}
} else {
topHits = searcher.search(query, numHits);
}
} else {
- final TopFieldCollector c = TopFieldCollector.create(sort, numHits, true, true, true, true);
+ final TopFieldCollector c = TopFieldCollector.create(sort, numHits, true, true, true);
searcher.search(query, c);
if (useFrom) {
from = TestUtil.nextInt(random(), 0, numHits - 1);
@@ -295,7 +295,7 @@ public class TestTopDocsMerge extends LuceneTestCase {
tempTopHits.scoreDocs = newScoreDocs;
topHits = tempTopHits;
} else {
- topHits = new TopDocs(tempTopHits.totalHits, new ScoreDoc[0], tempTopHits.getMaxScore());
+ topHits = new TopDocs(tempTopHits.totalHits, new ScoreDoc[0]);
}
} else {
topHits = c.topDocs(0, numHits);
@@ -306,7 +306,7 @@ public class TestTopDocsMerge extends LuceneTestCase {
if (useFrom) {
System.out.println("from=" + from + " size=" + size);
}
- System.out.println(" top search: " + topHits.totalHits + " totalHits; hits=" + (topHits.scoreDocs == null ? "null" : topHits.scoreDocs.length + " maxScore=" + topHits.getMaxScore()));
+ System.out.println(" top search: " + topHits.totalHits + " totalHits; hits=" + (topHits.scoreDocs == null ? "null" : topHits.scoreDocs.length));
if (topHits.scoreDocs != null) {
for(int hitIDX=0;hitIDX<topHits.scoreDocs.length;hitIDX++) {
final ScoreDoc sd = topHits.scoreDocs[hitIDX];
@@ -330,7 +330,7 @@ public class TestTopDocsMerge extends LuceneTestCase {
if (sort == null) {
subHits = subSearcher.search(w, numHits);
} else {
- final TopFieldCollector c = TopFieldCollector.create(sort, numHits, true, true, true, true);
+ final TopFieldCollector c = TopFieldCollector.create(sort, numHits, true, true, true);
subSearcher.search(w, c);
subHits = c.topDocs(0, numHits);
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/test/org/apache/lucene/search/TestTopFieldCollector.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestTopFieldCollector.java b/lucene/core/src/test/org/apache/lucene/search/TestTopFieldCollector.java
index f12e910..a7f4cda 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestTopFieldCollector.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestTopFieldCollector.java
@@ -71,7 +71,7 @@ public class TestTopFieldCollector extends LuceneTestCase {
for(int i = 0; i < sort.length; i++) {
Query q = new MatchAllDocsQuery();
TopDocsCollector<Entry> tdc = TopFieldCollector.create(sort[i], 10, false,
- false, false, true);
+ false, true);
is.search(q, tdc);
@@ -90,7 +90,7 @@ public class TestTopFieldCollector extends LuceneTestCase {
for(int i = 0; i < sort.length; i++) {
Query q = new MatchAllDocsQuery();
TopDocsCollector<Entry> tdc = TopFieldCollector.create(sort[i], 10, true, false,
- false, true);
+ true);
is.search(q, tdc);
@@ -99,7 +99,6 @@ public class TestTopFieldCollector extends LuceneTestCase {
for(int j = 0; j < sd.length; j++) {
assertTrue(Float.isNaN(sd[j].score));
}
- assertTrue(Float.isNaN(td.getMaxScore()));
}
}
@@ -111,10 +110,10 @@ public class TestTopFieldCollector extends LuceneTestCase {
// the index is not sorted
TopDocsCollector<Entry> tdc;
if (i % 2 == 0) {
- tdc = TopFieldCollector.create(sort, 10, true, false, false, false);
+ tdc = TopFieldCollector.create(sort, 10, true, false, false);
} else {
FieldDoc fieldDoc = new FieldDoc(1, Float.NaN, new Object[] { 1 });
- tdc = TopFieldCollector.create(sort, 10, fieldDoc, true, false, false, false);
+ tdc = TopFieldCollector.create(sort, 10, fieldDoc, true, false, false);
}
is.search(q, tdc);
@@ -124,59 +123,17 @@ public class TestTopFieldCollector extends LuceneTestCase {
for(int j = 0; j < sd.length; j++) {
assertTrue(Float.isNaN(sd[j].score));
}
- assertTrue(Float.isNaN(td.getMaxScore()));
- }
- }
-
- public void testSortWithScoreNoMaxScoreTracking() throws Exception {
-
- // Two Sort criteria to instantiate the multi/single comparators.
- Sort[] sort = new Sort[] {new Sort(SortField.FIELD_DOC), new Sort() };
- for(int i = 0; i < sort.length; i++) {
- Query q = new MatchAllDocsQuery();
- TopDocsCollector<Entry> tdc = TopFieldCollector.create(sort[i], 10, true, true,
- false, true);
-
- is.search(q, tdc);
-
- TopDocs td = tdc.topDocs();
- ScoreDoc[] sd = td.scoreDocs;
- for(int j = 0; j < sd.length; j++) {
- assertTrue(!Float.isNaN(sd[j].score));
- }
- assertTrue(Float.isNaN(td.getMaxScore()));
- }
- }
-
- // MultiComparatorScoringNoMaxScoreCollector
- public void testSortWithScoreNoMaxScoreTrackingMulti() throws Exception {
-
- // Two Sort criteria to instantiate the multi/single comparators.
- Sort[] sort = new Sort[] {new Sort(SortField.FIELD_DOC, SortField.FIELD_SCORE) };
- for(int i = 0; i < sort.length; i++) {
- Query q = new MatchAllDocsQuery();
- TopDocsCollector<Entry> tdc = TopFieldCollector.create(sort[i], 10, true, true,
- false, true);
-
- is.search(q, tdc);
-
- TopDocs td = tdc.topDocs();
- ScoreDoc[] sd = td.scoreDocs;
- for(int j = 0; j < sd.length; j++) {
- assertTrue(!Float.isNaN(sd[j].score));
- }
- assertTrue(Float.isNaN(td.getMaxScore()));
}
}
- public void testSortWithScoreAndMaxScoreTracking() throws Exception {
+ public void testSortWithScoreTracking() throws Exception {
// Two Sort criteria to instantiate the multi/single comparators.
Sort[] sort = new Sort[] {new Sort(SortField.FIELD_DOC), new Sort() };
for(int i = 0; i < sort.length; i++) {
Query q = new MatchAllDocsQuery();
TopDocsCollector<Entry> tdc = TopFieldCollector.create(sort[i], 10, true, true,
- true, true);
+ true);
is.search(q, tdc);
@@ -185,19 +142,17 @@ public class TestTopFieldCollector extends LuceneTestCase {
for(int j = 0; j < sd.length; j++) {
assertTrue(!Float.isNaN(sd[j].score));
}
- assertTrue(!Float.isNaN(td.getMaxScore()));
}
}
- public void testSortWithScoreAndMaxScoreTrackingNoResults() throws Exception {
+ public void testSortWithScoreTrackingNoResults() throws Exception {
// Two Sort criteria to instantiate the multi/single comparators.
Sort[] sort = new Sort[] {new Sort(SortField.FIELD_DOC), new Sort() };
for(int i = 0; i < sort.length; i++) {
- TopDocsCollector<Entry> tdc = TopFieldCollector.create(sort[i], 10, true, true, true, true);
+ TopDocsCollector<Entry> tdc = TopFieldCollector.create(sort[i], 10, true, true, true);
TopDocs td = tdc.topDocs();
assertEquals(0, td.totalHits);
- assertTrue(Float.isNaN(td.getMaxScore()));
}
}
@@ -228,55 +183,53 @@ public class TestTopFieldCollector extends LuceneTestCase {
final IndexSearcher searcher = new IndexSearcher(reader);
for (Sort sort : new Sort[] {new Sort(SortField.FIELD_SCORE), new Sort(new SortField("f", SortField.Type.SCORE))}) {
for (boolean doDocScores : new boolean[] {false, true}) {
- for (boolean doMaxScore : new boolean[] {false, true}) {
- final TopFieldCollector topCollector = TopFieldCollector.create(sort, TestUtil.nextInt(random(), 1, 2), true, doDocScores, doMaxScore, true);
- final Collector assertingCollector = new Collector() {
- @Override
- public LeafCollector getLeafCollector(LeafReaderContext context) throws IOException {
- final LeafCollector in = topCollector.getLeafCollector(context);
- return new FilterLeafCollector(in) {
- @Override
- public void setScorer(final Scorer scorer) throws IOException {
- Scorer s = new Scorer(null) {
-
- int lastComputedDoc = -1;
-
- @Override
- public float score() throws IOException {
- if (lastComputedDoc == docID()) {
- throw new AssertionError("Score computed twice on " + docID());
- }
- lastComputedDoc = docID();
- return scorer.score();
- }
-
- @Override
- public float getMaxScore(int upTo) throws IOException {
- return scorer.getMaxScore(upTo);
- }
-
- @Override
- public int docID() {
- return scorer.docID();
- }
-
- @Override
- public DocIdSetIterator iterator() {
- return scorer.iterator();
+ final TopFieldCollector topCollector = TopFieldCollector.create(sort, TestUtil.nextInt(random(), 1, 2), true, doDocScores, true);
+ final Collector assertingCollector = new Collector() {
+ @Override
+ public LeafCollector getLeafCollector(LeafReaderContext context) throws IOException {
+ final LeafCollector in = topCollector.getLeafCollector(context);
+ return new FilterLeafCollector(in) {
+ @Override
+ public void setScorer(final Scorer scorer) throws IOException {
+ Scorer s = new Scorer(null) {
+
+ int lastComputedDoc = -1;
+
+ @Override
+ public float score() throws IOException {
+ if (lastComputedDoc == docID()) {
+ throw new AssertionError("Score computed twice on " + docID());
}
-
- };
- super.setScorer(s);
- }
- };
- }
- @Override
- public ScoreMode scoreMode() {
- return topCollector.scoreMode();
- }
- };
- searcher.search(query, assertingCollector);
- }
+ lastComputedDoc = docID();
+ return scorer.score();
+ }
+
+ @Override
+ public float getMaxScore(int upTo) throws IOException {
+ return scorer.getMaxScore(upTo);
+ }
+
+ @Override
+ public int docID() {
+ return scorer.docID();
+ }
+
+ @Override
+ public DocIdSetIterator iterator() {
+ return scorer.iterator();
+ }
+
+ };
+ super.setScorer(s);
+ }
+ };
+ }
+ @Override
+ public ScoreMode scoreMode() {
+ return topCollector.scoreMode();
+ }
+ };
+ searcher.search(query, assertingCollector);
}
}
reader.close();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/core/src/test/org/apache/lucene/search/TestTopFieldCollectorEarlyTermination.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestTopFieldCollectorEarlyTermination.java b/lucene/core/src/test/org/apache/lucene/search/TestTopFieldCollectorEarlyTermination.java
index df02cb3..2fd99d9 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestTopFieldCollectorEarlyTermination.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestTopFieldCollectorEarlyTermination.java
@@ -138,9 +138,8 @@ public class TestTopFieldCollectorEarlyTermination extends LuceneTestCase {
}
final boolean fillFields = random().nextBoolean();
final boolean trackDocScores = random().nextBoolean();
- final boolean trackMaxScore = random().nextBoolean();
- final TopFieldCollector collector1 = TopFieldCollector.create(sort, numHits, after, fillFields, trackDocScores, trackMaxScore, true);
- final TopFieldCollector collector2 = TopFieldCollector.create(sort, numHits, after, fillFields, trackDocScores, trackMaxScore, false);
+ final TopFieldCollector collector1 = TopFieldCollector.create(sort, numHits, after, fillFields, trackDocScores, true);
+ final TopFieldCollector collector2 = TopFieldCollector.create(sort, numHits, after, fillFields, trackDocScores, false);
final Query query;
if (random().nextBoolean()) {
@@ -154,7 +153,7 @@ public class TestTopFieldCollectorEarlyTermination extends LuceneTestCase {
TopDocs td2 = collector2.topDocs();
assertFalse(collector1.isEarlyTerminated());
- if (trackMaxScore == false && paging == false && maxSegmentSize > numHits && query instanceof MatchAllDocsQuery) {
+ if (paging == false && maxSegmentSize > numHits && query instanceof MatchAllDocsQuery) {
// Make sure that we sometimes early terminate
assertTrue(collector2.isEarlyTerminated());
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java
----------------------------------------------------------------------
diff --git a/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java b/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java
index b84b7ad..5edd3ee 100644
--- a/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java
+++ b/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java
@@ -114,7 +114,7 @@ public class TestDemoExpressions extends LuceneTestCase {
Sort sort = new Sort(expr.getSortField(bindings, true));
Query query = new TermQuery(new Term("body", "contents"));
- TopFieldDocs td = searcher.search(query, 3, sort, true, true);
+ TopFieldDocs td = searcher.search(query, 3, sort, true);
for (int i = 0; i < 3; i++) {
FieldDoc d = (FieldDoc) td.scoreDocs[i];
float expected = (float) Math.sqrt(d.score);
@@ -132,7 +132,7 @@ public class TestDemoExpressions extends LuceneTestCase {
Sort sort = new Sort(expr.getSortField(bindings, true));
Query query = new TermQuery(new Term("body", "contents"));
- TopFieldDocs td = searcher.search(query, 3, sort, true, true);
+ TopFieldDocs td = searcher.search(query, 3, sort, true);
for (int i = 0; i < 3; i++) {
FieldDoc d = (FieldDoc) td.scoreDocs[i];
float expected = 2*d.score;
@@ -151,7 +151,7 @@ public class TestDemoExpressions extends LuceneTestCase {
Sort sort = new Sort(expr.getSortField(bindings, true));
Query query = new TermQuery(new Term("body", "contents"));
- TopFieldDocs td = searcher.search(query, 3, sort, true, true);
+ TopFieldDocs td = searcher.search(query, 3, sort, true);
for (int i = 0; i < 3; i++) {
FieldDoc d = (FieldDoc) td.scoreDocs[i];
float expected = 2*d.score;
@@ -171,7 +171,7 @@ public class TestDemoExpressions extends LuceneTestCase {
Sort sort = new Sort(expr2.getSortField(bindings, true));
Query query = new TermQuery(new Term("body", "contents"));
- TopFieldDocs td = searcher.search(query, 3, sort, true, true);
+ TopFieldDocs td = searcher.search(query, 3, sort, true);
for (int i = 0; i < 3; i++) {
FieldDoc d = (FieldDoc) td.scoreDocs[i];
float expected = 2*d.score;
@@ -203,7 +203,7 @@ public class TestDemoExpressions extends LuceneTestCase {
Expression expr = JavascriptCompiler.compile(sb.toString());
Sort sort = new Sort(expr.getSortField(bindings, true));
Query query = new TermQuery(new Term("body", "contents"));
- TopFieldDocs td = searcher.search(query, 3, sort, true, true);
+ TopFieldDocs td = searcher.search(query, 3, sort, true);
for (int i = 0; i < 3; i++) {
FieldDoc d = (FieldDoc) td.scoreDocs[i];
float expected = n*d.score;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/expressions/src/test/org/apache/lucene/expressions/TestExpressionSorts.java
----------------------------------------------------------------------
diff --git a/lucene/expressions/src/test/org/apache/lucene/expressions/TestExpressionSorts.java b/lucene/expressions/src/test/org/apache/lucene/expressions/TestExpressionSorts.java
index fe5317e..e61c1a3 100644
--- a/lucene/expressions/src/test/org/apache/lucene/expressions/TestExpressionSorts.java
+++ b/lucene/expressions/src/test/org/apache/lucene/expressions/TestExpressionSorts.java
@@ -116,7 +116,7 @@ public class TestExpressionSorts extends LuceneTestCase {
void assertQuery(Query query, Sort sort) throws Exception {
int size = TestUtil.nextInt(random(), 1, searcher.getIndexReader().maxDoc() / 5);
- TopDocs expected = searcher.search(query, size, sort, random().nextBoolean(), random().nextBoolean());
+ TopDocs expected = searcher.search(query, size, sort, random().nextBoolean());
// make our actual sort, mutating original by replacing some of the
// sortfields with equivalent expressions
@@ -137,7 +137,7 @@ public class TestExpressionSorts extends LuceneTestCase {
}
Sort mutatedSort = new Sort(mutated);
- TopDocs actual = searcher.search(query, size, mutatedSort, random().nextBoolean(), random().nextBoolean());
+ TopDocs actual = searcher.search(query, size, mutatedSort, random().nextBoolean());
CheckHits.checkEqual(query, expected.scoreDocs, actual.scoreDocs);
if (size < actual.totalHits) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/facet/src/java/org/apache/lucene/facet/DrillSideways.java
----------------------------------------------------------------------
diff --git a/lucene/facet/src/java/org/apache/lucene/facet/DrillSideways.java b/lucene/facet/src/java/org/apache/lucene/facet/DrillSideways.java
index 2e6f8fa..9badc8c 100644
--- a/lucene/facet/src/java/org/apache/lucene/facet/DrillSideways.java
+++ b/lucene/facet/src/java/org/apache/lucene/facet/DrillSideways.java
@@ -223,7 +223,7 @@ public class DrillSideways {
* drill down and sideways counts.
*/
public DrillSidewaysResult search(DrillDownQuery query, Query filter, FieldDoc after, int topN, Sort sort,
- boolean doDocScores, boolean doMaxScore) throws IOException {
+ boolean doDocScores) throws IOException {
if (filter != null) {
query = new DrillDownQuery(config, filter, query);
}
@@ -241,7 +241,7 @@ public class DrillSideways {
@Override
public TopFieldCollector newCollector() throws IOException {
- return TopFieldCollector.create(sort, fTopN, after, true, doDocScores, doMaxScore, true);
+ return TopFieldCollector.create(sort, fTopN, after, true, doDocScores, true);
}
@Override
@@ -260,7 +260,7 @@ public class DrillSideways {
} else {
final TopFieldCollector hitCollector =
- TopFieldCollector.create(sort, fTopN, after, true, doDocScores, doMaxScore, true);
+ TopFieldCollector.create(sort, fTopN, after, true, doDocScores, true);
DrillSidewaysResult r = search(query, hitCollector);
return new DrillSidewaysResult(r.facets, hitCollector.topDocs());
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/facet/src/java/org/apache/lucene/facet/FacetsCollector.java
----------------------------------------------------------------------
diff --git a/lucene/facet/src/java/org/apache/lucene/facet/FacetsCollector.java b/lucene/facet/src/java/org/apache/lucene/facet/FacetsCollector.java
index 370f132..8c32f8c 100644
--- a/lucene/facet/src/java/org/apache/lucene/facet/FacetsCollector.java
+++ b/lucene/facet/src/java/org/apache/lucene/facet/FacetsCollector.java
@@ -156,7 +156,7 @@ public class FacetsCollector extends SimpleCollector implements Collector {
/** Utility method, to search and also collect all hits
* into the provided {@link Collector}. */
public static TopDocs search(IndexSearcher searcher, Query q, int n, Collector fc) throws IOException {
- return doSearch(searcher, null, q, n, null, false, false, fc);
+ return doSearch(searcher, null, q, n, null, false, fc);
}
/** Utility method, to search and also collect all hits
@@ -165,22 +165,22 @@ public class FacetsCollector extends SimpleCollector implements Collector {
if (sort == null) {
throw new IllegalArgumentException("sort must not be null");
}
- return (TopFieldDocs) doSearch(searcher, null, q, n, sort, false, false, fc);
+ return (TopFieldDocs) doSearch(searcher, null, q, n, sort, false, fc);
}
/** Utility method, to search and also collect all hits
* into the provided {@link Collector}. */
- public static TopFieldDocs search(IndexSearcher searcher, Query q, int n, Sort sort, boolean doDocScores, boolean doMaxScore, Collector fc) throws IOException {
+ public static TopFieldDocs search(IndexSearcher searcher, Query q, int n, Sort sort, boolean doDocScores, Collector fc) throws IOException {
if (sort == null) {
throw new IllegalArgumentException("sort must not be null");
}
- return (TopFieldDocs) doSearch(searcher, null, q, n, sort, doDocScores, doMaxScore, fc);
+ return (TopFieldDocs) doSearch(searcher, null, q, n, sort, doDocScores, fc);
}
/** Utility method, to search and also collect all hits
* into the provided {@link Collector}. */
public static TopDocs searchAfter(IndexSearcher searcher, ScoreDoc after, Query q, int n, Collector fc) throws IOException {
- return doSearch(searcher, after, q, n, null, false, false, fc);
+ return doSearch(searcher, after, q, n, null, false, fc);
}
/** Utility method, to search and also collect all hits
@@ -189,20 +189,20 @@ public class FacetsCollector extends SimpleCollector implements Collector {
if (sort == null) {
throw new IllegalArgumentException("sort must not be null");
}
- return doSearch(searcher, after, q, n, sort, false, false, fc);
+ return doSearch(searcher, after, q, n, sort, false, fc);
}
/** Utility method, to search and also collect all hits
* into the provided {@link Collector}. */
- public static TopDocs searchAfter(IndexSearcher searcher, ScoreDoc after, Query q, int n, Sort sort, boolean doDocScores, boolean doMaxScore, Collector fc) throws IOException {
+ public static TopDocs searchAfter(IndexSearcher searcher, ScoreDoc after, Query q, int n, Sort sort, boolean doDocScores, Collector fc) throws IOException {
if (sort == null) {
throw new IllegalArgumentException("sort must not be null");
}
- return doSearch(searcher, after, q, n, sort, doDocScores, doMaxScore, fc);
+ return doSearch(searcher, after, q, n, sort, doDocScores, fc);
}
private static TopDocs doSearch(IndexSearcher searcher, ScoreDoc after, Query q, int n, Sort sort,
- boolean doDocScores, boolean doMaxScore, Collector fc) throws IOException {
+ boolean doDocScores, Collector fc) throws IOException {
int limit = searcher.getIndexReader().maxDoc();
if (limit == 0) {
@@ -219,7 +219,7 @@ public class FacetsCollector extends SimpleCollector implements Collector {
if (n==0) {
TotalHitCountCollector totalHitCountCollector = new TotalHitCountCollector();
searcher.search(q, MultiCollector.wrap(totalHitCountCollector, fc));
- topDocs = new TopDocs(totalHitCountCollector.getTotalHits(), new ScoreDoc[0], Float.NaN);
+ topDocs = new TopDocs(totalHitCountCollector.getTotalHits(), new ScoreDoc[0]);
} else {
TopDocsCollector<?> hitsCollector;
if (sort != null) {
@@ -233,7 +233,6 @@ public class FacetsCollector extends SimpleCollector implements Collector {
(FieldDoc) after,
fillFields,
doDocScores,
- doMaxScore,
true); // TODO: can we disable exact hit counts
} else {
hitsCollector = TopScoreDocCollector.create(n, after, true);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/facet/src/test/org/apache/lucene/facet/TestDrillSideways.java
----------------------------------------------------------------------
diff --git a/lucene/facet/src/test/org/apache/lucene/facet/TestDrillSideways.java b/lucene/facet/src/test/org/apache/lucene/facet/TestDrillSideways.java
index c632f3a..45a0aa2 100644
--- a/lucene/facet/src/test/org/apache/lucene/facet/TestDrillSideways.java
+++ b/lucene/facet/src/test/org/apache/lucene/facet/TestDrillSideways.java
@@ -813,7 +813,7 @@ public class TestDrillSideways extends FacetTestCase {
}
// Retrieve all facets:
- DrillSidewaysResult actual = ds.search(ddq, filter, null, numDocs, sort, true, true);
+ DrillSidewaysResult actual = ds.search(ddq, filter, null, numDocs, sort, true);
TopDocs hits = s.search(baseQuery, numDocs);
Map<String, Float> scores = new HashMap<>();
@@ -1145,8 +1145,7 @@ public class TestDrillSideways extends FacetTestCase {
DrillSidewaysResult r = ds.search(ddq, 10); // this used to fail on IllegalArgEx
assertEquals(0, r.hits.totalHits);
- r = ds.search(ddq, null, null, 10, new Sort(new SortField("foo", SortField.Type.INT)), false,
- false); // this used to fail on IllegalArgEx
+ r = ds.search(ddq, null, null, 10, new Sort(new SortField("foo", SortField.Type.INT)), false); // this used to fail on IllegalArgEx
assertEquals(0, r.hits.totalHits);
writer.close();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetSumValueSource.java
----------------------------------------------------------------------
diff --git a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetSumValueSource.java b/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetSumValueSource.java
index 2af9925..5bc8472 100644
--- a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetSumValueSource.java
+++ b/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetSumValueSource.java
@@ -261,7 +261,7 @@ public class TestTaxonomyFacetSumValueSource extends FacetTestCase {
Facets facets = new TaxonomyFacetSumValueSource(taxoReader, config, fc, DoubleValuesSource.SCORES);
- int expected = (int) (td.getMaxScore() * td.totalHits);
+ int expected = (int) (csq.getBoost() * td.totalHits);
assertEquals(expected, facets.getSpecificValue("dim", "a").intValue());
iw.close();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/grouping/src/java/org/apache/lucene/search/grouping/BlockGroupingCollector.java
----------------------------------------------------------------------
diff --git a/lucene/grouping/src/java/org/apache/lucene/search/grouping/BlockGroupingCollector.java b/lucene/grouping/src/java/org/apache/lucene/search/grouping/BlockGroupingCollector.java
index d915eb9..f627adf 100644
--- a/lucene/grouping/src/java/org/apache/lucene/search/grouping/BlockGroupingCollector.java
+++ b/lucene/grouping/src/java/org/apache/lucene/search/grouping/BlockGroupingCollector.java
@@ -306,9 +306,10 @@ public class BlockGroupingCollector extends SimpleCollector {
collector = TopScoreDocCollector.create(maxDocsPerGroup);
} else {
// Sort by fields
- collector = TopFieldCollector.create(withinGroupSort, maxDocsPerGroup, fillSortFields, needsScores, needsScores, true); // TODO: disable exact counts?
+ collector = TopFieldCollector.create(withinGroupSort, maxDocsPerGroup, fillSortFields, needsScores, true); // TODO: disable exact counts?
}
+ float groupMaxScore = needsScores ? Float.NEGATIVE_INFINITY : Float.NaN;
LeafCollector leafCollector = collector.getLeafCollector(og.readerContext);
leafCollector.setScorer(fakeScorer);
for(int docIDX=0;docIDX<og.count;docIDX++) {
@@ -316,6 +317,7 @@ public class BlockGroupingCollector extends SimpleCollector {
fakeScorer.doc = doc;
if (needsScores) {
fakeScorer.score = og.scores[docIDX];
+ groupMaxScore = Math.max(groupMaxScore, fakeScorer.score);
}
leafCollector.collect(doc);
}
@@ -337,12 +339,12 @@ public class BlockGroupingCollector extends SimpleCollector {
// TODO: we could aggregate scores across children
// by Sum/Avg instead of passing NaN:
groups[downTo] = new GroupDocs<>(Float.NaN,
- topDocs.getMaxScore(),
+ groupMaxScore,
og.count,
topDocs.scoreDocs,
null,
groupSortValues);
- maxScore = Math.max(maxScore, topDocs.getMaxScore());
+ maxScore = Math.max(maxScore, groupMaxScore);
}
/*
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/331ccf39/lucene/grouping/src/java/org/apache/lucene/search/grouping/TopGroups.java
----------------------------------------------------------------------
diff --git a/lucene/grouping/src/java/org/apache/lucene/search/grouping/TopGroups.java b/lucene/grouping/src/java/org/apache/lucene/search/grouping/TopGroups.java
index 36ab8d9..c87dd0d 100644
--- a/lucene/grouping/src/java/org/apache/lucene/search/grouping/TopGroups.java
+++ b/lucene/grouping/src/java/org/apache/lucene/search/grouping/TopGroups.java
@@ -161,13 +161,11 @@ public class TopGroups<T> {
if (docSort.equals(Sort.RELEVANCE)) {
shardTopDocs[shardIDX] = new TopDocs(shardGroupDocs.totalHits,
- shardGroupDocs.scoreDocs,
- shardGroupDocs.maxScore);
+ shardGroupDocs.scoreDocs);
} else {
shardTopDocs[shardIDX] = new TopFieldDocs(shardGroupDocs.totalHits,
shardGroupDocs.scoreDocs,
- docSort.getSort(),
- shardGroupDocs.maxScore);
+ docSort.getSort());
}
maxScore = Math.max(maxScore, shardGroupDocs.maxScore);
totalHits += shardGroupDocs.totalHits;