You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mk...@apache.org on 2016/12/29 22:03:25 UTC
lucene-solr:branch_6x: SOLR-9900: fix false positives on range
queries with ReversedWildcardFilterFactory
Repository: lucene-solr
Updated Branches:
refs/heads/branch_6x 40a8b4edb -> ce6bdea6e
SOLR-9900: fix false positives on range queries with ReversedWildcardFilterFactory
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/ce6bdea6
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/ce6bdea6
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/ce6bdea6
Branch: refs/heads/branch_6x
Commit: ce6bdea6e3f3eca7a1058dd4fe2ff0af70d2e4c2
Parents: 40a8b4e
Author: Mikhail Khludnev <mk...@apache.org>
Authored: Fri Dec 30 00:42:51 2016 +0300
Committer: Mikhail Khludnev <mk...@apache.org>
Committed: Fri Dec 30 01:02:58 2016 +0300
----------------------------------------------------------------------
solr/CHANGES.txt | 2 ++
.../org/apache/solr/parser/SolrQueryParserBase.java | 14 ++++++++++++++
.../analysis/TestReversedWildcardFilterFactory.java | 12 ++++++++++++
3 files changed, 28 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ce6bdea6/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 76cfa9a..d05b236 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -230,6 +230,8 @@ Bug Fixes
* SOLR-9699,SOLR-4668: fix exception from core status in parallel with core reload (Mikhail Khludnev)
+* SOLR-9900: fix false positives on range queries with ReversedWildcardFilterFactory (Yonik Seeley via Mikhail Khludnev)
+
Other Changes
----------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ce6bdea6/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java b/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java
index 168bd49..f54e9e9 100644
--- a/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java
+++ b/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java
@@ -24,6 +24,7 @@ import java.util.List;
import java.util.Map;
import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.reverse.ReverseStringFilter;
import org.apache.lucene.analysis.util.TokenFilterFactory;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.AutomatonQuery;
@@ -894,6 +895,19 @@ public abstract class SolrQueryParserBase extends QueryBuilder {
protected Query getRangeQuery(String field, String part1, String part2, boolean startInclusive, boolean endInclusive) throws SyntaxError {
checkNullField(field);
SchemaField sf = schema.getField(field);
+
+ if (part1 == null) {
+ ReversedWildcardFilterFactory factory = getReversedWildcardFilterFactory(sf.getType());
+ if (factory != null) {
+ // There will be reversed tokens starting with u0001 that we want to exclude, so
+ // lets start at u0002 inclusive instead.
+ char[] buf = new char[1];
+ buf[0] = ReverseStringFilter.START_OF_HEADING_MARKER + 1;
+ part1 = new String(buf);
+ startInclusive = true;
+ }
+ }
+
return sf.getType().getRangeQuery(parser, sf, part1, part2, startInclusive, endInclusive);
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ce6bdea6/solr/core/src/test/org/apache/solr/analysis/TestReversedWildcardFilterFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/analysis/TestReversedWildcardFilterFactory.java b/solr/core/src/test/org/apache/solr/analysis/TestReversedWildcardFilterFactory.java
index 3ccc352..f7a49ac 100644
--- a/solr/core/src/test/org/apache/solr/analysis/TestReversedWildcardFilterFactory.java
+++ b/solr/core/src/test/org/apache/solr/analysis/TestReversedWildcardFilterFactory.java
@@ -182,6 +182,18 @@ public class TestReversedWildcardFilterFactory extends SolrTestCaseJ4 {
assertQ("false positive",
req("+id:1 +one:*zemog*"),
"//result[@numFound=0]");
+
+ assertQ("no reverse, no false positive",
+ req("q", "+id:1 +three:[* TO a]",
+ "debugQuery", "true"),
+ "//result[@numFound=0]");
+ {
+ String reverseField = random().nextBoolean() ? "one":"two";
+ assertQ("false positive",
+ req("q", "+id:1 +"+reverseField+":[* TO a]",
+ "debugQuery", "true"),
+ "//result[@numFound=0]");
+ }
assertQ("false positive",
req("+id:1 +two:*zemog*"),
"//result[@numFound=0]");