LUCENE-2605: Classic QueryParser no longer splits on whitespace by default.

This commit is contained in:
Steve Rowe 2016-07-05 18:52:35 -04:00
parent 17d113dac1
commit 24e5c1c205
5 changed files with 23 additions and 5 deletions

View File

@ -5,6 +5,11 @@ http://s.apache.org/luceneversions
======================= Lucene 7.0.0 ======================= ======================= Lucene 7.0.0 =======================
API Changes
* LUCENE-2605: Classic QueryParser no longer splits on whitespace by default.
Use setSplitOnWhitespace(true) to get the old behavior. (Steve Rowe)
Bug Fixes Bug Fixes
Improvements Improvements

View File

@ -85,7 +85,7 @@ public class QueryParser extends QueryParserBase implements QueryParserConstants
static public enum Operator { OR, AND } static public enum Operator { OR, AND }
/** default split on whitespace behavior */ /** default split on whitespace behavior */
public static final boolean DEFAULT_SPLIT_ON_WHITESPACE = true; public static final boolean DEFAULT_SPLIT_ON_WHITESPACE = false;
/** Create a query parser. /** Create a query parser.
* @param f the default field for query terms. * @param f the default field for query terms.

View File

@ -109,7 +109,7 @@ public class QueryParser extends QueryParserBase {
static public enum Operator { OR, AND } static public enum Operator { OR, AND }
/** default split on whitespace behavior */ /** default split on whitespace behavior */
public static final boolean DEFAULT_SPLIT_ON_WHITESPACE = true; public static final boolean DEFAULT_SPLIT_ON_WHITESPACE = false;
/** Create a query parser. /** Create a query parser.
* @param f the default field for query terms. * @param f the default field for query terms.

View File

@ -1,5 +1,17 @@
/* Generated By:JavaCC: Do not edit this line. QueryParserTokenManager.java */ /* Generated By:JavaCC: Do not edit this line. QueryParserTokenManager.java */
package org.apache.lucene.queryparser.classic; package org.apache.lucene.queryparser.classic;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.DateTools;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermRangeQuery;
/** Token Manager. */ /** Token Manager. */
@SuppressWarnings("cast") @SuppressWarnings("cast")

View File

@ -690,16 +690,17 @@ public class TestQueryParser extends QueryParserTestBase {
public void testDefaultSplitOnWhitespace() throws Exception { public void testDefaultSplitOnWhitespace() throws Exception {
QueryParser parser = new QueryParser("field", new Analyzer1()); QueryParser parser = new QueryParser("field", new Analyzer1());
assertTrue(parser.getSplitOnWhitespace()); // default is true assertFalse(parser.getSplitOnWhitespace()); // default is false
// A multi-word synonym source will form a synonym query for the same-starting-position tokens
BooleanQuery.Builder bqBuilder = new BooleanQuery.Builder(); BooleanQuery.Builder bqBuilder = new BooleanQuery.Builder();
bqBuilder.add(new TermQuery(new Term("field", "guinea")), BooleanClause.Occur.SHOULD); bqBuilder.add(new SynonymQuery(new Term("field", "guinea"), new Term("field", "cavy")), BooleanClause.Occur.SHOULD);
bqBuilder.add(new TermQuery(new Term("field", "pig")), BooleanClause.Occur.SHOULD); bqBuilder.add(new TermQuery(new Term("field", "pig")), BooleanClause.Occur.SHOULD);
assertEquals(bqBuilder.build(), parser.parse("guinea pig")); assertEquals(bqBuilder.build(), parser.parse("guinea pig"));
boolean oldSplitOnWhitespace = splitOnWhitespace; boolean oldSplitOnWhitespace = splitOnWhitespace;
splitOnWhitespace = QueryParser.DEFAULT_SPLIT_ON_WHITESPACE; splitOnWhitespace = QueryParser.DEFAULT_SPLIT_ON_WHITESPACE;
assertQueryEquals("guinea pig", new MockSynonymAnalyzer(), "guinea pig"); assertQueryEquals("guinea pig", new MockSynonymAnalyzer(), "Synonym(cavy guinea) pig");
splitOnWhitespace = oldSplitOnWhitespace; splitOnWhitespace = oldSplitOnWhitespace;
} }
} }