You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2014/03/18 10:46:48 UTC

svn commit: r1578800 - in /lucene/dev/trunk/solr: ./ core/src/java/org/apache/solr/handler/component/ core/src/java/org/apache/solr/search/ core/src/test/org/apache/solr/highlight/ solrj/src/java/org/apache/solr/common/params/

Author: romseygeek
Date: Tue Mar 18 09:46:48 2014
New Revision: 1578800

URL: http://svn.apache.org/r1578800
Log:
SOLR-5858, SOLR-4812: Allow queryparser to be defined for highlight query, and edismax and dismax to be used for this purpose

Modified:
    lucene/dev/trunk/solr/CHANGES.txt
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/highlight/HighlighterTest.java
    lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/params/HighlightParams.java

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1578800&r1=1578799&r2=1578800&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Tue Mar 18 09:46:48 2014
@@ -101,6 +101,9 @@ System Requirements
 * LUCENE-4747, LUCENE-5514: Move to Java 7 as minimum Java version.
   (Robert Muir, Uwe Schindler)
 
+* SOLR-5858: Add a hl.qparser parameter to allow you to define a queryparser
+  for hl.q highlight queries. If no queryparser is defined, Solr will use
+  the overall query's defType. (Alan Woodward)
 
 New Features
 ----------------------
@@ -177,6 +180,9 @@ Bug Fixes
 * SOLR-5550: shards.info is not returned by a short circuited distributed query.
   (Timothy Potter, shalin)
 
+* SOLR-5858, SOLR-4812: edismax and dismax query parsers can be used for parsing 
+  highlight queries. (Alan Woodward, Tien Nguyen Manh)
+
 Optimizations
 ----------------------
 * SOLR-1880: Distributed Search skips GET_FIELDS stage if EXECUTE_QUERY

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java?rev=1578800&r1=1578799&r2=1578800&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java Tue Mar 18 09:46:48 2014
@@ -17,6 +17,7 @@
 
 package org.apache.solr.handler.component;
 
+import com.google.common.base.Objects;
 import org.apache.lucene.search.Query;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.params.CommonParams;
@@ -24,22 +25,24 @@ import org.apache.solr.common.params.Hig
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
+import org.apache.solr.core.PluginInfo;
+import org.apache.solr.core.SolrCore;
+import org.apache.solr.highlight.DefaultSolrHighlighter;
 import org.apache.solr.highlight.PostingsSolrHighlighter;
 import org.apache.solr.highlight.SolrHighlighter;
-import org.apache.solr.highlight.DefaultSolrHighlighter;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.search.QParser;
+import org.apache.solr.search.QParserPlugin;
+import org.apache.solr.search.QueryParsing;
 import org.apache.solr.search.SyntaxError;
 import org.apache.solr.util.SolrPluginUtils;
 import org.apache.solr.util.plugin.PluginInfoInitialized;
 import org.apache.solr.util.plugin.SolrCoreAware;
-import org.apache.solr.core.PluginInfo;
-import org.apache.solr.core.SolrCore;
 
 import java.io.IOException;
 import java.net.URL;
-import java.util.Map;
 import java.util.List;
