You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ds...@apache.org on 2016/09/11 18:29:33 UTC
lucene-solr:master: SOLR-9494: CollapseQParser's collectors should
override needsScores();
can trigger exceptions Also, field cscore was not needed.
Repository: lucene-solr
Updated Branches:
refs/heads/master 03025e6b8 -> d2fcc3dd7
SOLR-9494: CollapseQParser's collectors should override needsScores(); can trigger exceptions
Also, field cscore was not needed.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/d2fcc3dd
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/d2fcc3dd
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/d2fcc3dd
Branch: refs/heads/master
Commit: d2fcc3dd7102dca1c4161488a34523df8df9880b
Parents: 03025e6
Author: David Smiley <ds...@apache.org>
Authored: Sun Sep 11 14:29:26 2016 -0400
Committer: David Smiley <ds...@apache.org>
Committed: Sun Sep 11 14:29:26 2016 -0400
----------------------------------------------------------------------
solr/CHANGES.txt | 10 ++++++++++
.../solr/search/CollapsingQParserPlugin.java | 18 ++++++++++++------
.../solr/search/TestCollapseQParserPlugin.java | 17 +++++++++++++++++
3 files changed, 39 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d2fcc3dd/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index eda25c9..b1898a6 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -154,6 +154,16 @@ Other Changes
* SOLR-9498: Remove HDFS properties from DIH solrconfig.xml, as started in SOLR-6943 (Alexandre Rafalovitch)
+
+================== 6.2.1 ==================
+
+Bug Fixes
+----------------------
+
+* SOLR-9494: Use of {!collapse} sometimes doesn't correctly return true for Collector.needsScores(), especially when the
+ query was cached. This can cause an exception when 'q' is a SpanQuery or potentially others. (David Smiley)
+
+
================== 6.2.0 ==================
Versions of Major Components
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d2fcc3dd/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
index 896387e..56cde8f 100644
--- a/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
@@ -517,6 +517,8 @@ public class CollapsingQParserPlugin extends QParserPlugin {
}
}
+ @Override public boolean needsScores() { return true; }
+
@Override
protected void doSetNextReader(LeafReaderContext context) throws IOException {
this.contexts[context.ord] = context;
@@ -726,6 +728,8 @@ public class CollapsingQParserPlugin extends QParserPlugin {
}
+ @Override public boolean needsScores() { return true; }
+
@Override
protected void doSetNextReader(LeafReaderContext context) throws IOException {
this.contexts[context.ord] = context;
@@ -909,6 +913,8 @@ public class CollapsingQParserPlugin extends QParserPlugin {
}
}
+ @Override public boolean needsScores() { return needsScores || super.needsScores(); }
+
public void setScorer(Scorer scorer) {
this.collapseStrategy.setScorer(scorer);
}
@@ -1069,6 +1075,8 @@ public class CollapsingQParserPlugin extends QParserPlugin {
}
}
+ @Override public boolean needsScores() { return needsScores || super.needsScores(); }
+
public void setScorer(Scorer scorer) {
this.collapseStrategy.setScorer(scorer);
}
@@ -1686,7 +1694,6 @@ public class CollapsingQParserPlugin extends QParserPlugin {
private float[] ordVals;
private Map rcontext;
private final CollapseScore collapseScore = new CollapseScore();
- private final boolean cscore;
private float score;
public OrdValueSourceStrategy(int maxDoc,
@@ -1714,7 +1721,7 @@ public class CollapsingQParserPlugin extends QParserPlugin {
Arrays.fill(ordVals, Float.MAX_VALUE);
}
- this.cscore = collapseScore.setupIfNeeded(groupHeadSelector, rcontext);
+ collapseScore.setupIfNeeded(groupHeadSelector, rcontext);
if(this.needsScores) {
this.scores = new float[ords.length];
@@ -1735,7 +1742,7 @@ public class CollapsingQParserPlugin extends QParserPlugin {
this.boostDocs.add(globalDoc);
}
- if(needsScores || cscore) {
+ if (needsScores) {
this.score = scorer.score();
this.collapseScore.score = score;
}
@@ -2208,7 +2215,6 @@ public class CollapsingQParserPlugin extends QParserPlugin {
private FunctionValues functionValues;
private Map rcontext;
private final CollapseScore collapseScore = new CollapseScore();
- private final boolean cscore;
private float score;
private int index=-1;
@@ -2240,7 +2246,7 @@ public class CollapsingQParserPlugin extends QParserPlugin {
comp = new MinFloatComp();
}
- this.cscore = collapseScore.setupIfNeeded(groupHeadSelector, rcontext);
+ collapseScore.setupIfNeeded(groupHeadSelector, rcontext);
if(needsScores) {
this.scores = new float[size];
@@ -2263,7 +2269,7 @@ public class CollapsingQParserPlugin extends QParserPlugin {
return;
}
- if(needsScores || cscore) {
+ if (needsScores) {
this.score = scorer.score();
this.collapseScore.score = score;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d2fcc3dd/solr/core/src/test/org/apache/solr/search/TestCollapseQParserPlugin.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/TestCollapseQParserPlugin.java b/solr/core/src/test/org/apache/solr/search/TestCollapseQParserPlugin.java
index 6eca623..7c5fc4a 100644
--- a/solr/core/src/test/org/apache/solr/search/TestCollapseQParserPlugin.java
+++ b/solr/core/src/test/org/apache/solr/search/TestCollapseQParserPlugin.java
@@ -263,6 +263,23 @@ public class TestCollapseQParserPlugin extends SolrTestCaseJ4 {
}
+ @Test // https://issues.apache.org/jira/browse/SOLR-9494
+ public void testNeedsScoreBugFixed() throws Exception {
+ String[] doc = {"id","1", "group_s", "xyz", "text_ws", "hello xxx world"};
+ assertU(adoc(doc));
+ assertU(commit());
+
+ ModifiableSolrParams params = params(
+ "q", "{!surround df=text_ws} 2W(hello, world)", // a SpanQuery that matches
+ "fq", "{!collapse field=group_s}", // collapse on some field
+ // note: rows= whatever; doesn't matter
+ "facet", "true", // facet on something
+ "facet.field", "group_s"
+ );
+ assertQ(req(params));
+ assertQ(req(params)); // fails *second* time!
+ }
+
@Test
public void testMergeBoost() throws Exception {