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";