You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by ma...@apache.org on 2010/01/12 16:59:08 UTC
svn commit: r898393 [2/3] - in /lucene/solr/branches/cloud: ./
client/ruby/solr-ruby/solr/conf/ client/ruby/solr-ruby/test/conf/
contrib/clustering/ contrib/clustering/lib/
contrib/clustering/src/main/java/org/apache/solr/handler/clustering/carrot2/
co...
Modified: lucene/solr/branches/cloud/contrib/velocity/src/main/solr/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/contrib/velocity/src/main/solr/conf/solrconfig.xml?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/contrib/velocity/src/main/solr/conf/solrconfig.xml (original)
+++ lucene/solr/branches/cloud/contrib/velocity/src/main/solr/conf/solrconfig.xml Tue Jan 12 15:59:01 2010
@@ -743,23 +743,23 @@
in the request. XMLResponseWriter will be used if nothing is specified here.
The json, python, and ruby writers are also available by default.
- <queryResponseWriter name="xml" class="org.apache.solr.request.XMLResponseWriter" default="true"/>
- <queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
- <queryResponseWriter name="python" class="org.apache.solr.request.PythonResponseWriter"/>
- <queryResponseWriter name="ruby" class="org.apache.solr.request.RubyResponseWriter"/>
- <queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/>
- <queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/>
+ <queryResponseWriter name="xml" class="solr.XMLResponseWriter" default="true"/>
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+ <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+ <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+ <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+ <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
<queryResponseWriter name="custom" class="com.example.MyResponseWriter"/>
-->
- <queryResponseWriter name="velocity" class="org.apache.solr.request.VelocityResponseWriter"/>
+ <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter"/>
<!-- XSLT response writer transforms the XML output by any xslt file found
in Solr's conf/xslt directory. Changes to xslt files are checked for
every xsltCacheLifetimeSeconds.
-->
- <queryResponseWriter name="xslt" class="org.apache.solr.request.XSLTResponseWriter">
+ <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
<int name="xsltCacheLifetimeSeconds">5</int>
</queryResponseWriter>
Modified: lucene/solr/branches/cloud/example/example-DIH/solr/db/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/example/example-DIH/solr/db/conf/solrconfig.xml?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/example/example-DIH/solr/db/conf/solrconfig.xml (original)
+++ lucene/solr/branches/cloud/example/example-DIH/solr/db/conf/solrconfig.xml Tue Jan 12 15:59:01 2010
@@ -674,12 +674,12 @@
in the request. XMLResponseWriter will be used if nothing is specified here.
The json, python, and ruby writers are also available by default.
- <queryResponseWriter name="xml" class="org.apache.solr.request.XMLResponseWriter" default="true"/>
- <queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
- <queryResponseWriter name="python" class="org.apache.solr.request.PythonResponseWriter"/>
- <queryResponseWriter name="ruby" class="org.apache.solr.request.RubyResponseWriter"/>
- <queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/>
- <queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/>
+ <queryResponseWriter name="xml" class="solr.XMLResponseWriter" default="true"/>
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+ <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+ <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+ <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+ <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
<queryResponseWriter name="custom" class="com.example.MyResponseWriter"/>
-->
@@ -688,7 +688,7 @@
in Solr's conf/xslt directory. Changes to xslt files are checked for
every xsltCacheLifetimeSeconds.
-->
- <queryResponseWriter name="xslt" class="org.apache.solr.request.XSLTResponseWriter">
+ <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
<int name="xsltCacheLifetimeSeconds">5</int>
</queryResponseWriter>
Modified: lucene/solr/branches/cloud/example/example-DIH/solr/mail/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/example/example-DIH/solr/mail/conf/solrconfig.xml?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/example/example-DIH/solr/mail/conf/solrconfig.xml (original)
+++ lucene/solr/branches/cloud/example/example-DIH/solr/mail/conf/solrconfig.xml Tue Jan 12 15:59:01 2010
@@ -768,12 +768,12 @@
in the request. XMLResponseWriter will be used if nothing is specified here.
The json, python, and ruby writers are also available by default.
- <queryResponseWriter name="xml" class="org.apache.solr.request.XMLResponseWriter" default="true"/>
- <queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
- <queryResponseWriter name="python" class="org.apache.solr.request.PythonResponseWriter"/>
- <queryResponseWriter name="ruby" class="org.apache.solr.request.RubyResponseWriter"/>
- <queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/>
- <queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/>
+ <queryResponseWriter name="xml" class="solr.XMLResponseWriter" default="true"/>
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+ <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+ <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+ <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+ <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
<queryResponseWriter name="custom" class="com.example.MyResponseWriter"/>
-->
@@ -782,7 +782,7 @@
in Solr's conf/xslt directory. Changes to xslt files are checked for
every xsltCacheLifetimeSeconds.
-->
- <queryResponseWriter name="xslt" class="org.apache.solr.request.XSLTResponseWriter">
+ <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
<int name="xsltCacheLifetimeSeconds">5</int>
</queryResponseWriter>
Modified: lucene/solr/branches/cloud/example/example-DIH/solr/rss/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/example/example-DIH/solr/rss/conf/solrconfig.xml?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/example/example-DIH/solr/rss/conf/solrconfig.xml (original)
+++ lucene/solr/branches/cloud/example/example-DIH/solr/rss/conf/solrconfig.xml Tue Jan 12 15:59:01 2010
@@ -673,12 +673,12 @@
in the request. XMLResponseWriter will be used if nothing is specified here.
The json, python, and ruby writers are also available by default.
- <queryResponseWriter name="xml" class="org.apache.solr.request.XMLResponseWriter" default="true"/>
- <queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
- <queryResponseWriter name="python" class="org.apache.solr.request.PythonResponseWriter"/>
- <queryResponseWriter name="ruby" class="org.apache.solr.request.RubyResponseWriter"/>
- <queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/>
- <queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/>
+ <queryResponseWriter name="xml" class="solr.XMLResponseWriter" default="true"/>
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+ <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+ <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+ <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+ <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
<queryResponseWriter name="custom" class="com.example.MyResponseWriter"/>
-->
@@ -687,7 +687,7 @@
in Solr's conf/xslt directory. Changes to xslt files are checked for
every xsltCacheLifetimeSeconds.
-->
- <queryResponseWriter name="xslt" class="org.apache.solr.request.XSLTResponseWriter">
+ <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
<int name="xsltCacheLifetimeSeconds">5</int>
</queryResponseWriter>
Modified: lucene/solr/branches/cloud/example/solr/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/example/solr/conf/solrconfig.xml?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/example/solr/conf/solrconfig.xml (original)
+++ lucene/solr/branches/cloud/example/solr/conf/solrconfig.xml Tue Jan 12 15:59:01 2010
@@ -957,6 +957,12 @@
<str name="hl.simple.post"><![CDATA[</em>]]></str>
</lst>
</formatter>
+
+ <!-- Configure the standard fragListBuilder -->
+ <fragListBuilder name="simple" class="org.apache.solr.highlight.SimpleFragListBuilder" default="true"/>
+
+ <!-- multi-colored tag FragmentsBuilder -->
+ <fragmentsBuilder name="colored" class="org.apache.solr.highlight.MultiColoredScoreOrderFragmentsBuilder" default="true"/>
</highlighting>
<!-- An example dedup update processor that creates the "id" field on the fly
@@ -995,12 +1001,12 @@
The following response writers are implicitly configured unless
overridden...
- <queryResponseWriter name="xml" class="org.apache.solr.request.XMLResponseWriter" default="true"/>
- <queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
- <queryResponseWriter name="python" class="org.apache.solr.request.PythonResponseWriter"/>
- <queryResponseWriter name="ruby" class="org.apache.solr.request.RubyResponseWriter"/>
- <queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/>
- <queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/>
+ <queryResponseWriter name="xml" class="solr.XMLResponseWriter" default="true"/>
+ <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+ <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+ <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+ <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+ <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
Custom response writers can be declared as needed...
@@ -1011,7 +1017,7 @@
in Solr's conf/xslt directory. Changes to xslt files are checked for
every xsltCacheLifetimeSeconds.
-->
- <queryResponseWriter name="xslt" class="org.apache.solr.request.XSLTResponseWriter">
+ <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
<int name="xsltCacheLifetimeSeconds">5</int>
</queryResponseWriter>
Modified: lucene/solr/branches/cloud/src/common/org/apache/solr/common/params/HighlightParams.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/common/org/apache/solr/common/params/HighlightParams.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/common/org/apache/solr/common/params/HighlightParams.java (original)
+++ lucene/solr/branches/cloud/src/common/org/apache/solr/common/params/HighlightParams.java Tue Jan 12 15:59:01 2010
@@ -30,6 +30,8 @@
public static final String MAX_CHARS = HIGHLIGHT+".maxAnalyzedChars";
public static final String FORMATTER = HIGHLIGHT+".formatter";
public static final String FRAGMENTER = HIGHLIGHT+".fragmenter";
+ public static final String FRAG_LIST_BUILDER = HIGHLIGHT+".fragListBuilder";
+ public static final String FRAGMENTS_BUILDER = HIGHLIGHT+".fragmentsBuilder";
public static final String FIELD_MATCH = HIGHLIGHT+".requireFieldMatch";
public static final String ALTERNATE_FIELD = HIGHLIGHT+".alternateField";
public static final String ALTERNATE_FIELD_LENGTH = HIGHLIGHT+".maxAlternateFieldLength";
@@ -38,6 +40,9 @@
public static final String HIGHLIGHT_MULTI_TERM = HIGHLIGHT+".highlightMultiTerm";
public static final String MERGE_CONTIGUOUS_FRAGMENTS = HIGHLIGHT + ".mergeContiguous";
+
+ public static final String USE_HIGHLIGHTER = HIGHLIGHT + ".useHighlighter";
+
// Formatter
public static final String SIMPLE = "simple";
public static final String SIMPLE_PRE = HIGHLIGHT+"."+SIMPLE+".pre";
Modified: lucene/solr/branches/cloud/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java (original)
+++ lucene/solr/branches/cloud/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java Tue Jan 12 15:59:01 2010
@@ -397,9 +397,9 @@
* @return a LinkedHashMap containing 'n' or less than 'n' entries
*/
public Map<K, V> getOldestAccessedItems(int n) {
- markAndSweepLock.lock();
Map<K, V> result = new LinkedHashMap<K, V>();
TreeSet<CacheEntry> tree = new TreeSet<CacheEntry>();
+ markAndSweepLock.lock();
try {
for (Map.Entry<Object, CacheEntry<K,V>> entry : map.entrySet()) {
CacheEntry ce = entry.getValue();
@@ -423,10 +423,10 @@
}
public Map<K,V> getLatestAccessedItems(int n) {
- // we need to grab the lock since we are changing lastAccessedCopy
- markAndSweepLock.lock();
Map<K,V> result = new LinkedHashMap<K,V>();
TreeSet<CacheEntry> tree = new TreeSet<CacheEntry>();
+ // we need to grab the lock since we are changing lastAccessedCopy
+ markAndSweepLock.lock();
try {
for (Map.Entry<Object, CacheEntry<K,V>> entry : map.entrySet()) {
CacheEntry<K,V> ce = entry.getValue();
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/analysis/PatternReplaceCharFilter.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/analysis/PatternReplaceCharFilter.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/analysis/PatternReplaceCharFilter.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/analysis/PatternReplaceCharFilter.java Tue Jan 12 15:59:01 2010
@@ -63,24 +63,24 @@
private String replaceBlockBuffer;
private int replaceBlockBufferOffset;
- public PatternReplaceCharFilter( String pattern, String replacement, CharStream in ){
+ public PatternReplaceCharFilter( Pattern pattern, String replacement, CharStream in ){
this( pattern, replacement, DEFAULT_MAX_BLOCK_CHARS, null, in );
}
- public PatternReplaceCharFilter( String pattern, String replacement,
+ public PatternReplaceCharFilter( Pattern pattern, String replacement,
int maxBlockChars, CharStream in ){
this( pattern, replacement, maxBlockChars, null, in );
}
- public PatternReplaceCharFilter( String pattern, String replacement,
+ public PatternReplaceCharFilter( Pattern pattern, String replacement,
String blockDelimiters, CharStream in ){
this( pattern, replacement, DEFAULT_MAX_BLOCK_CHARS, blockDelimiters, in );
}
- public PatternReplaceCharFilter( String pattern, String replacement,
+ public PatternReplaceCharFilter( Pattern pattern, String replacement,
int maxBlockChars, String blockDelimiters, CharStream in ){
super( in );
- this.pattern = Pattern.compile( pattern );
+ this.pattern = pattern;
this.replacement = replacement;
if( maxBlockChars < 1 )
throw new IllegalArgumentException( "maxBlockChars should be greater than 0, but it is " + maxBlockChars );
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/analysis/PatternReplaceCharFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/analysis/PatternReplaceCharFilterFactory.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/analysis/PatternReplaceCharFilterFactory.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/analysis/PatternReplaceCharFilterFactory.java Tue Jan 12 15:59:01 2010
@@ -18,6 +18,8 @@
package org.apache.solr.analysis;
import java.util.Map;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
import org.apache.lucene.analysis.CharStream;
@@ -28,16 +30,20 @@
*/
public class PatternReplaceCharFilterFactory extends BaseCharFilterFactory {
- private String pattern;
+ private Pattern p;
private String replacement;
private int maxBlockChars;
private String blockDelimiters;
public void init(Map<String, String> args) {
super.init( args );
- pattern = args.get( "pattern" );
- if( pattern == null )
- pattern = "";
+ try {
+ p = Pattern.compile(args.get("pattern"));
+ } catch (PatternSyntaxException e) {
+ throw new RuntimeException
+ ("Configuration Error: 'pattern' can not be parsed in " +
+ this.getClass().getName(), e);
+ }
replacement = args.get( "replacement" );
if( replacement == null )
replacement = "";
@@ -46,6 +52,6 @@
}
public CharStream create(CharStream input) {
- return new PatternReplaceCharFilter( pattern, replacement, maxBlockChars, blockDelimiters, input );
+ return new PatternReplaceCharFilter( p, replacement, maxBlockChars, blockDelimiters, input );
}
}
Propchange: lucene/solr/branches/cloud/src/java/org/apache/solr/core/CloseHook.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: lucene/solr/branches/cloud/src/java/org/apache/solr/core/DirectoryFactory.java
('svn:executable' removed)
Propchange: lucene/solr/branches/cloud/src/java/org/apache/solr/core/JmxMonitoredMap.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/core/PluginInfo.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/core/PluginInfo.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/core/PluginInfo.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/core/PluginInfo.java Tue Jan 12 15:59:01 2010
@@ -1,105 +1,107 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.core;
-
-import org.apache.solr.common.util.NamedList;
-import org.apache.solr.common.util.DOMUtil;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpressionException;
-import java.util.*;
-import static java.util.Collections.unmodifiableList;
-import static java.util.Collections.unmodifiableMap;
-
-/**
- * An Object which represents a Plugin of any type
- * @version $Id$
- */
-public class PluginInfo {
- public final String name, className, type;
- public final NamedList initArgs;
- public final Map<String, String> attributes;
- public final List<PluginInfo> children;
-
- public PluginInfo(String type, Map<String, String> attrs ,NamedList initArgs, List<PluginInfo> children) {
- this.type = type;
- this.name = attrs.get("name");
- this.className = attrs.get("class");
- this.initArgs = initArgs;
- attributes = unmodifiableMap(attrs);
- this.children = children == null ? Collections.<PluginInfo>emptyList(): unmodifiableList(children);
- }
-
-
- public PluginInfo(Node node, String err, boolean requireName, boolean requireClass) {
- type = node.getNodeName();
- name = DOMUtil.getAttr(node, "name", requireName ? err : null);
- className = DOMUtil.getAttr(node, "class", requireClass ? err : null);
- initArgs = DOMUtil.childNodesToNamedList(node);
- attributes = unmodifiableMap(DOMUtil.toMap(node.getAttributes()));
- children = loadSubPlugins(node);
- }
-
- private List<PluginInfo> loadSubPlugins(Node node) {
- List<PluginInfo> children = null;
- try {
- //if there is another sub tag with a 'class' attribute that has to be another plugin
- NodeList nodes = (NodeList) Config.xpathFactory.newXPath().evaluate("*[@class]",node, XPathConstants.NODESET);
- if(nodes.getLength() > 0){
- children = new ArrayList<PluginInfo>(nodes.getLength());
- for (int i=0; i<nodes.getLength(); i++) {
- PluginInfo pluginInfo = new PluginInfo(nodes.item(i), null, false, false);
- if (pluginInfo.isEnabled()) children.add(pluginInfo);
- }
- }
- } catch (XPathExpressionException e) { }
- return children == null ? Collections.<PluginInfo>emptyList(): unmodifiableList(children);
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder("{");
- if (type != null) sb.append("type = " + type + ",");
- if (name != null) sb.append("name = " + name + ",");
- if (className != null) sb.append("class = " + className + ",");
- if (initArgs.size() > 0) sb.append("args = " + initArgs);
- sb.append("}");
- return sb.toString();
- }
-
- public boolean isEnabled(){
- String enable = attributes.get("enable");
- return enable == null || Boolean.parseBoolean(enable);
- }
-
- public boolean isDefault() {
- return Boolean.parseBoolean(attributes.get("default"));
- }
-
- /**Filter children by type
- * @param type The type name. must not be null
- * @return The mathcing children
- */
- public List<PluginInfo> getChildren(String type){
- if(children.isEmpty()) return children;
- List<PluginInfo> result = new ArrayList<PluginInfo>();
- for (PluginInfo child : children) if(type.equals(child.type)) result.add(child);
- return result;
- }
-}
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.solr.core;
+
+import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.DOMUtil;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import java.util.*;
+import static java.util.Collections.unmodifiableList;
+import static java.util.Collections.unmodifiableMap;
+
+/**
+ * An Object which represents a Plugin of any type
+ * @version $Id$
+ */
+public class PluginInfo {
+ public final String name, className, type;
+ public final NamedList initArgs;
+ public final Map<String, String> attributes;
+ public final List<PluginInfo> children;
+
+ public PluginInfo(String type, Map<String, String> attrs ,NamedList initArgs, List<PluginInfo> children) {
+ this.type = type;
+ this.name = attrs.get("name");
+ this.className = attrs.get("class");
+ this.initArgs = initArgs;
+ attributes = unmodifiableMap(attrs);
+ this.children = children == null ? Collections.<PluginInfo>emptyList(): unmodifiableList(children);
+ }
+
+
+ public PluginInfo(Node node, String err, boolean requireName, boolean requireClass) {
+ type = node.getNodeName();
+ name = DOMUtil.getAttr(node, "name", requireName ? err : null);
+ className = DOMUtil.getAttr(node, "class", requireClass ? err : null);
+ initArgs = DOMUtil.childNodesToNamedList(node);
+ attributes = unmodifiableMap(DOMUtil.toMap(node.getAttributes()));
+ children = loadSubPlugins(node);
+ }
+
+ private List<PluginInfo> loadSubPlugins(Node node) {
+ List<PluginInfo> children = new ArrayList<PluginInfo>();
+ //if there is another sub tag with a non namedlist tag that has to be another plugin
+ NodeList nlst = node.getChildNodes();
+ for (int i = 0; i < nlst.getLength(); i++) {
+ Node nd = nlst.item(i);
+ if (nd.getNodeType() != Node.ELEMENT_NODE) continue;
+ if (NL_TAGS.contains(nd.getNodeName())) continue;
+ PluginInfo pluginInfo = new PluginInfo(nd, null, false, false);
+ if (pluginInfo.isEnabled()) children.add(pluginInfo);
+ }
+ return children.isEmpty() ? Collections.<PluginInfo>emptyList() : unmodifiableList(children);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder("{");
+ if (type != null) sb.append("type = " + type + ",");
+ if (name != null) sb.append("name = " + name + ",");
+ if (className != null) sb.append("class = " + className + ",");
+ if (initArgs.size() > 0) sb.append("args = " + initArgs);
+ sb.append("}");
+ return sb.toString();
+ }
+
+ public boolean isEnabled(){
+ String enable = attributes.get("enable");
+ return enable == null || Boolean.parseBoolean(enable);
+ }
+
+ public boolean isDefault() {
+ return Boolean.parseBoolean(attributes.get("default"));
+ }
+
+ public PluginInfo getChild(String type){
+ List<PluginInfo> l = getChildren(type);
+ return l.isEmpty() ? null:l.get(0);
+ }
+
+ /**Filter children by type
+ * @param type The type name. must not be null
+ * @return The mathcing children
+ */
+ public List<PluginInfo> getChildren(String type){
+ if(children.isEmpty()) return children;
+ List<PluginInfo> result = new ArrayList<PluginInfo>();
+ for (PluginInfo child : children) if(type.equals(child.type)) result.add(child);
+ return result;
+ }
+ private static final HashSet<String> NL_TAGS = new HashSet<String>(Arrays.asList("lst","str","int","bool","arr","float","double"));
+}
Propchange: lucene/solr/branches/cloud/src/java/org/apache/solr/core/PluginInfo.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/core/QuerySenderListener.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/core/QuerySenderListener.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/core/QuerySenderListener.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/core/QuerySenderListener.java Tue Jan 12 15:59:01 2010
@@ -23,7 +23,7 @@
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.request.LocalSolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import java.util.List;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/core/RequestHandlers.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/core/RequestHandlers.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/core/RequestHandlers.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/core/RequestHandlers.java Tue Jan 12 15:59:01 2010
@@ -21,8 +21,8 @@
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
import org.apache.solr.request.SolrRequestHandler;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.util.plugin.SolrCoreAware;
import org.apache.solr.util.plugin.PluginInfoInitialized;
import org.slf4j.Logger;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrConfig.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrConfig.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrConfig.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrConfig.java Tue Jan 12 15:59:01 2010
@@ -25,7 +25,7 @@
import org.apache.solr.request.LocalSolrQueryRequest;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrRequestHandler;
-import org.apache.solr.request.QueryResponseWriter;
+import org.apache.solr.response.QueryResponseWriter;
import org.apache.solr.search.CacheConfig;
import org.apache.solr.search.FastLRUCache;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrCore.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrCore.java Tue Jan 12 15:59:01 2010
@@ -34,6 +34,16 @@
import org.apache.solr.highlight.DefaultSolrHighlighter;
import org.apache.solr.highlight.SolrHighlighter;
import org.apache.solr.request.*;
+import org.apache.solr.response.BinaryResponseWriter;
+import org.apache.solr.response.JSONResponseWriter;
+import org.apache.solr.response.PHPResponseWriter;
+import org.apache.solr.response.PHPSerializedResponseWriter;
+import org.apache.solr.response.PythonResponseWriter;
+import org.apache.solr.response.QueryResponseWriter;
+import org.apache.solr.response.RawResponseWriter;
+import org.apache.solr.response.RubyResponseWriter;
+import org.apache.solr.response.SolrQueryResponse;
+import org.apache.solr.response.XMLResponseWriter;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.search.QParserPlugin;
import org.apache.solr.search.SolrFieldCacheMBean;
@@ -584,7 +594,7 @@
reqHandlers = new RequestHandlers(this);
reqHandlers.initHandlersFromConfig( solrConfig );
- highlighter = initHighLighter();
+ highlighter = initHighlighter();
// Handle things that should eventually go away
initDeprecatedSupport();
@@ -634,7 +644,7 @@
resourceLoader.inform(infoRegistry);
}
- private SolrHighlighter initHighLighter() {
+ private SolrHighlighter initHighlighter() {
SolrHighlighter highlighter = null;
PluginInfo pluginInfo = solrConfig.getPluginInfo(SolrHighlighter.class.getName());
if(pluginInfo != null){
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrResourceLoader.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrResourceLoader.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrResourceLoader.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrResourceLoader.java Tue Jan 12 15:59:01 2010
@@ -47,8 +47,8 @@
import org.apache.solr.common.ResourceLoader;
import org.apache.solr.common.SolrException;
import org.apache.solr.handler.component.SearchComponent;
-import org.apache.solr.request.QueryResponseWriter;
import org.apache.solr.request.SolrRequestHandler;
+import org.apache.solr.response.QueryResponseWriter;
import org.apache.solr.schema.FieldType;
import org.apache.solr.update.processor.UpdateRequestProcessorFactory;
import org.apache.solr.util.plugin.ResourceLoaderAware;
@@ -63,7 +63,7 @@
static final String project = "solr";
static final String base = "org.apache" + "." + project;
- static final String[] packages = {"","analysis.","schema.","handler.","search.","update.","core.","request.","update.processor.","util.", "spelling.", "handler.component.", "handler.dataimport."};
+ static final String[] packages = {"","analysis.","schema.","handler.","search.","update.","core.","response.","request.","update.processor.","util.", "spelling.", "handler.component.", "handler.dataimport." };
protected URLClassLoader classLoader;
private final String instanceDir;
Propchange: lucene/solr/branches/cloud/src/java/org/apache/solr/core/StandardDirectoryFactory.java
('svn:executable' removed)
Propchange: lucene/solr/branches/cloud/src/java/org/apache/solr/core/StandardIndexReaderFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: lucene/solr/branches/cloud/src/java/org/apache/solr/core/StandardIndexReaderFactory.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/AnalysisRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/AnalysisRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/AnalysisRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/AnalysisRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -27,7 +27,7 @@
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java Tue Jan 12 15:59:01 2010
@@ -30,7 +30,7 @@
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.common.SolrException;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.schema.FieldType;
import java.io.IOException;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -26,7 +26,7 @@
import org.apache.solr.common.util.ContentStream;
import static org.apache.solr.handler.XmlUpdateRequestHandler.COMMIT_WITHIN;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.update.AddUpdateCommand;
import org.apache.solr.update.DeleteUpdateCommand;
import org.apache.solr.update.processor.UpdateRequestProcessor;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/CSVRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/CSVRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/CSVRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/CSVRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -18,7 +18,7 @@
package org.apache.solr.handler;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.SolrParams;
@@ -54,17 +54,17 @@
@Override
public String getVersion() {
- return "$Revision:$";
+ return "$Revision$";
}
@Override
public String getSourceId() {
- return "$Id:$";
+ return "$Id$";
}
@Override
public String getSource() {
- return "$URL:$";
+ return "$URL$";
}
}
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ContentStreamHandlerBase.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ContentStreamHandlerBase.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ContentStreamHandlerBase.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ContentStreamHandlerBase.java Tue Jan 12 15:59:01 2010
@@ -21,7 +21,7 @@
import org.apache.solr.common.params.UpdateParams;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.update.processor.UpdateRequestProcessor;
import org.apache.solr.update.processor.UpdateRequestProcessorChain;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ContentStreamLoader.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ContentStreamLoader.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ContentStreamLoader.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ContentStreamLoader.java Tue Jan 12 15:59:01 2010
@@ -19,7 +19,7 @@
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
/**
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/DumpRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/DumpRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/DumpRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/DumpRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -25,7 +25,7 @@
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
public class DumpRequestHandler extends RequestHandlerBase
{
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/MoreLikeThisHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/MoreLikeThisHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/MoreLikeThisHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/MoreLikeThisHandler.java Tue Jan 12 15:59:01 2010
@@ -51,7 +51,7 @@
import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SimpleFacets;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.search.DocIterator;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/PingRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/PingRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/PingRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/PingRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -24,8 +24,8 @@
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
import org.apache.solr.request.SolrRequestHandler;
+import org.apache.solr.response.SolrQueryResponse;
/**
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ReplicationHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ReplicationHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ReplicationHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ReplicationHandler.java Tue Jan 12 15:59:01 2010
@@ -26,9 +26,9 @@
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.core.*;
-import org.apache.solr.request.BinaryQueryResponseWriter;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.BinaryQueryResponseWriter;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.search.SolrIndexSearcher;
import org.apache.solr.update.DirectUpdateHandler2;
import org.apache.solr.util.RefCounted;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/RequestHandlerBase.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/RequestHandlerBase.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/RequestHandlerBase.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/RequestHandlerBase.java Tue Jan 12 15:59:01 2010
@@ -25,8 +25,8 @@
import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrInfoMBean;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
import org.apache.solr.request.SolrRequestHandler;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.search.DocSet;
import org.apache.solr.util.SolrPluginUtils;
import org.apache.lucene.queryParser.ParseException;
@@ -85,8 +85,8 @@
*
* @param args The {@link org.apache.solr.common.util.NamedList} to initialize from
*
- * @see #handleRequest(org.apache.solr.request.SolrQueryRequest, org.apache.solr.request.SolrQueryResponse)
- * @see #handleRequestBody(org.apache.solr.request.SolrQueryRequest, org.apache.solr.request.SolrQueryResponse)
+ * @see #handleRequest(org.apache.solr.request.SolrQueryRequest, org.apache.solr.response.SolrQueryResponse)
+ * @see #handleRequestBody(org.apache.solr.request.SolrQueryRequest, org.apache.solr.response.SolrQueryResponse)
* @see org.apache.solr.util.SolrPluginUtils#setDefaults(org.apache.solr.request.SolrQueryRequest, org.apache.solr.common.params.SolrParams, org.apache.solr.common.params.SolrParams, org.apache.solr.common.params.SolrParams)
* @see SolrParams#toSolrParams(org.apache.solr.common.util.NamedList)
*
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/RequestHandlerUtils.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/RequestHandlerUtils.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/RequestHandlerUtils.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/RequestHandlerUtils.java Tue Jan 12 15:59:01 2010
@@ -24,7 +24,7 @@
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.params.UpdateParams;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.update.CommitUpdateCommand;
import org.apache.solr.update.RollbackUpdateCommand;
import org.apache.solr.update.processor.UpdateRequestProcessor;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/SpellCheckerRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/SpellCheckerRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/SpellCheckerRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/SpellCheckerRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -26,7 +26,7 @@
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/XMLLoader.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/XMLLoader.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/XMLLoader.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/XMLLoader.java Tue Jan 12 15:59:01 2010
@@ -22,7 +22,7 @@
import org.apache.solr.update.RollbackUpdateCommand;
import org.apache.solr.update.DeleteUpdateCommand;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.common.SolrException;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/XmlUpdateRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/XmlUpdateRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/XmlUpdateRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/XmlUpdateRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -25,7 +25,7 @@
import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrQueryRequestBase;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.update.processor.UpdateRequestProcessor;
import org.apache.solr.update.processor.UpdateRequestProcessorChain;
import org.slf4j.Logger;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/AdminHandlers.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/AdminHandlers.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/AdminHandlers.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/AdminHandlers.java Tue Jan 12 15:59:01 2010
@@ -24,8 +24,8 @@
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
import org.apache.solr.request.SolrRequestHandler;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.util.plugin.SolrCoreAware;
/**
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java Tue Jan 12 15:59:01 2010
@@ -30,8 +30,8 @@
import org.apache.solr.core.DirectoryFactory;
import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
import org.apache.solr.request.LocalSolrQueryRequest;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.search.SolrIndexSearcher;
import org.apache.solr.util.RefCounted;
import org.apache.solr.update.MergeIndexesCommand;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -57,7 +57,7 @@
import org.apache.solr.common.util.Base64;
import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java Tue Jan 12 15:59:01 2010
@@ -28,7 +28,7 @@
import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.handler.RequestHandlerUtils;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
/**
* similar to "admin/registry.jsp"
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/PropertiesRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/PropertiesRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/PropertiesRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/PropertiesRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -22,7 +22,7 @@
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
/**
* @version $Id$
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/ShowFileRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/ShowFileRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/ShowFileRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/ShowFileRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -36,9 +36,9 @@
import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.handler.RequestHandlerUtils;
-import org.apache.solr.request.RawResponseWriter;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.RawResponseWriter;
+import org.apache.solr.response.SolrQueryResponse;
/**
* This handler uses the RawResponseWriter to give client access to
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java Tue Jan 12 15:59:01 2010
@@ -37,7 +37,7 @@
import org.apache.solr.core.SolrCore;
import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.schema.IndexSchema;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/ThreadDumpHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/ThreadDumpHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/ThreadDumpHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/ThreadDumpHandler.java Tue Jan 12 15:59:01 2010
@@ -27,7 +27,7 @@
import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.handler.RequestHandlerUtils;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
/**
* Copied from "admin/threaddump.jsp"
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/QueryComponent.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/QueryComponent.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/QueryComponent.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/QueryComponent.java Tue Jan 12 15:59:01 2010
@@ -34,7 +34,7 @@
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.search.*;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/ResponseBuilder.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/ResponseBuilder.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/ResponseBuilder.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/ResponseBuilder.java Tue Jan 12 15:59:01 2010
@@ -23,7 +23,7 @@
import org.apache.solr.common.util.RTimer;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.search.DocListAndSet;
import org.apache.solr.search.QParser;
import org.apache.solr.search.SortSpec;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/SearchComponent.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/SearchComponent.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/SearchComponent.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/SearchComponent.java Tue Jan 12 15:59:01 2010
@@ -25,7 +25,7 @@
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.core.SolrInfoMBean;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.util.plugin.NamedListInitializedPlugin;
/**
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/SearchHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/SearchHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/SearchHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/SearchHandler.java Tue Jan 12 15:59:01 2010
@@ -27,7 +27,7 @@
import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.SolrException;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrResponse;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java Tue Jan 12 15:59:01 2010
@@ -35,8 +35,11 @@
import org.apache.lucene.document.Document;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.highlight.*;
+import org.apache.lucene.search.vectorhighlight.FastVectorHighlighter;
+import org.apache.lucene.search.vectorhighlight.FieldQuery;
+import org.apache.lucene.search.vectorhighlight.FragListBuilder;
+import org.apache.lucene.search.vectorhighlight.FragmentsBuilder;
import org.apache.solr.common.SolrException;
-import org.apache.solr.common.ResourceLoader;
import org.apache.solr.common.params.HighlightParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
@@ -45,12 +48,15 @@
import org.apache.solr.core.PluginInfo;
import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.search.DocIterator;
import org.apache.solr.search.DocList;
import org.apache.solr.search.SolrIndexSearcher;
import org.apache.solr.util.plugin.PluginInfoInitialized;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
*
@@ -59,6 +65,8 @@
public class DefaultSolrHighlighter extends SolrHighlighter implements PluginInfoInitialized
{
+ public static Logger log = LoggerFactory.getLogger(DefaultSolrHighlighter.class);
+
private SolrCore solrCore;
public DefaultSolrHighlighter() {
@@ -71,16 +79,35 @@
public void init(PluginInfo info) {
formatters.clear();
fragmenters.clear();
+ fragListBuilders.clear();
+ fragmentsBuilders.clear();
+ // Load the fragmenters
SolrFragmenter frag = solrCore.initPlugins(info.getChildren("fragmenter") , fragmenters,SolrFragmenter.class,null);
if (frag == null) frag = new GapFragmenter();
fragmenters.put("", frag);
fragmenters.put(null, frag);
+
// Load the formatters
SolrFormatter fmt = solrCore.initPlugins(info.getChildren("formatter"), formatters,SolrFormatter.class,null);
if (fmt == null) fmt = new HtmlFormatter();
formatters.put("", fmt);
formatters.put(null, fmt);
+
+ // Load the FragListBuilders
+ SolrFragListBuilder fragListBuilder = solrCore.initPlugins(info.getChildren("fragListBuilder"),
+ fragListBuilders, SolrFragListBuilder.class, null );
+ if( fragListBuilder == null ) fragListBuilder = new SimpleFragListBuilder();
+ fragListBuilders.put( "", fragListBuilder );
+ fragListBuilders.put( null, fragListBuilder );
+
+ // Load the FragmentsBuilders
+ SolrFragmentsBuilder fragsBuilder = solrCore.initPlugins(info.getChildren("fragmentsBuilder"),
+ fragmentsBuilders, SolrFragmentsBuilder.class, null);
+ if( fragsBuilder == null ) fragsBuilder = new ScoreOrderFragmentsBuilder();
+ fragmentsBuilders.put( "", fragsBuilder );
+ fragmentsBuilders.put( null, fragsBuilder );
+
initialized = true;
}
@@ -97,7 +124,13 @@
formatters.put("", fmt);
formatters.put(null, fmt);
-
+ SolrFragListBuilder fragListBuilder = new SimpleFragListBuilder();
+ fragListBuilders.put( "", fragListBuilder );
+ fragListBuilders.put( null, fragListBuilder );
+
+ SolrFragmentsBuilder fragsBuilder = new ScoreOrderFragmentsBuilder();
+ fragmentsBuilders.put( "", fragsBuilder );
+ fragmentsBuilders.put( null, fragsBuilder );
}
/**
@@ -233,6 +266,24 @@
return frag.getFragmenter( fieldName, params );
}
+ protected FragListBuilder getFragListBuilder( SolrParams params ){
+ String flb = params.get( HighlightParams.FRAG_LIST_BUILDER );
+ SolrFragListBuilder solrFlb = fragListBuilders.get( flb );
+ if( solrFlb == null ){
+ throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, "Unknown fragListBuilder: " + flb );
+ }
+ return solrFlb.getFragListBuilder( params );
+ }
+
+ protected FragmentsBuilder getFragmentsBuilder( SolrParams params ){
+ String fb = params.get( HighlightParams.FRAGMENTS_BUILDER );
+ SolrFragmentsBuilder solrFb = fragmentsBuilders.get( fb );
+ if( solrFb == null ){
+ throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, "Unknown fragmentsBuilder: " + fb );
+ }
+ return solrFb.getFragmentsBuilder( params );
+ }
+
/**
* Generates a list of Highlighted query fragments for each item in a list
* of documents, or returns null if highlighting is disabled.
@@ -251,151 +302,199 @@
if (!isHighlightingEnabled(params))
return null;
- SolrIndexSearcher searcher = req.getSearcher();
- IndexSchema schema = searcher.getSchema();
- NamedList fragments = new SimpleOrderedMap();
- String[] fieldNames = getHighlightFields(query, req, defaultFields);
- Set<String> fset = new HashSet<String>();
+ SolrIndexSearcher searcher = req.getSearcher();
+ IndexSchema schema = searcher.getSchema();
+ NamedList fragments = new SimpleOrderedMap();
+ String[] fieldNames = getHighlightFields(query, req, defaultFields);
+ Set<String> fset = new HashSet<String>();
- {
- // pre-fetch documents using the Searcher's doc cache
- for(String f : fieldNames) { fset.add(f); }
- // fetch unique key if one exists.
- SchemaField keyField = schema.getUniqueKeyField();
- if(null != keyField)
- fset.add(keyField.getName());
- }
+ {
+ // pre-fetch documents using the Searcher's doc cache
+ for(String f : fieldNames) { fset.add(f); }
+ // fetch unique key if one exists.
+ SchemaField keyField = schema.getUniqueKeyField();
+ if(null != keyField)
+ fset.add(keyField.getName());
+ }
+ // get FastVectorHighlighter instance out of the processing loop
+ FastVectorHighlighter fvh = new FastVectorHighlighter(
+ // FVH cannot process hl.usePhraseHighlighter parameter per-field basis
+ params.getBool( HighlightParams.USE_PHRASE_HIGHLIGHTER, true ),
+ // FVH cannot process hl.requireFieldMatch parameter per-field basis
+ params.getBool( HighlightParams.FIELD_MATCH, false ),
+ getFragListBuilder( params ),
+ getFragmentsBuilder( params ) );
+ FieldQuery fieldQuery = fvh.getFieldQuery( query );
// Highlight each document
DocIterator iterator = docs.iterator();
for (int i = 0; i < docs.size(); i++) {
- int docId = iterator.nextDoc();
- Document doc = searcher.doc(docId, fset);
- NamedList docSummaries = new SimpleOrderedMap();
- for (String fieldName : fieldNames) {
- fieldName = fieldName.trim();
- String[] docTexts = doc.getValues(fieldName);
- if (docTexts == null) continue;
-
- TokenStream tstream = null;
- int numFragments = getMaxSnippets(fieldName, params);
- boolean mergeContiguousFragments = isMergeContiguousFragments(fieldName, params);
-
- String[] summaries = null;
- List<TextFragment> frags = new ArrayList<TextFragment>();
-
- TermOffsetsTokenStream tots = null; // to be non-null iff we're using TermOffsets optimization
- try {
- TokenStream tvStream = TokenSources.getTokenStream(searcher.getReader(), docId, fieldName);
- if (tvStream != null) {
- tots = new TermOffsetsTokenStream(tvStream);
- }
- }
- catch (IllegalArgumentException e) {
- // No problem. But we can't use TermOffsets optimization.
- }
+ int docId = iterator.nextDoc();
+ Document doc = searcher.doc(docId, fset);
+ NamedList docSummaries = new SimpleOrderedMap();
+ for (String fieldName : fieldNames) {
+ fieldName = fieldName.trim();
+ if( useFastVectorHighlighter( params, schema, fieldName ) )
+ doHighlightingByFastVectorHighlighter( fvh, fieldQuery, req, docSummaries, docId, doc, fieldName );
+ else
+ doHighlightingByHighlighter( query, req, docSummaries, docId, doc, fieldName );
+ }
+ String printId = schema.printableUniqueKey(doc);
+ fragments.add(printId == null ? null : printId, docSummaries);
+ }
+ return fragments;
+ }
+
+ /*
+ * If fieldName is undefined, this method returns false, then
+ * doHighlightingByHighlighter() will do nothing for the field.
+ */
+ private boolean useFastVectorHighlighter( SolrParams params, IndexSchema schema, String fieldName ){
+ SchemaField schemaField = schema.getFieldOrNull( fieldName );
+ return schemaField != null &&
+ schemaField.storeTermPositions() &&
+ schemaField.storeTermOffsets() &&
+ !params.getFieldBool( fieldName, HighlightParams.USE_HIGHLIGHTER, false );
+ }
+
+ private void doHighlightingByHighlighter( Query query, SolrQueryRequest req, NamedList docSummaries,
+ int docId, Document doc, String fieldName ) throws IOException {
+ SolrParams params = req.getParams();
+ String[] docTexts = doc.getValues(fieldName);
+ // according to Document javadoc, doc.getValues() never returns null. check empty instead of null
+ if (docTexts.length == 0) return;
+
+ SolrIndexSearcher searcher = req.getSearcher();
+ IndexSchema schema = searcher.getSchema();
+ TokenStream tstream = null;
+ int numFragments = getMaxSnippets(fieldName, params);
+ boolean mergeContiguousFragments = isMergeContiguousFragments(fieldName, params);
+
+ String[] summaries = null;
+ List<TextFragment> frags = new ArrayList<TextFragment>();
+
+ TermOffsetsTokenStream tots = null; // to be non-null iff we're using TermOffsets optimization
+ try {
+ TokenStream tvStream = TokenSources.getTokenStream(searcher.getReader(), docId, fieldName);
+ if (tvStream != null) {
+ tots = new TermOffsetsTokenStream(tvStream);
+ }
+ }
+ catch (IllegalArgumentException e) {
+ // No problem. But we can't use TermOffsets optimization.
+ }
- for (int j = 0; j < docTexts.length; j++) {
- if( tots != null ) {
- // if we're using TermOffsets optimization, then get the next
- // field value's TokenStream (i.e. get field j's TokenStream) from tots:
- tstream = tots.getMultiValuedTokenStream( docTexts[j].length() );
- } else {
- // fall back to analyzer
- tstream = createAnalyzerTStream(schema, fieldName, docTexts[j]);
- }
-
- Highlighter highlighter;
- if (Boolean.valueOf(req.getParams().get(HighlightParams.USE_PHRASE_HIGHLIGHTER, "true"))) {
- // TODO: this is not always necessary - eventually we would like to avoid this wrap
- // when it is not needed.
- tstream = new CachingTokenFilter(tstream);
-
- // get highlighter
- highlighter = getPhraseHighlighter(query, fieldName, req, (CachingTokenFilter) tstream);
-
- // after highlighter initialization, reset tstream since construction of highlighter already used it
- tstream.reset();
- }
- else {
- // use "the old way"
- highlighter = getHighlighter(query, fieldName, req);
- }
-
- int maxCharsToAnalyze = params.getFieldInt(fieldName,
- HighlightParams.MAX_CHARS,
- Highlighter.DEFAULT_MAX_CHARS_TO_ANALYZE);
- if (maxCharsToAnalyze < 0) {
- highlighter.setMaxDocCharsToAnalyze(docTexts[j].length());
- } else {
- highlighter.setMaxDocCharsToAnalyze(maxCharsToAnalyze);
- }
-
- try {
- TextFragment[] bestTextFragments = highlighter.getBestTextFragments(tstream, docTexts[j], mergeContiguousFragments, numFragments);
- for (int k = 0; k < bestTextFragments.length; k++) {
- if ((bestTextFragments[k] != null) && (bestTextFragments[k].getScore() > 0)) {
- frags.add(bestTextFragments[k]);
- }
- }
- } catch (InvalidTokenOffsetsException e) {
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
- }
- }
- // sort such that the fragments with the highest score come first
- Collections.sort(frags, new Comparator<TextFragment>() {
- public int compare(TextFragment arg0, TextFragment arg1) {
- return Math.round(arg1.getScore() - arg0.getScore());
- }
- });
-
- // convert fragments back into text
- // TODO: we can include score and position information in output as snippet attributes
- if (frags.size() > 0) {
- ArrayList<String> fragTexts = new ArrayList<String>();
- for (TextFragment fragment: frags) {
- if ((fragment != null) && (fragment.getScore() > 0)) {
- fragTexts.add(fragment.toString());
- }
- if (fragTexts.size() >= numFragments) break;
- }
- summaries = fragTexts.toArray(new String[0]);
- if (summaries.length > 0)
- docSummaries.add(fieldName, summaries);
+ for (int j = 0; j < docTexts.length; j++) {
+ if( tots != null ) {
+ // if we're using TermOffsets optimization, then get the next
+ // field value's TokenStream (i.e. get field j's TokenStream) from tots:
+ tstream = tots.getMultiValuedTokenStream( docTexts[j].length() );
+ } else {
+ // fall back to analyzer
+ tstream = createAnalyzerTStream(schema, fieldName, docTexts[j]);
+ }
+
+ Highlighter highlighter;
+ if (Boolean.valueOf(req.getParams().get(HighlightParams.USE_PHRASE_HIGHLIGHTER, "true"))) {
+ // TODO: this is not always necessary - eventually we would like to avoid this wrap
+ // when it is not needed.
+ tstream = new CachingTokenFilter(tstream);
+
+ // get highlighter
+ highlighter = getPhraseHighlighter(query, fieldName, req, (CachingTokenFilter) tstream);
+
+ // after highlighter initialization, reset tstream since construction of highlighter already used it
+ tstream.reset();
+ }
+ else {
+ // use "the old way"
+ highlighter = getHighlighter(query, fieldName, req);
+ }
+
+ int maxCharsToAnalyze = params.getFieldInt(fieldName,
+ HighlightParams.MAX_CHARS,
+ Highlighter.DEFAULT_MAX_CHARS_TO_ANALYZE);
+ if (maxCharsToAnalyze < 0) {
+ highlighter.setMaxDocCharsToAnalyze(docTexts[j].length());
+ } else {
+ highlighter.setMaxDocCharsToAnalyze(maxCharsToAnalyze);
+ }
+
+ try {
+ TextFragment[] bestTextFragments = highlighter.getBestTextFragments(tstream, docTexts[j], mergeContiguousFragments, numFragments);
+ for (int k = 0; k < bestTextFragments.length; k++) {
+ if ((bestTextFragments[k] != null) && (bestTextFragments[k].getScore() > 0)) {
+ frags.add(bestTextFragments[k]);
}
- // no summeries made, copy text from alternate field
- if (summaries == null || summaries.length == 0) {
- String alternateField = req.getParams().getFieldParam(fieldName, HighlightParams.ALTERNATE_FIELD);
- if (alternateField != null && alternateField.length() > 0) {
- String[] altTexts = doc.getValues(alternateField);
- if (altTexts != null && altTexts.length > 0){
- int alternateFieldLen = req.getParams().getFieldInt(fieldName, HighlightParams.ALTERNATE_FIELD_LENGTH,0);
- if( alternateFieldLen <= 0 ){
- docSummaries.add(fieldName, altTexts);
- }
- else{
- List<String> altList = new ArrayList<String>();
- int len = 0;
- for( String altText: altTexts ){
- altList.add( len + altText.length() > alternateFieldLen ?
- new String(altText.substring( 0, alternateFieldLen - len )) : altText );
- len += altText.length();
- if( len >= alternateFieldLen ) break;
- }
- docSummaries.add(fieldName, altList);
- }
- }
- }
- }
-
}
- String printId = schema.printableUniqueKey(doc);
- fragments.add(printId == null ? null : printId, docSummaries);
- }
- return fragments;
+ } catch (InvalidTokenOffsetsException e) {
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
+ }
+ }
+ // sort such that the fragments with the highest score come first
+ Collections.sort(frags, new Comparator<TextFragment>() {
+ public int compare(TextFragment arg0, TextFragment arg1) {
+ return Math.round(arg1.getScore() - arg0.getScore());
+ }
+ });
+
+ // convert fragments back into text
+ // TODO: we can include score and position information in output as snippet attributes
+ if (frags.size() > 0) {
+ ArrayList<String> fragTexts = new ArrayList<String>();
+ for (TextFragment fragment: frags) {
+ if ((fragment != null) && (fragment.getScore() > 0)) {
+ fragTexts.add(fragment.toString());
+ }
+ if (fragTexts.size() >= numFragments) break;
+ }
+ summaries = fragTexts.toArray(new String[0]);
+ if (summaries.length > 0)
+ docSummaries.add(fieldName, summaries);
+ }
+ // no summeries made, copy text from alternate field
+ if (summaries == null || summaries.length == 0) {
+ alternateField( docSummaries, params, doc, fieldName );
+ }
}
+ private void doHighlightingByFastVectorHighlighter( FastVectorHighlighter highlighter, FieldQuery fieldQuery,
+ SolrQueryRequest req, NamedList docSummaries, int docId, Document doc, String fieldName ) throws IOException {
+ SolrParams params = req.getParams();
+ String[] snippets = highlighter.getBestFragments( fieldQuery, req.getSearcher().getReader(), docId, fieldName,
+ params.getFieldInt( fieldName, HighlightParams.FRAGSIZE, 100 ),
+ params.getFieldInt( fieldName, HighlightParams.SNIPPETS, 1 ) );
+ if( snippets != null && snippets.length > 0 )
+ docSummaries.add( fieldName, snippets );
+ else
+ alternateField( docSummaries, params, doc, fieldName );
+ }
+
+ private void alternateField( NamedList docSummaries, SolrParams params, Document doc, String fieldName ){
+ String alternateField = params.getFieldParam(fieldName, HighlightParams.ALTERNATE_FIELD);
+ if (alternateField != null && alternateField.length() > 0) {
+ String[] altTexts = doc.getValues(alternateField);
+ if (altTexts != null && altTexts.length > 0){
+ int alternateFieldLen = params.getFieldInt(fieldName, HighlightParams.ALTERNATE_FIELD_LENGTH,0);
+ if( alternateFieldLen <= 0 ){
+ docSummaries.add(fieldName, altTexts);
+ }
+ else{
+ List<String> altList = new ArrayList<String>();
+ int len = 0;
+ for( String altText: altTexts ){
+ altList.add( len + altText.length() > alternateFieldLen ?
+ new String(altText.substring( 0, alternateFieldLen - len )) : altText );
+ len += altText.length();
+ if( len >= alternateFieldLen ) break;
+ }
+ docSummaries.add(fieldName, altList);
+ }
+ }
+ }
+ }
+
private TokenStream createAnalyzerTStream(IndexSchema schema, String fieldName, String docText) throws IOException {
TokenStream tstream;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/GapFragmenter.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/GapFragmenter.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/GapFragmenter.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/GapFragmenter.java Tue Jan 12 15:59:01 2010
@@ -16,11 +16,9 @@
*/
package org.apache.solr.highlight;
-import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute;
-import org.apache.lucene.analysis.tokenattributes.TermAttribute;
import org.apache.lucene.search.highlight.Fragmenter;
import org.apache.lucene.search.highlight.NullFragmenter;
import org.apache.lucene.search.highlight.SimpleFragmenter;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/SolrHighlighter.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/SolrHighlighter.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/SolrHighlighter.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/SolrHighlighter.java Tue Jan 12 15:59:01 2010
@@ -46,6 +46,15 @@
// Thread safe registry
protected final Map<String,SolrFragmenter> fragmenters =
Collections.synchronizedMap( new HashMap<String, SolrFragmenter>() );
+
+ // Thread safe registry
+ protected final Map<String, SolrFragListBuilder> fragListBuilders =
+ Collections.synchronizedMap( new HashMap<String, SolrFragListBuilder>() );
+
+ // Thread safe registry
+ protected final Map<String, SolrFragmentsBuilder> fragmentsBuilders =
+ Collections.synchronizedMap( new HashMap<String, SolrFragmentsBuilder>() );
+
@Deprecated
public abstract void initalize( SolrConfig config );
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/request/SolrRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/request/SolrRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/request/SolrRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/request/SolrRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -19,6 +19,7 @@
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.response.SolrQueryResponse;
/**
* Implementations of <code>SolrRequestHandler</code> are called to handle query requests.
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDIntField.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDIntField.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDIntField.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDIntField.java Tue Jan 12 15:59:01 2010
@@ -21,8 +21,8 @@
import org.apache.solr.search.function.ValueSource;
import org.apache.lucene.document.Fieldable;
import org.apache.solr.util.BCDUtils;
-import org.apache.solr.request.XMLWriter;
-import org.apache.solr.request.TextResponseWriter;
+import org.apache.solr.response.TextResponseWriter;
+import org.apache.solr.response.XMLWriter;
import java.util.Map;
import java.io.IOException;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDLongField.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDLongField.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDLongField.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDLongField.java Tue Jan 12 15:59:01 2010
@@ -17,7 +17,7 @@
package org.apache.solr.schema;
-import org.apache.solr.request.XMLWriter;
+import org.apache.solr.response.XMLWriter;
import org.apache.lucene.document.Fieldable;
import java.io.IOException;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDStrField.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDStrField.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDStrField.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDStrField.java Tue Jan 12 15:59:01 2010
@@ -17,7 +17,7 @@
package org.apache.solr.schema;
-import org.apache.solr.request.XMLWriter;
+import org.apache.solr.response.XMLWriter;
import org.apache.lucene.document.Fieldable;
import java.io.IOException;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BinaryField.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BinaryField.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BinaryField.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BinaryField.java Tue Jan 12 15:59:01 2010
@@ -17,8 +17,8 @@
package org.apache.solr.schema;
-import org.apache.solr.request.XMLWriter;
-import org.apache.solr.request.TextResponseWriter;
+import org.apache.solr.response.TextResponseWriter;
+import org.apache.solr.response.XMLWriter;
import org.apache.solr.common.util.Base64;
import org.apache.lucene.document.Fieldable;
import org.apache.lucene.document.Field;
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BoolField.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BoolField.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BoolField.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BoolField.java Tue Jan 12 15:59:01 2010
@@ -26,8 +26,8 @@
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.tokenattributes.TermAttribute;
import org.apache.lucene.document.Fieldable;
-import org.apache.solr.request.XMLWriter;
-import org.apache.solr.request.TextResponseWriter;
+import org.apache.solr.response.TextResponseWriter;
+import org.apache.solr.response.XMLWriter;
import org.apache.solr.analysis.SolrAnalyzer;
import java.util.Map;