+import java.util.Map;
 
 /**
  * TODO!
@@ -69,9 +72,11 @@ public class HighlightComponent extends 
     rb.doHighlights = highlighter.isHighlightingEnabled(params);
     if(rb.doHighlights){
       String hlq = params.get(HighlightParams.Q);
+      String hlparser = Objects.firstNonNull(params.get(HighlightParams.QPARSER),
+                                              params.get(QueryParsing.DEFTYPE, QParserPlugin.DEFAULT_QTYPE));
       if(hlq != null){
         try {
-          QParser parser = QParser.getParser(hlq, null, rb.req);
+          QParser parser = QParser.getParser(hlq, hlparser, rb.req);
           rb.setHighlightQuery(parser.getHighlightQuery());
         } catch (SyntaxError e) {
           throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e);

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java?rev=1578800&r1=1578799&r2=1578800&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java Tue Mar 18 09:46:48 2014
@@ -91,11 +91,13 @@ public class DisMaxQParser extends QPars
   protected String[] boostParams;
   protected List<Query> boostQueries;
   protected Query altUserQuery;
-  protected QParser altQParser;
+
+  private boolean parsed = false;
 
 
   @Override
   public Query parse() throws SyntaxError {
+    parsed = true;
     SolrParams solrParams = SolrParams.wrapDefaults(localParams, params);
 
     queryFields = parseQueryFields(req.getSchema(), solrParams);
@@ -263,6 +265,8 @@ public class DisMaxQParser extends QPars
 
   @Override
   public Query getHighlightQuery() throws SyntaxError {
+    if (!parsed)
+      parse();
     return parsedUserQuery == null ? altUserQuery : parsedUserQuery;
   }
 

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java?rev=1578800&r1=1578799&r2=1578800&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java Tue Mar 18 09:46:48 2014
@@ -17,16 +17,6 @@
 
 package org.apache.solr.search;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.core.StopFilterFactory;
 import org.apache.lucene.analysis.util.TokenFilterFactory;
@@ -52,6 +42,16 @@ import org.apache.solr.request.SolrQuery
 import org.apache.solr.schema.FieldType;
 import org.apache.solr.util.SolrPluginUtils;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 /**
  * Query parser that generates DisjunctionMaxQueries based on user configuration.
  * See Wiki page http://wiki.apache.org/solr/ExtendedDisMax
@@ -100,6 +100,7 @@ public class ExtendedDismaxQParser exten
   private Query parsedUserQuery;
   private Query altUserQuery;
   private List<Query> boostQueries;
+  private boolean parsed = false;
   
   
   public ExtendedDismaxQParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
@@ -109,6 +110,8 @@ public class ExtendedDismaxQParser exten
   
   @Override
   public Query parse() throws SyntaxError {
+
+    parsed = true;
     
     /* the main query we will execute.  we disable the coord because
      * this query is an artificial construct
@@ -565,6 +568,8 @@ public class ExtendedDismaxQParser exten
   
   @Override
   public Query getHighlightQuery() throws SyntaxError {
+    if (!parsed)
+      parse();
     return parsedUserQuery == null ? altUserQuery : parsedUserQuery;
   }
   

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/highlight/HighlighterTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/highlight/HighlighterTest.java?rev=1578800&r1=1578799&r2=1578800&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/highlight/HighlighterTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/highlight/HighlighterTest.java Tue Mar 18 09:46:48 2014
@@ -21,11 +21,10 @@ import org.apache.lucene.analysis.Analyz
 import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.analysis.core.WhitespaceAnalyzer;
 import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.common.params.HighlightParams;
 import org.apache.solr.handler.component.HighlightComponent;
-import org.apache.solr.request.LocalSolrQueryRequest;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.util.*;
-import org.apache.solr.common.params.HighlightParams;
+import org.apache.solr.util.TestHarness;
 import org.junit.After;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -848,7 +847,7 @@ public class HighlighterTest extends Sol
   }
   
   public void testHlQParameter() {
-    assertU(adoc("title", "Apache Software Foundation", "id", "1"));
+    assertU(adoc("title", "Apache Software Foundation", "t_text", "apache software foundation", "id", "1"));
     assertU(commit());
     assertQ("hl.q parameter overrides q parameter", 
         req("q", "title:Apache", "hl", "true", "hl.fl", "title", "hl.q", "title:Software"),
@@ -858,6 +857,31 @@ public class HighlighterTest extends Sol
         req("q", "title:Apache", "hl", "true", "hl.fl", "title", "hl.q", "{!v=$qq}", "qq", "title:Foundation"),
         "//lst[@name='highlighting']/lst[@name='1']" +
         "/arr[@name='title']/str='Apache Software <em>Foundation</em>'");
+    assertQ("hl.q parameter uses localparam parser definition correctly",
+        req("q", "Apache", "defType", "edismax", "qf", "title t_text", "hl", "true", "hl.fl", "title", "hl.q", "{!edismax}Software"),
+        "//lst[@name='highlighting']/lst[@name='1']" +
+            "/arr[@name='title']/str='Apache <em>Software</em> Foundation'");
+    assertQ("hl.q parameter uses defType correctly",
+        req("q", "Apache", "defType", "edismax", "qf", "title t_text", "hl", "true", "hl.fl", "title", "hl.q", "Software"),
+        "//lst[@name='highlighting']/lst[@name='1']" +
+        "/arr[@name='title']/str='Apache <em>Software</em> Foundation'");
+    assertQ("hl.q parameter uses hl.qparser param correctly",
+        req("q", "t_text:Apache", "qf", "title t_text", "hl", "true", "hl.fl", "title", "hl.q", "Software", "hl.qparser", "edismax"),
+        "//lst[@name='highlighting']/lst[@name='1']" +
+            "/arr[@name='title']/str='Apache <em>Software</em> Foundation'");
+  }
+
+  public void testHlQEdismaxParameter() {
+    assertU(adoc("title", "Apache Software Foundation", "id", "1"));
+    assertU(commit());
+    assertQ("hl.q parameter overrides q parameter",
+        req("q", "title:Apache", "hl", "true", "hl.fl", "title", "hl.q", "{!edismax qf=title v=Software}"),
+        "//lst[@name='highlighting']/lst[@name='1']" +
+            "/arr[@name='title']/str='Apache <em>Software</em> Foundation'");
+    assertQ("hl.q parameter overrides q parameter",
+        req("q", "title:Apache", "hl", "true", "hl.fl", "title", "hl.q", "{!v=$qq}", "qq", "title:Foundation"),
+        "//lst[@name='highlighting']/lst[@name='1']" +
+            "/arr[@name='title']/str='Apache Software <em>Foundation</em>'");
   }
 
   @Test

Modified: lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/params/HighlightParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/params/HighlightParams.java?rev=1578800&r1=1578799&r2=1578800&view=diff
==============================================================================
--- lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/params/HighlightParams.java (original)
+++ lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/params/HighlightParams.java Tue Mar 18 09:46:48 2014
@@ -24,6 +24,7 @@ package org.apache.solr.common.params;
 public interface HighlightParams {
   public static final String HIGHLIGHT   = "hl";
   public static final String Q           = HIGHLIGHT+".q";
+  public static final String QPARSER     = HIGHLIGHT+".qparser";
   public static final String FIELDS      = HIGHLIGHT+".fl";
   public static final String SNIPPETS    = HIGHLIGHT+".snippets";
   public static final String FRAGSIZE    = HIGHLIGHT+".fragsize";