You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jd...@apache.org on 2015/12/07 16:55:41 UTC
svn commit: r1718415 - in /lucene/dev/trunk/solr: CHANGES.txt
core/src/java/org/apache/solr/spelling/SpellingQueryConverter.java
core/src/test/org/apache/solr/spelling/SpellCheckCollatorTest.java
Author: jdyer
Date: Mon Dec 7 15:55:40 2015
New Revision: 1718415
URL: http://svn.apache.org/viewvc?rev=1718415&view=rev
Log:
SOLR-7304: SpellingQueryConverter to ignore "TO" as a possible range query operator
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/SpellingQueryConverter.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/spelling/SpellCheckCollatorTest.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1718415&r1=1718414&r2=1718415&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Mon Dec 7 15:55:40 2015
@@ -207,8 +207,10 @@ Bug Fixes
* SOLR-8366: ConcurrentUpdateSolrClient attempts to use response's content type as charset encoding
for parsing exception. (shalin)
-* SOLR-6271: fix ConjunctionSolrSpellChecker to not compare StringDistance by instance.
+* SOLR-6271: Fix ConjunctionSolrSpellChecker to not compare StringDistance by instance.
(Igor Kostromin via James Dyer)
+
+* SOLR-7304: Fix Spellcheck Collate to not invalidate range queries. (James Dyer)
Other Changes
----------------------
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/SpellingQueryConverter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/SpellingQueryConverter.java?rev=1718415&r1=1718414&r2=1718415&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/SpellingQueryConverter.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/SpellingQueryConverter.java Mon Dec 7 15:55:40 2015
@@ -104,6 +104,8 @@ public class SpellingQueryConverter exte
if (original == null) { // this can happen with q.alt = and no query
return Collections.emptyList();
}
+ boolean mightContainRangeQuery = (original.indexOf('[') != -1 || original.indexOf('{') != -1)
+ && (original.indexOf(']') != -1 || original.indexOf('}') != -1);
Collection<Token> result = new ArrayList<>();
Matcher matcher = QUERY_REGEX.matcher(original);
String nextWord = null;
@@ -123,7 +125,10 @@ public class SpellingQueryConverter exte
if(matcher.find()) {
nextWord = matcher.group(0);
nextStartIndex = matcher.start();
- }
+ }
+ if(mightContainRangeQuery && "TO".equals(word)) {
+ continue;
+ }
if("AND".equals(word) || "OR".equals(word) || "NOT".equals(word)) {
lastBooleanOp = word;
continue;
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/spelling/SpellCheckCollatorTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/spelling/SpellCheckCollatorTest.java?rev=1718415&r1=1718414&r2=1718415&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/spelling/SpellCheckCollatorTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/spelling/SpellCheckCollatorTest.java Mon Dec 7 15:55:40 2015
@@ -48,7 +48,7 @@ public class SpellCheckCollatorTest exte
public static void beforeClass() throws Exception {
initCore("solrconfig-spellcheckcomponent.xml", "schema.xml");
assertU(adoc("id", "0",
- "lowerfilt", "faith hope and love",
+ "lowerfilt", "faith hope and love to",
"teststop", "metanoia"));
assertU(adoc("id", "1",
"lowerfilt", "faith hope and loaves",
@@ -94,6 +94,38 @@ public class SpellCheckCollatorTest exte
"teststop", "metanoia"));
assertU(commit());
}
+
+ @Test
+ public void testCollationWithRangeQuery() throws Exception
+ {
+ SolrCore core = h.getCore();
+ SearchComponent speller = core.getSearchComponent("spellcheck");
+ assertTrue("speller is null and it shouldn't be", speller != null);
+
+ ModifiableSolrParams params = new ModifiableSolrParams();
+ params.add(SpellCheckComponent.COMPONENT_NAME, "true");
+ params.add(SpellingParams.SPELLCHECK_BUILD, "true");
+ params.add(SpellingParams.SPELLCHECK_COUNT, "10");
+ params.add(SpellingParams.SPELLCHECK_COLLATE, "true");
+ params.add(SpellingParams.SPELLCHECK_ALTERNATIVE_TERM_COUNT, "10");
+ params.add(CommonParams.Q, "id:[1 TO 10] AND lowerfilt:lovw");
+ {
+ SolrRequestHandler handler = core.getRequestHandler("spellCheckCompRH");
+ SolrQueryResponse rsp = new SolrQueryResponse();
+ rsp.add("responseHeader", new SimpleOrderedMap());
+ SolrQueryRequest req = new LocalSolrQueryRequest(core, params);
+ handler.handleRequest(req, rsp);
+ req.close();
+ NamedList values = rsp.getValues();
+ NamedList spellCheck = (NamedList) values.get("spellcheck");
+ NamedList collationHolder = (NamedList) spellCheck.get("collations");
+ List<String> collations = collationHolder.getAll("collation");
+ assertTrue(collations.size()==1);
+ String collation = collations.iterator().next();
+ System.out.println(collation);
+ assertTrue("Incorrect collation: " + collation,"id:[1 TO 10] AND lowerfilt:love".equals(collation));
+ }
+ }
@Test
public void testCollationWithHypens() throws Exception