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