You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/06/25 01:07:38 UTC
svn commit: r1139458 [17/24] - in /lucene/dev/branches/solr2193: ./
dev-tools/eclipse/ dev-tools/idea/.idea/ dev-tools/idea/lucene/
dev-tools/idea/solr/ dev-tools/idea/solr/contrib/clustering/
dev-tools/maven/ dev-tools/maven/modules/analysis/icu/ dev-...
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/CoreContainer.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/CoreContainer.java Fri Jun 24 23:07:10 2011
@@ -54,7 +54,7 @@ import org.xml.sax.InputSource;
/**
- * @version $Id$
+ *
* @since solr 1.3
*/
public class CoreContainer
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/IndexDeletionPolicyWrapper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/IndexDeletionPolicyWrapper.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/IndexDeletionPolicyWrapper.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/IndexDeletionPolicyWrapper.java Fri Jun 24 23:07:10 2011
@@ -32,7 +32,7 @@ import java.util.concurrent.atomic.Atomi
* commit points for certain amounts of time to support features such as index replication
* or snapshooting directly out of a live index directory.
*
- * @version $Id$
+ *
* @see org.apache.lucene.index.IndexDeletionPolicy
*/
public class IndexDeletionPolicyWrapper implements IndexDeletionPolicy {
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/JmxMonitoredMap.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/JmxMonitoredMap.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/JmxMonitoredMap.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/JmxMonitoredMap.java Fri Jun 24 23:07:10 2011
@@ -40,7 +40,7 @@ import org.slf4j.LoggerFactory;
* Please see http://wiki.apache.org/solr/SolrJmx for instructions on usage and configuration
* </p>
*
- * @version $Id$
+ *
* @see org.apache.solr.core.SolrConfig.JmxConfiguration
* @since solr 1.3
*/
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/PluginInfo.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/PluginInfo.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/PluginInfo.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/PluginInfo.java Fri Jun 24 23:07:10 2011
@@ -27,7 +27,7 @@ import static java.util.Collections.unmo
/**
* An Object which represents a Plugin of any type
- * @version $Id$
+ *
*/
public class PluginInfo {
public final String name, className, type;
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/QuerySenderListener.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/QuerySenderListener.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/QuerySenderListener.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/QuerySenderListener.java Fri Jun 24 23:07:10 2011
@@ -30,7 +30,7 @@ import org.apache.solr.response.SolrQuer
import java.util.List;
/**
- * @version $Id$
+ *
*/
public class QuerySenderListener extends AbstractSolrEventListener {
public QuerySenderListener(SolrCore core) {
@@ -41,7 +41,9 @@ public class QuerySenderListener extends
public void newSearcher(SolrIndexSearcher newSearcher, SolrIndexSearcher currentSearcher) {
final SolrIndexSearcher searcher = newSearcher;
log.info("QuerySenderListener sending requests to " + newSearcher);
- for (NamedList nlst : (List<NamedList>)args.get("queries")) {
+ List<NamedList> allLists = (List<NamedList>)args.get("queries");
+ if (allLists == null) return;
+ for (NamedList nlst : allLists) {
SolrQueryRequest req = null;
try {
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/RequestHandlers.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/RequestHandlers.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/RequestHandlers.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/RequestHandlers.java Fri Jun 24 23:07:10 2011
@@ -209,7 +209,6 @@ final class RequestHandlers {
* This is a private class - if there is a real need for it to be public, it could
* move
*
- * @version $Id$
* @since solr 1.2
*/
private static final class LazyRequestHandlerWrapper implements SolrRequestHandler, SolrInfoMBean
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrConfig.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrConfig.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrConfig.java Fri Jun 24 23:07:10 2011
@@ -61,7 +61,7 @@ import java.io.IOException;
* configuration data for a a Solr instance -- typically found in
* "solrconfig.xml".
*
- * @version $Id$
+ *
*/
public class SolrConfig extends Config {
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrCore.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrCore.java Fri Jun 24 23:07:10 2011
@@ -70,7 +70,7 @@ import java.lang.reflect.Constructor;
/**
- * @version $Id$
+ *
*/
public final class SolrCore implements SolrInfoMBean {
public static final String version="1.0";
@@ -727,7 +727,7 @@ public final class SolrCore implements S
if( closeHooks != null ) {
for( CloseHook hook : closeHooks ) {
try {
- hook.close( this );
+ hook.preClose( this );
} catch (Throwable e) {
SolrException.log(log, e);
}
@@ -766,7 +766,15 @@ public final class SolrCore implements S
SolrException.log(log,e);
}
-
+ if( closeHooks != null ) {
+ for( CloseHook hook : closeHooks ) {
+ try {
+ hook.postClose( this );
+ } catch (Throwable e) {
+ SolrException.log(log, e);
+ }
+ }
+ }
}
/** Current core usage count. */
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrDeletionPolicy.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrDeletionPolicy.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrDeletionPolicy.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrDeletionPolicy.java Fri Jun 24 23:07:10 2011
@@ -38,7 +38,7 @@ import java.util.Locale;
* for certain amounts of time to support features such as index replication
* or snapshooting directly out of a live index directory.
*
- * @version $Id$
+ *
* @see org.apache.lucene.index.IndexDeletionPolicy
*/
public class SolrDeletionPolicy implements IndexDeletionPolicy, NamedListInitializedPlugin {
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrEventListener.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrEventListener.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrEventListener.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrEventListener.java Fri Jun 24 23:07:10 2011
@@ -24,7 +24,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * @version $Id$
+ *
*/
public interface SolrEventListener extends NamedListInitializedPlugin{
static final Logger log = LoggerFactory.getLogger(SolrCore.class);
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrInfoMBean.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrInfoMBean.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrInfoMBean.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/core/SolrInfoMBean.java Fri Jun 24 23:07:10 2011
@@ -26,7 +26,7 @@ import org.apache.solr.common.util.Named
* for use by objects which are 'pluggable' to make server administration
* easier.
*
- * @version $Id$
+ *
*/
public interface SolrInfoMBean {
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java Fri Jun 24 23:07:10 2011
@@ -25,10 +25,11 @@ import org.apache.lucene.analysis.tokena
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.index.Payload;
import org.apache.lucene.util.Attribute;
+import org.apache.lucene.util.AttributeImpl;
import org.apache.lucene.util.AttributeSource;
import org.apache.lucene.util.AttributeReflector;
import org.apache.lucene.util.CharsRef;
-import org.apache.lucene.util.SorterTemplate;
+import org.apache.lucene.util.ArrayUtil;
import org.apache.solr.analysis.CharFilterFactory;
import org.apache.solr.analysis.TokenFilterFactory;
import org.apache.solr.analysis.TokenizerChain;
@@ -43,11 +44,12 @@ import org.apache.solr.schema.FieldType;
import java.io.IOException;
import java.io.StringReader;
import java.util.*;
+import org.apache.commons.lang.ArrayUtils;
/**
* A base class for all analysis request handlers.
*
- * @version $Id$
+ *
* @since solr 1.4
*/
public abstract class AnalysisRequestHandlerBase extends RequestHandlerBase {
@@ -120,10 +122,13 @@ public abstract class AnalysisRequestHan
ListBasedTokenStream listBasedTokenStream = new ListBasedTokenStream(tokens);
for (TokenFilterFactory tokenFilterFactory : filtfacs) {
+ for (final AttributeSource tok : tokens) {
+ tok.getAttribute(TokenTrackingAttribute.class).freezeStage();
+ }
tokenStream = tokenFilterFactory.create(listBasedTokenStream);
- List<AttributeSource> tokenList = analyzeTokenStream(tokenStream);
- namedList.add(tokenStream.getClass().getName(), convertTokensToNamedLists(tokenList, context));
- listBasedTokenStream = new ListBasedTokenStream(tokenList);
+ tokens = analyzeTokenStream(tokenStream);
+ namedList.add(tokenStream.getClass().getName(), convertTokensToNamedLists(tokens, context));
+ listBasedTokenStream = new ListBasedTokenStream(tokens);
}
return namedList;
@@ -160,15 +165,19 @@ public abstract class AnalysisRequestHan
* @return List of tokens produced from the TokenStream
*/
private List<AttributeSource> analyzeTokenStream(TokenStream tokenStream) {
- List<AttributeSource> tokens = new ArrayList<AttributeSource>();
+ final List<AttributeSource> tokens = new ArrayList<AttributeSource>();
+ final PositionIncrementAttribute posIncrAtt = tokenStream.addAttribute(PositionIncrementAttribute.class);
+ final TokenTrackingAttribute trackerAtt = tokenStream.addAttribute(TokenTrackingAttribute.class);
// for backwards compatibility, add all "common" attributes
- tokenStream.addAttribute(PositionIncrementAttribute.class);
tokenStream.addAttribute(OffsetAttribute.class);
tokenStream.addAttribute(TypeAttribute.class);
final BytesRef bytes = new BytesRef();
try {
tokenStream.reset();
+ int position = 0;
while (tokenStream.incrementToken()) {
+ position += posIncrAtt.getPositionIncrement();
+ trackerAtt.setActPosition(position);
tokens.add(tokenStream.cloneAttributes());
}
} catch (IOException ioe) {
@@ -183,6 +192,8 @@ public abstract class AnalysisRequestHan
put(OffsetAttribute.class.getName() + "#startOffset", "start");
put(OffsetAttribute.class.getName() + "#endOffset", "end");
put(TypeAttribute.class.getName() + "#type", "type");
+ put(TokenTrackingAttribute.class.getName() + "#position", "position");
+ put(TokenTrackingAttribute.class.getName() + "#positionHistory", "positionHistory");
}});
/**
@@ -193,49 +204,35 @@ public abstract class AnalysisRequestHan
*
* @return List of NamedLists containing the relevant information taken from the tokens
*/
- private List<NamedList> convertTokensToNamedLists(final List<AttributeSource> tokens, AnalysisContext context) {
+ private List<NamedList> convertTokensToNamedLists(final List<AttributeSource> tokenList, AnalysisContext context) {
final List<NamedList> tokensNamedLists = new ArrayList<NamedList>();
-
- final int[] positions = new int[tokens.size()];
- int position = 0;
- for (int i = 0, c = tokens.size(); i < c; i++) {
- AttributeSource token = tokens.get(i);
- position += token.addAttribute(PositionIncrementAttribute.class).getPositionIncrement();
- positions[i] = position;
- }
+ final FieldType fieldType = context.getFieldType();
+ final AttributeSource[] tokens = tokenList.toArray(new AttributeSource[tokenList.size()]);
// sort the tokens by absoulte position
- new SorterTemplate() {
- @Override
- protected void swap(int i, int j) {
- final int p = positions[i];
- positions[i] = positions[j];
- positions[j] = p;
- Collections.swap(tokens, i, j);
+ ArrayUtil.mergeSort(tokens, new Comparator<AttributeSource>() {
+ public int compare(AttributeSource a, AttributeSource b) {
+ return arrayCompare(
+ a.getAttribute(TokenTrackingAttribute.class).getPositions(),
+ b.getAttribute(TokenTrackingAttribute.class).getPositions()
+ );
}
- @Override
- protected int compare(int i, int j) {
- return positions[i] - positions[j];
- }
-
- @Override
- protected void setPivot(int i) {
- pivot = positions[i];
- }
-
- @Override
- protected int comparePivot(int j) {
- return pivot - positions[j];
+ private int arrayCompare(int[] a, int[] b) {
+ int p = 0;
+ final int stop = Math.min(a.length, b.length);
+ while(p < stop) {
+ int diff = a[p] - b[p];
+ if (diff != 0) return diff;
+ p++;
+ }
+ // One is a prefix of the other, or, they are equal:
+ return a.length - b.length;
}
-
- private int pivot;
- }.mergeSort(0, tokens.size() - 1);
-
- FieldType fieldType = context.getFieldType();
+ });
- for (int i = 0, c = tokens.size(); i < c; i++) {
- AttributeSource token = tokens.get(i);
+ for (int i = 0; i < tokens.length; i++) {
+ AttributeSource token = tokens[i];
final NamedList<Object> tokenNamedList = new SimpleOrderedMap<Object>();
final TermToBytesRefAttribute termAtt = token.getAttribute(TermToBytesRefAttribute.class);
BytesRef rawBytes = termAtt.getBytesRef();
@@ -256,8 +253,6 @@ public abstract class AnalysisRequestHan
tokenNamedList.add("match", true);
}
- tokenNamedList.add("position", positions[i]);
-
token.reflectWith(new AttributeReflector() {
public void reflect(Class<? extends Attribute> attClass, String key, Object value) {
// leave out position and bytes term
@@ -312,8 +307,8 @@ public abstract class AnalysisRequestHan
/**
* TokenStream that iterates over a list of pre-existing Tokens
+ * @lucene.internal
*/
- // TODO refactor to support custom attributes
protected final static class ListBasedTokenStream extends TokenStream {
private final List<AttributeSource> tokens;
private Iterator<AttributeSource> tokenIterator;
@@ -350,6 +345,68 @@ public abstract class AnalysisRequestHan
}
}
+ /** This is an {@link Attribute} used to track the positions of tokens
+ * in the analysis chain.
+ * @lucene.internal This class is only public for usage by the {@link AttributeSource} API.
+ */
+ public interface TokenTrackingAttribute extends Attribute {
+ void freezeStage();
+ void setActPosition(int pos);
+ int[] getPositions();
+ void reset(int[] basePositions, int position);
+ }
+
+ /** Implementation of {@link TokenTrackingAttribute}.
+ * @lucene.internal This class is only public for usage by the {@link AttributeSource} API.
+ */
+ public static final class TokenTrackingAttributeImpl extends AttributeImpl implements TokenTrackingAttribute {
+ private int[] basePositions = new int[0];
+ private int position = 0;
+ private transient int[] cachedPositions = null;
+
+ public void freezeStage() {
+ this.basePositions = getPositions();
+ this.position = 0;
+ this.cachedPositions = null;
+ }
+
+ public void setActPosition(int pos) {
+ this.position = pos;
+ this.cachedPositions = null;
+ }
+
+ public int[] getPositions() {
+ if (cachedPositions == null) {
+ cachedPositions = ArrayUtils.add(basePositions, position);
+ }
+ return cachedPositions;
+ }
+
+ public void reset(int[] basePositions, int position) {
+ this.basePositions = basePositions;
+ this.position = position;
+ this.cachedPositions = null;
+ }
+
+ @Override
+ public void clear() {
+ // we do nothing here, as all attribute values are controlled externally by consumer
+ }
+
+ @Override
+ public void reflectWith(AttributeReflector reflector) {
+ reflector.reflect(TokenTrackingAttribute.class, "position", position);
+ // convert to Integer[] array, as only such one can be serialized by ResponseWriters
+ reflector.reflect(TokenTrackingAttribute.class, "positionHistory", ArrayUtils.toObject(getPositions()));
+ }
+
+ @Override
+ public void copyTo(AttributeImpl target) {
+ final TokenTrackingAttribute t = (TokenTrackingAttribute) target;
+ t.reset(basePositions, position);
+ }
+ }
+
/**
* Serves as the context of an analysis process. This context contains the following constructs
*/
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java Fri Jun 24 23:07:10 2011
@@ -38,7 +38,7 @@ import java.util.List;
/**
* Update handler which uses the JavaBin format
*
- * @version $Id$
+ *
* @see org.apache.solr.client.solrj.request.JavaBinUpdateRequestCodec
* @see org.apache.solr.common.util.JavaBinCodec
* @since solr 1.4
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/CSVRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/CSVRequestHandler.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/CSVRequestHandler.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/CSVRequestHandler.java Fri Jun 24 23:07:10 2011
@@ -37,7 +37,7 @@ import java.util.List;
import java.io.*;
/**
- * @version $Id$
+ *
*/
public class CSVRequestHandler extends ContentStreamHandlerBase {
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/DocumentAnalysisRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/DocumentAnalysisRequestHandler.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/DocumentAnalysisRequestHandler.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/DocumentAnalysisRequestHandler.java Fri Jun 24 23:07:10 2011
@@ -73,7 +73,7 @@ import java.util.*;
* supports the "analysis.showmatch" parameter which when set to {@code true}, all field tokens that match the query
* tokens will be marked as a "match".
*
- * @version $Id$
+ *
* @since solr 1.4
*/
public class DocumentAnalysisRequestHandler extends AnalysisRequestHandlerBase {
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java Fri Jun 24 23:07:10 2011
@@ -86,7 +86,7 @@ import java.io.IOException;
* <p>Note that if neither analysis.fieldname and analysis.fieldtype is specified, then the default search field's
* analyzer is used.</p>
*
- * @version $Id$
+ *
* @since solr 1.4
*/
public class FieldAnalysisRequestHandler extends AnalysisRequestHandlerBase {
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/ReplicationHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/ReplicationHandler.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/ReplicationHandler.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/ReplicationHandler.java Fri Jun 24 23:07:10 2011
@@ -60,7 +60,7 @@ import java.util.zip.DeflaterOutputStrea
* <li>Abort a snap pull (command=abort)</li> <li>Enable/Disable polling the master for new versions (command=enablepoll
* or command=disablepoll)</li> </ol> </p>
*
- * @version $Id$
+ *
* @since solr 1.4
*/
public class ReplicationHandler extends RequestHandlerBase implements SolrCoreAware {
@@ -885,11 +885,15 @@ public class ReplicationHandler extends
*/
private void registerCloseHook() {
core.addCloseHook(new CloseHook() {
- public void close(SolrCore core) {
+ @Override
+ public void preClose(SolrCore core) {
if (snapPuller != null) {
snapPuller.destroy();
}
}
+
+ @Override
+ public void postClose(SolrCore core) {}
});
}
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/RequestHandlerUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/RequestHandlerUtils.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/RequestHandlerUtils.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/RequestHandlerUtils.java Fri Jun 24 23:07:10 2011
@@ -32,7 +32,7 @@ import org.apache.solr.update.processor.
/**
* Common helper functions for RequestHandlers
*
- * @version $Id$
+ *
* @since solr 1.2
*/
public class RequestHandlerUtils
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/SnapPuller.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/SnapPuller.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/SnapPuller.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/SnapPuller.java Fri Jun 24 23:07:10 2011
@@ -55,7 +55,7 @@ import java.util.zip.InflaterInputStream
* <p/> Provides functionality of downloading changed index files as well as config files and a timer for scheduling fetches from the
* master. </p>
*
- * @version $Id$
+ *
* @since solr 1.4
*/
public class SnapPuller {
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/SnapShooter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/SnapShooter.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/SnapShooter.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/SnapShooter.java Fri Jun 24 23:07:10 2011
@@ -39,7 +39,7 @@ import org.slf4j.LoggerFactory;
/**
* <p/> Provides functionality equivalent to the snapshooter script </p>
*
- * @version $Id$
+ *
* @since solr 1.4
*/
public class SnapShooter {
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/StandardRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/StandardRequestHandler.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/StandardRequestHandler.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/StandardRequestHandler.java Fri Jun 24 23:07:10 2011
@@ -23,7 +23,7 @@ import java.net.MalformedURLException;
import java.net.URL;
/**
- * @version $Id$
+ *
*
* All of the following options may be configured for this handler
* in the solrconfig as defaults, and may be overriden as request parameters.
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/AdminHandlers.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/AdminHandlers.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/AdminHandlers.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/AdminHandlers.java Fri Jun 24 23:07:10 2011
@@ -31,7 +31,7 @@ import org.apache.solr.util.plugin.SolrC
/**
* A special Handler that registers all standard admin handlers
*
- * @version $Id$
+ *
* @since solr 1.3
*/
public class AdminHandlers implements SolrCoreAware, SolrRequestHandler
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java Fri Jun 24 23:07:10 2011
@@ -17,6 +17,8 @@
package org.apache.solr.handler.admin;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.util.IOUtils;
import org.apache.solr.cloud.CloudDescriptor;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CoreAdminParams;
@@ -25,10 +27,7 @@ import org.apache.solr.common.params.Sol
import org.apache.solr.common.params.UpdateParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
-import org.apache.solr.core.CoreContainer;
-import org.apache.solr.core.CoreDescriptor;
-import org.apache.solr.core.SolrCore;
-import org.apache.solr.core.DirectoryFactory;
+import org.apache.solr.core.*;
import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.LocalSolrQueryRequest;
@@ -38,17 +37,19 @@ import org.apache.solr.util.RefCounted;
import org.apache.solr.update.MergeIndexesCommand;
import org.apache.solr.update.processor.UpdateRequestProcessor;
import org.apache.solr.update.processor.UpdateRequestProcessorChain;
-import org.apache.lucene.store.Directory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.util.Date;
/**
- * @version $Id$
+ *
* @since solr 1.3
*/
public class CoreAdminHandler extends RequestHandlerBase {
+ protected static Logger log = LoggerFactory.getLogger(CoreAdminHandler.class);
protected final CoreContainer coreContainer;
public CoreAdminHandler() {
@@ -171,22 +172,53 @@ public class CoreAdminHandler extends Re
}
protected boolean handleMergeAction(SolrQueryRequest req, SolrQueryResponse rsp) throws IOException {
- boolean doPersist = false;
SolrParams params = req.getParams();
- SolrParams required = params.required();
- String cname = required.get(CoreAdminParams.CORE);
+ String cname = params.required().get(CoreAdminParams.CORE);
SolrCore core = coreContainer.getCore(cname);
SolrQueryRequest wrappedReq = null;
+
+ SolrCore[] sourceCores = null;
+ RefCounted<SolrIndexSearcher>[] searchers = null;
+ // stores readers created from indexDir param values
+ IndexReader[] readersToBeClosed = null;
if (core != null) {
try {
- doPersist = coreContainer.isPersistent();
-
- String[] dirNames = required.getParams(CoreAdminParams.INDEX_DIR);
-
- DirectoryFactory dirFactory = core.getDirectoryFactory();
- Directory[] dirs = new Directory[dirNames.length];
- for (int i = 0; i < dirNames.length; i++) {
- dirs[i] = dirFactory.open(dirNames[i]);
+ String[] dirNames = params.getParams(CoreAdminParams.INDEX_DIR);
+ if (dirNames == null || dirNames.length == 0) {
+ String[] sources = params.getParams("srcCore");
+ if (sources == null || sources.length == 0)
+ throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,
+ "At least one indexDir or srcCore must be specified");
+
+ sourceCores = new SolrCore[sources.length];
+ for (int i = 0; i < sources.length; i++) {
+ String source = sources[i];
+ SolrCore srcCore = coreContainer.getCore(source);
+ if (srcCore == null)
+ throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
+ "Core: " + source + " does not exist");
+ sourceCores[i] = srcCore;
+ }
+ } else {
+ readersToBeClosed = new IndexReader[dirNames.length];
+ DirectoryFactory dirFactory = core.getDirectoryFactory();
+ for (int i = 0; i < dirNames.length; i++) {
+ readersToBeClosed[i] = IndexReader.open(dirFactory.open(dirNames[i]), true);
+ }
+ }
+
+ IndexReader[] readers = null;
+ if (readersToBeClosed != null) {
+ readers = readersToBeClosed;
+ } else {
+ readers = new IndexReader[sourceCores.length];
+ searchers = new RefCounted[sourceCores.length];
+ for (int i = 0; i < sourceCores.length; i++) {
+ SolrCore solrCore = sourceCores[i];
+ // record the searchers so that we can decref
+ searchers[i] = solrCore.getSearcher();
+ readers[i] = searchers[i].get().getIndexReader();
+ }
}
UpdateRequestProcessorChain processorChain =
@@ -194,13 +226,24 @@ public class CoreAdminHandler extends Re
wrappedReq = new LocalSolrQueryRequest(core, req.getParams());
UpdateRequestProcessor processor =
processorChain.createProcessor(wrappedReq, rsp);
- processor.processMergeIndexes(new MergeIndexesCommand(dirs, req));
+ processor.processMergeIndexes(new MergeIndexesCommand(readers, req));
} finally {
+ if (searchers != null) {
+ for (RefCounted<SolrIndexSearcher> searcher : searchers) {
+ if (searcher != null) searcher.decref();
+ }
+ }
+ if (sourceCores != null) {
+ for (SolrCore solrCore : sourceCores) {
+ if (solrCore != null) solrCore.close();
+ }
+ }
+ if (readersToBeClosed != null) IOUtils.closeSafely(true, readersToBeClosed);
+ if (wrappedReq != null) wrappedReq.close();
core.close();
- wrappedReq.close();
}
}
- return doPersist;
+ return coreContainer.isPersistent();
}
/**
@@ -350,6 +393,23 @@ public class CoreAdminHandler extends Re
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
"No such core exists '"+cname+"'");
}
+ if (params.getBool(CoreAdminParams.DELETE_INDEX, false)) {
+ core.addCloseHook(new CloseHook() {
+ @Override
+ public void preClose(SolrCore core) {}
+
+ @Override
+ public void postClose(SolrCore core) {
+ File dataDir = new File(core.getIndexDir());
+ for (File file : dataDir.listFiles()) {
+ if (!file.delete()) {
+ log.error(file.getAbsolutePath() + " could not be deleted on core unload");
+ }
+ }
+ if (!dataDir.delete()) log.error(dataDir.getAbsolutePath() + " could not be deleted on core unload");
+ }
+ });
+ }
core.close();
return coreContainer.isPersistent();
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java Fri Jun 24 23:07:10 2011
@@ -81,7 +81,7 @@ import org.apache.solr.search.SolrIndexS
* For more documentation see:
* http://wiki.apache.org/solr/LukeRequestHandler
*
- * @version $Id$
+ *
* @since solr 1.2
*/
public class LukeRequestHandler extends RequestHandlerBase
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java Fri Jun 24 23:07:10 2011
@@ -36,7 +36,7 @@ import org.apache.solr.response.SolrQuer
* that it works nicely with an XSLT transformation. Until we have a nice
* XSLT front end for /admin, the format is still open to change.
*
- * @version $Id$
+ *
* @since solr 1.2
*/
public class PluginInfoHandler extends RequestHandlerBase
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/PropertiesRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/PropertiesRequestHandler.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/PropertiesRequestHandler.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/PropertiesRequestHandler.java Fri Jun 24 23:07:10 2011
@@ -25,7 +25,7 @@ import org.apache.solr.request.SolrQuery
import org.apache.solr.response.SolrQueryResponse;
/**
- * @version $Id$
+ *
* @since solr 1.2
*/
public class PropertiesRequestHandler extends RequestHandlerBase
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/ShowFileRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/ShowFileRequestHandler.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/ShowFileRequestHandler.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/ShowFileRequestHandler.java Fri Jun 24 23:07:10 2011
@@ -72,7 +72,7 @@ import org.apache.solr.response.SolrQuer
* http://localhost:8983/solr/admin/file?file=schema.xml&contentType=text/plain
* </pre>
*
- * @version $Id$
+ *
* @since solr 1.3
*/
public class ShowFileRequestHandler extends RequestHandlerBase
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java Fri Jun 24 23:07:10 2011
@@ -50,7 +50,7 @@ import org.slf4j.LoggerFactory;
* that it works nicely with an XSLT transformation. Until we have a nice
* XSLT front end for /admin, the format is still open to change.
*
- * @version $Id$
+ *
* @since solr 1.2
*/
public class SystemInfoHandler extends RequestHandlerBase
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/ThreadDumpHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/ThreadDumpHandler.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/ThreadDumpHandler.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/admin/ThreadDumpHandler.java Fri Jun 24 23:07:10 2011
@@ -35,7 +35,7 @@ import org.apache.solr.response.SolrQuer
* that it works nicely with an XSLT transformation. Until we have a nice
* XSLT front end for /admin, the format is still open to change.
*
- * @version $Id$
+ *
* @since solr 1.2
*/
public class ThreadDumpHandler extends RequestHandlerBase
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/DebugComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/DebugComponent.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/DebugComponent.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/DebugComponent.java Fri Jun 24 23:07:10 2011
@@ -34,7 +34,7 @@ import org.apache.solr.util.SolrPluginUt
/**
* Adds debugging information to a request.
*
- * @version $Id$
+ *
* @since solr 1.3
*/
public class DebugComponent extends SearchComponent
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/FacetComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/FacetComponent.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/FacetComponent.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/FacetComponent.java Fri Jun 24 23:07:10 2011
@@ -38,7 +38,7 @@ import java.util.*;
/**
* TODO!
*
- * @version $Id$
+ *
* @since solr 1.3
*/
public class FacetComponent extends SearchComponent
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/HighlightComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/HighlightComponent.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/HighlightComponent.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/HighlightComponent.java Fri Jun 24 23:07:10 2011
@@ -41,7 +41,7 @@ import java.util.List;
/**
* TODO!
*
- * @version $Id$
+ *
* @since solr 1.3
*/
public class HighlightComponent extends SearchComponent implements PluginInfoInitialized, SolrCoreAware
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java Fri Jun 24 23:07:10 2011
@@ -34,7 +34,7 @@ import org.apache.solr.search.SolrIndexS
/**
* TODO!
*
- * @version $Id$
+ *
* @since solr 1.3
*/
public class MoreLikeThisComponent extends SearchComponent
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/QueryComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/QueryComponent.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/QueryComponent.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/QueryComponent.java Fri Jun 24 23:07:10 2011
@@ -45,8 +45,6 @@ import org.apache.solr.response.SolrQuer
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.search.*;
-import org.apache.solr.search.function.FunctionQuery;
-import org.apache.solr.search.function.QueryValueSource;
import org.apache.solr.util.SolrPluginUtils;
import java.io.IOException;
@@ -56,7 +54,7 @@ import java.util.*;
/**
* TODO!
*
- * @version $Id$
+ *
* @since solr 1.3
*/
public class QueryComponent extends SearchComponent
@@ -128,7 +126,6 @@ public class QueryComponent extends Sear
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e);
}
- checkDistributed(rb);
}
@@ -183,7 +180,7 @@ public class QueryComponent extends Sear
slices = cloudState.getSlices(cloudDescriptor.getCollectionName());
rb.slices = slices.keySet().toArray(new String[slices.size()]);
rb.shards = new String[rb.slices.length];
-
+
/***
rb.slices = new String[slices.size()];
for (int i=0; i<rb.slices.length; i++) {
@@ -315,16 +312,25 @@ public class QueryComponent extends Sear
boolean doGroup = params.getBool(GroupParams.GROUP, false);
if (doGroup) {
try {
- Grouping grouping = new Grouping(searcher, result, cmd);
-
+ int maxDocsPercentageToCache = params.getInt(GroupParams.GROUP_CACHE_PERCENTAGE, 0);
+ boolean cacheSecondPassSearch = maxDocsPercentageToCache >= 1 && maxDocsPercentageToCache <= 100;
String[] fields = params.getParams(GroupParams.GROUP_FIELD);
String[] funcs = params.getParams(GroupParams.GROUP_FUNC);
String[] queries = params.getParams(GroupParams.GROUP_QUERY);
String groupSortStr = params.get(GroupParams.GROUP_SORT);
boolean main = params.getBool(GroupParams.GROUP_MAIN, false);
- String format = params.get(GroupParams.GROUP_FORMAT);
- Grouping.Format defaultFormat = "simple".equals(format) ? Grouping.Format.Simple : Grouping.Format.Grouped;
+ String formatStr = params.get(GroupParams.GROUP_FORMAT, Grouping.Format.grouped.name());
+ Grouping.Format defaultFormat;
+ try {
+ defaultFormat = Grouping.Format.valueOf(formatStr);
+ } catch (IllegalArgumentException e) {
+ throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, String.format("Illegal %s parameter", GroupParams.GROUP_FORMAT));
+ }
+
+ boolean includeTotalGroupCount = params.getBool(GroupParams.GROUP_TOTAL_COUNT, false);
+ Grouping.TotalCount defaultTotalCount = includeTotalGroupCount ? Grouping.TotalCount.grouped : Grouping.TotalCount.ungrouped;
+ Sort sort = cmd.getSort();
// groupSort defaults to sort
Sort groupSort = groupSortStr == null ? cmd.getSort() : QueryParsing.parseSort(groupSortStr, req);
@@ -332,95 +338,47 @@ public class QueryComponent extends Sear
int groupOffsetDefault = params.getInt(GroupParams.GROUP_OFFSET, 0);
int docsPerGroupDefault = params.getInt(GroupParams.GROUP_LIMIT, 1);
- // temporary: implement all group-by-field as group-by-func
- if (funcs == null) {
- funcs = fields;
- } else if (fields != null) {
- // catenate functions and fields
- String[] both = new String[fields.length + funcs.length];
- System.arraycopy(fields, 0, both, 0, fields.length);
- System.arraycopy(funcs, 0, both, fields.length, funcs.length);
- funcs = both;
+ Grouping grouping = new Grouping(searcher, result, cmd, cacheSecondPassSearch, maxDocsPercentageToCache, main);
+ grouping.setSort(sort)
+ .setGroupSort(groupSort)
+ .setDefaultFormat(defaultFormat)
+ .setLimitDefault(limitDefault)
+ .setDefaultTotalCount(defaultTotalCount)
+ .setDocsPerGroupDefault(docsPerGroupDefault)
+ .setGroupOffsetDefault(groupOffsetDefault);
+
+ if (fields != null) {
+ for (String field : fields) {
+ grouping.addFieldCommand(field, rb.req);
+ }
}
-
if (funcs != null) {
for (String groupByStr : funcs) {
- QParser parser = QParser.getParser(groupByStr, "func", rb.req);
- Query q = parser.getQuery();
- Grouping.CommandFunc gc = grouping.new CommandFunc();
- gc.groupSort = groupSort;
-
- if (q instanceof FunctionQuery) {
- gc.groupBy = ((FunctionQuery)q).getValueSource();
- } else {
- gc.groupBy = new QueryValueSource(q, 0.0f);
- }
- gc.key = groupByStr;
- gc.numGroups = limitDefault;
- gc.docsPerGroup = docsPerGroupDefault;
- gc.groupOffset = groupOffsetDefault;
- gc.offset = cmd.getOffset();
- gc.sort = cmd.getSort();
- gc.format = defaultFormat;
-
- if (main) {
- gc.main = true;
- gc.format = Grouping.Format.Simple;
- main = false;
- }
-
- if (gc.format == Grouping.Format.Simple) {
- gc.groupOffset = 0; // doesn't make sense
- }
-
- grouping.add(gc);
+ grouping.addFunctionCommand(groupByStr, rb.req);
}
}
if (queries != null) {
for (String groupByStr : queries) {
- QParser parser = QParser.getParser(groupByStr, null, rb.req);
- Query gq = parser.getQuery();
- Grouping.CommandQuery gc = grouping.new CommandQuery();
- gc.query = gq;
- gc.groupSort = groupSort;
- gc.key = groupByStr;
- gc.numGroups = limitDefault;
- gc.docsPerGroup = docsPerGroupDefault;
- gc.groupOffset = groupOffsetDefault;
-
- // these two params will only be used if this is for the main result set
- gc.offset = cmd.getOffset();
- gc.numGroups = limitDefault;
-
- gc.format = defaultFormat;
-
- if (main) {
- gc.main = true;
- gc.format = Grouping.Format.Simple;
- main = false;
- }
- if (gc.format == Grouping.Format.Simple) {
- gc.docsPerGroup = gc.numGroups; // doesn't make sense to limit to one
- gc.groupOffset = gc.offset;
- }
-
- grouping.add(gc);
+ grouping.addQueryCommand(groupByStr, rb.req);
}
}
-
if (rb.doHighlights || rb.isDebug()) {
// we need a single list of the returned docs
cmd.setFlags(SolrIndexSearcher.GET_DOCLIST);
}
- // searcher.search(result,cmd);
grouping.execute();
- rb.setResult( result );
+ if (grouping.isSignalCacheWarning()) {
+ rsp.add(
+ "cacheWarning",
+ String.format("Cache limit of %d percent relative to maxdoc has exceeded. Please increase cache size or disable caching.", maxDocsPercentageToCache)
+ );
+ }
+ rb.setResult(result);
rsp.add("grouped", result.groupedResults);
- // TODO: get "hits" a different way to log
if (grouping.mainResult != null) {
ResultContext ctx = new ResultContext();
@@ -428,10 +386,10 @@ public class QueryComponent extends Sear
ctx.query = null; // TODO? add the query?
rsp.add("response", ctx);
rsp.getToLog().add("hits", grouping.mainResult.matches());
+ } else if (!grouping.getCommands().isEmpty()) { // Can never be empty since grouping.execute() checks for this.
+ rsp.getToLog().add("hits", grouping.getCommands().get(0).getMatches());
}
-
return;
-
} catch (ParseException e) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e);
}
@@ -476,8 +434,8 @@ public class QueryComponent extends Sear
}
for (SortField sortField: sortFields) {
- int type = sortField.getType();
- if (type==SortField.SCORE || type==SortField.DOC) continue;
+ SortField.Type type = sortField.getType();
+ if (type==SortField.Type.SCORE || type==SortField.Type.DOC) continue;
FieldComparator comparator = null;
FieldComparator comparators[] = (leaves==null) ? null : new FieldComparator[leaves.length];
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/QueryElevationComponent.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/QueryElevationComponent.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/QueryElevationComponent.java Fri Jun 24 23:07:10 2011
@@ -46,7 +46,6 @@ import org.apache.lucene.index.IndexRead
import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.*;
-import org.apache.lucene.util.StringHelper;
import org.apache.solr.cloud.ZkController;
import org.apache.lucene.util.BytesRef;
import org.apache.solr.common.SolrException;
@@ -72,7 +71,7 @@ import org.xml.sax.InputSource;
/**
* A component to elevate some documents to the top of the result set.
*
- * @version $Id$
+ *
* @since solr 1.3
*/
public class QueryElevationComponent extends SearchComponent implements SolrCoreAware
@@ -161,7 +160,7 @@ public class QueryElevationComponent ext
throw new SolrException( SolrException.ErrorCode.SERVER_ERROR,
"QueryElevationComponent requires the schema to have a uniqueKeyField implemented using StrField" );
}
- idField = StringHelper.intern(sf.getName());
+ idField = sf.getName();
forceElevation = initArgs.getBool( QueryElevationParams.FORCE_ELEVATION, forceElevation );
try {
@@ -379,7 +378,7 @@ public class QueryElevationComponent ext
if( sortSpec.getSort() == null ) {
sortSpec.setSort( new Sort( new SortField[] {
new SortField(idField, booster.comparatorSource, false ),
- new SortField(null, SortField.SCORE, false)
+ new SortField(null, SortField.Type.SCORE, false)
}));
}
else {
@@ -388,12 +387,12 @@ public class QueryElevationComponent ext
SortField[] current = sortSpec.getSort().getSort();
ArrayList<SortField> sorts = new ArrayList<SortField>( current.length + 1 );
// Perhaps force it to always sort by score
- if( force && current[0].getType() != SortField.SCORE ) {
+ if( force && current[0].getType() != SortField.Type.SCORE ) {
sorts.add( new SortField(idField, booster.comparatorSource, false ) );
modify = true;
}
for( SortField sf : current ) {
- if( sf.getType() == SortField.SCORE ) {
+ if( sf.getType() == SortField.Type.SCORE ) {
sorts.add( new SortField(idField, booster.comparatorSource, sf.getReverse() ) );
modify = true;
}
@@ -476,8 +475,8 @@ class ElevationComparatorSource extends
}
@Override
- public FieldComparator newComparator(final String fieldname, final int numHits, int sortPos, boolean reversed) throws IOException {
- return new FieldComparator() {
+ public FieldComparator<Integer> newComparator(final String fieldname, final int numHits, int sortPos, boolean reversed) throws IOException {
+ return new FieldComparator<Integer>() {
FieldCache.DocTermsIndex idIndex;
private final int[] values = new int[numHits];
@@ -517,7 +516,7 @@ class ElevationComparatorSource extends
}
@Override
- public Comparable value(int slot) {
+ public Integer value(int slot) {
return values[slot];
}
};
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/ResponseBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/ResponseBuilder.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/ResponseBuilder.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/ResponseBuilder.java Fri Jun 24 23:07:10 2011
@@ -36,7 +36,7 @@ import java.util.Map;
/**
* This class is experimental and will be changing in the future.
*
- * @version $Id$
+ *
* @since solr 1.3
*/
public class ResponseBuilder
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/SearchComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/SearchComponent.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/SearchComponent.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/SearchComponent.java Fri Jun 24 23:07:10 2011
@@ -28,7 +28,7 @@ import org.apache.solr.util.plugin.Named
/**
* TODO!
*
- * @version $Id$
+ *
* @since solr 1.3
*/
public abstract class SearchComponent implements SolrInfoMBean, NamedListInitializedPlugin
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/SearchHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/SearchHandler.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/SearchHandler.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/SearchHandler.java Fri Jun 24 23:07:10 2011
@@ -17,44 +17,13 @@
package org.apache.solr.handler.component;
-import java.net.MalformedURLException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.concurrent.Callable;
-import java.util.concurrent.CompletionService;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ExecutorCompletionService;
-import java.util.concurrent.Future;
-import java.util.concurrent.SynchronousQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
-import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.lucene.queryParser.ParseException;
-import org.apache.solr.client.solrj.SolrRequest;
-import org.apache.solr.client.solrj.SolrResponse;
-import org.apache.solr.client.solrj.SolrServer;
-import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
-import org.apache.solr.client.solrj.impl.LBHttpSolrServer;
-import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.ShardParams;
-import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.RTimer;
-import org.apache.solr.common.util.StrUtils;
+import org.apache.solr.core.PluginInfo;
import org.apache.solr.core.SolrCore;
import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.request.SolrQueryRequest;
@@ -64,6 +33,8 @@ import org.apache.solr.util.plugin.SolrC
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.*;
+
/**
*
* Refer SOLR-281
@@ -75,26 +46,15 @@ public class SearchHandler extends Reque
static final String INIT_FIRST_COMPONENTS = "first-components";
static final String INIT_LAST_COMPONENTS = "last-components";
- // socket timeout measured in ms, closes a socket if read
- // takes longer than x ms to complete. throws
- // java.net.SocketTimeoutException: Read timed out exception
- static final String INIT_SO_TIMEOUT = "shard-socket-timeout";
-
- // connection timeout measures in ms, closes a socket if connection
- // cannot be established within x ms. with a
- // java.net.SocketTimeoutException: Connection timed out
- static final String INIT_CONNECTION_TIMEOUT = "shard-connection-timeout";
- // URL scheme to be used in distributed search.
- static final String INIT_URL_SCHEME = "url-scheme";
- static int soTimeout = 0; //current default values
- static int connectionTimeout = 0; //current default values
- public static String scheme = "http://"; //current default values
+
protected static Logger log = LoggerFactory.getLogger(SearchHandler.class);
protected List<SearchComponent> components = null;
+ private ShardHandlerFactory shardHandlerFactory ;
+ private PluginInfo shfInfo;
protected List<String> getDefaultComponents()
{
@@ -108,6 +68,16 @@ public class SearchHandler extends Reque
return names;
}
+ public void init(PluginInfo info) {
+ init(info.initArgs);
+ for (PluginInfo child : info.children) {
+ if("shardHandlerFactory".equals(child.type)){
+ this.shfInfo = child;
+ break;
+ }
+ }
+ }
+
/**
* Initialize the components based on name. Note, if using {@link #INIT_FIRST_COMPONENTS} or {@link #INIT_LAST_COMPONENTS},
* then the {@link DebugComponent} will always occur last. If this is not desired, then one must explicitly declare all components using
@@ -161,24 +131,12 @@ public class SearchHandler extends Reque
components.add(dbgCmp);
log.info("Adding debug component:" + dbgCmp);
}
-
- Object co = initArgs.get(INIT_CONNECTION_TIMEOUT);
- if (co != null) {
- connectionTimeout = (Integer) co;
- log.info("Setting shard-connection-timeout to: " + connectionTimeout);
- }
-
- Object so = initArgs.get(INIT_SO_TIMEOUT);
- if (so != null) {
- soTimeout = (Integer) so;
- log.info("Setting shard-socket-timeout to: " + soTimeout);
- }
-
- Object urlScheme = initArgs.get(INIT_URL_SCHEME);
- if (urlScheme != null) {
- SearchHandler.scheme = (String) urlScheme + "://";
- log.info("Setting url-scheme to: " + urlScheme);
+ if(shfInfo ==null) {
+ Map m = new HashMap();
+ m.put("class",HttpShardHandlerFactory.class.getName());
+ shfInfo = new PluginInfo("shardHandlerFactory", m,null,Collections.<PluginInfo>emptyList());
}
+ shardHandlerFactory = core.createInitInstance(shfInfo, ShardHandlerFactory.class, null, null);
}
public List<SearchComponent> getComponents() {
@@ -204,6 +162,10 @@ public class SearchHandler extends Reque
final RTimer timer = rb.isDebug() ? new RTimer() : null;
+
+ ShardHandler shardHandler1 = shardHandlerFactory.getShardHandler();
+ shardHandler1.checkDistributed(rb);
+
if (timer == null) {
// non-debugging prepare phase
for( SearchComponent c : components ) {
@@ -251,8 +213,6 @@ public class SearchHandler extends Reque
} else {
// a distributed request
- HttpCommComponent comm = new HttpCommComponent();
-
if (rb.outgoing == null) {
rb.outgoing = new LinkedList<ShardRequest>();
}
@@ -290,17 +250,18 @@ public class SearchHandler extends Reque
params.remove("indent");
params.remove(CommonParams.HEADER_ECHO_PARAMS);
params.set(ShardParams.IS_SHARD, true); // a sub (shard) request
+ params.set(ShardParams.SHARD_URL, shard); // so the shard knows what was asked
if (rb.requestInfo != null) {
// we could try and detect when this is needed, but it could be tricky
params.set("NOW", Long.toString(rb.requestInfo.getNOW().getTime()));
}
- String shardHandler = req.getParams().get(ShardParams.SHARDS_QT);
- if (shardHandler == null) {
+ String shardQt = req.getParams().get(ShardParams.SHARDS_QT);
+ if (shardQt == null) {
params.remove(CommonParams.QT);
} else {
- params.set(CommonParams.QT, shardHandler);
+ params.set(CommonParams.QT, shardQt);
}
- comm.submit(sreq, shard, params);
+ shardHandler1.submit(sreq, shard, params);
}
}
@@ -309,13 +270,13 @@ public class SearchHandler extends Reque
// the outgoing queue, send them out immediately (by exiting
// this loop)
while (rb.outgoing.size() == 0) {
- ShardResponse srsp = comm.takeCompletedOrError();
+ ShardResponse srsp = shardHandler1.takeCompletedOrError();
if (srsp == null) break; // no more requests to wait for
// Was there an exception? If so, abort everything and
// rethrow
if (srsp.getException() != null) {
- comm.cancelAll();
+ shardHandler1.cancelAll();
if (srsp.getException() instanceof SolrException) {
throw (SolrException)srsp.getException();
} else {
@@ -376,225 +337,4 @@ public class SearchHandler extends Reque
// TODO: generalize how a comm component can fit into search component framework
// TODO: statics should be per-core singletons
-class HttpCommComponent {
-
- // We want an executor that doesn't take up any resources if
- // it's not used, so it could be created statically for
- // the distributed search component if desired.
- //
- // Consider CallerRuns policy and a lower max threads to throttle
- // requests at some point (or should we simply return failure?)
- static Executor commExecutor = new ThreadPoolExecutor(
- 0,
- Integer.MAX_VALUE,
- 5, TimeUnit.SECONDS, // terminate idle threads after 5 sec
- new SynchronousQueue<Runnable>() // directly hand off tasks
- );
-
-
- static HttpClient client;
- static Random r = new Random();
- static LBHttpSolrServer loadbalancer;
-
- static {
- MultiThreadedHttpConnectionManager mgr = new MultiThreadedHttpConnectionManager();
- mgr.getParams().setDefaultMaxConnectionsPerHost(20);
- mgr.getParams().setMaxTotalConnections(10000);
- mgr.getParams().setConnectionTimeout(SearchHandler.connectionTimeout);
- mgr.getParams().setSoTimeout(SearchHandler.soTimeout);
- // mgr.getParams().setStaleCheckingEnabled(false);
-
- client = new HttpClient(mgr);
-
- // prevent retries (note: this didn't work when set on mgr.. needed to be set on client)
- DefaultHttpMethodRetryHandler retryhandler = new DefaultHttpMethodRetryHandler(0, false);
- client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, retryhandler);
-
- try {
- loadbalancer = new LBHttpSolrServer(client);
- } catch (MalformedURLException e) {
- // should be impossible since we're not passing any URLs here
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,e);
- }
- }
-
- CompletionService<ShardResponse> completionService = new ExecutorCompletionService<ShardResponse>(commExecutor);
- Set<Future<ShardResponse>> pending = new HashSet<Future<ShardResponse>>();
-
- // maps "localhost:8983|localhost:7574" to a shuffled List("http://localhost:8983","http://localhost:7574")
- // This is primarily to keep track of what order we should use to query the replicas of a shard
- // so that we use the same replica for all phases of a distributed request.
- Map<String,List<String>> shardToURLs = new HashMap<String,List<String>>();
-
- HttpCommComponent() {
- }
-
- private static class SimpleSolrResponse extends SolrResponse {
- long elapsedTime;
- NamedList<Object> nl;
-
- @Override
- public long getElapsedTime() {
- return elapsedTime;
- }
-
- @Override
- public NamedList<Object> getResponse() {
- return nl;
- }
-
- @Override
- public void setResponse(NamedList<Object> rsp) {
- nl = rsp;
- }
- }
-
-
- // Not thread safe... don't use in Callable.
- // Don't modify the returned URL list.
- private List<String> getURLs(String shard) {
- List<String> urls = shardToURLs.get(shard);
- if (urls==null) {
- urls = StrUtils.splitSmart(shard,"|",true);
-
- // convert shard to URL
- for (int i=0; i<urls.size(); i++) {
- urls.set(i, SearchHandler.scheme + urls.get(i));
- }
-
- //
- // Shuffle the list instead of use round-robin by default.
- // This prevents accidental synchronization where multiple shards could get in sync
- // and query the same replica at the same time.
- //
- if (urls.size() > 1)
- Collections.shuffle(urls, r);
- shardToURLs.put(shard, urls);
- }
- return urls;
- }
-
-
- void submit(final ShardRequest sreq, final String shard, final ModifiableSolrParams params) {
- // do this outside of the callable for thread safety reasons
- final List<String> urls = getURLs(shard);
-
- Callable<ShardResponse> task = new Callable<ShardResponse>() {
- public ShardResponse call() throws Exception {
-
- ShardResponse srsp = new ShardResponse();
- srsp.setShardRequest(sreq);
- srsp.setShard(shard);
- SimpleSolrResponse ssr = new SimpleSolrResponse();
- srsp.setSolrResponse(ssr);
- long startTime = System.currentTimeMillis();
-
- try {
- params.remove(CommonParams.WT); // use default (currently javabin)
- params.remove(CommonParams.VERSION);
-
- // SolrRequest req = new QueryRequest(SolrRequest.METHOD.POST, "/select");
- // use generic request to avoid extra processing of queries
- QueryRequest req = new QueryRequest(params);
- req.setMethod(SolrRequest.METHOD.POST);
-
- // no need to set the response parser as binary is the default
- // req.setResponseParser(new BinaryResponseParser());
-
- // if there are no shards available for a slice, urls.size()==0
- if (urls.size()==0) {
- // TODO: what's the right error code here? We should use the same thing when
- // all of the servers for a shard are down.
- throw new SolrException(SolrException.ErrorCode.SERVICE_UNAVAILABLE, "no servers hosting shard: " + shard);
- }
- if (urls.size() <= 1) {
- String url = urls.get(0);
- srsp.setShardAddress(url);
- SolrServer server = new CommonsHttpSolrServer(url, client);
- ssr.nl = server.request(req);
- } else {
- LBHttpSolrServer.Rsp rsp = loadbalancer.request(new LBHttpSolrServer.Req(req, urls));
- ssr.nl = rsp.getResponse();
- srsp.setShardAddress(rsp.getServer());
- }
- } catch (Throwable th) {
- srsp.setException(th);
- if (th instanceof SolrException) {
- srsp.setResponseCode(((SolrException)th).code());
- } else {
- srsp.setResponseCode(-1);
- }
- }
-
- ssr.elapsedTime = System.currentTimeMillis() - startTime;
-
- return srsp;
- }
- };
-
- pending.add( completionService.submit(task) );
- }
-
- /** returns a ShardResponse of the last response correlated with a ShardRequest */
- ShardResponse take() {
- while (pending.size() > 0) {
- try {
- Future<ShardResponse> future = completionService.take();
- pending.remove(future);
- ShardResponse rsp = future.get();
- rsp.getShardRequest().responses.add(rsp);
- if (rsp.getShardRequest().responses.size() == rsp.getShardRequest().actualShards.length) {
- return rsp;
- }
- } catch (InterruptedException e) {
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
- } catch (ExecutionException e) {
- // should be impossible... the problem with catching the exception
- // at this level is we don't know what ShardRequest it applied to
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Impossible Exception",e);
- }
- }
- return null;
- }
-
-
- /** returns a ShardResponse of the last response correlated with a ShardRequest,
- * or immediately returns a ShardResponse if there was an error detected
- */
- ShardResponse takeCompletedOrError() {
- while (pending.size() > 0) {
- try {
- Future<ShardResponse> future = completionService.take();
- pending.remove(future);
- ShardResponse rsp = future.get();
- if (rsp.getException() != null) return rsp; // if exception, return immediately
- // add response to the response list... we do this after the take() and
- // not after the completion of "call" so we know when the last response
- // for a request was received. Otherwise we might return the same
- // request more than once.
- rsp.getShardRequest().responses.add(rsp);
- if (rsp.getShardRequest().responses.size() == rsp.getShardRequest().actualShards.length) {
- return rsp;
- }
- } catch (InterruptedException e) {
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
- } catch (ExecutionException e) {
- // should be impossible... the problem with catching the exception
- // at this level is we don't know what ShardRequest it applied to
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Impossible Exception",e);
- }
- }
- return null;
- }
-
-
- void cancelAll() {
- for (Future<ShardResponse> future : pending) {
- // TODO: any issues with interrupting? shouldn't be if
- // there are finally blocks to release connections.
- future.cancel(true);
- }
- }
-
-}
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/ShardDoc.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/ShardDoc.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/ShardDoc.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/ShardDoc.java Fri Jun 24 23:07:10 2011
@@ -89,8 +89,8 @@ class ShardFieldSortedHitQueue extends P
for (int i = 0; i < n; ++i) {
// keep track of the named fields
- int type = fields[i].getType();
- if (type!=SortField.SCORE && type!=SortField.DOC) {
+ SortField.Type type = fields[i].getType();
+ if (type!=SortField.Type.SCORE && type!=SortField.Type.DOC) {
fieldNames.add(fields[i].getField());
}
@@ -98,8 +98,8 @@ class ShardFieldSortedHitQueue extends P
comparators[i] = getCachedComparator(fieldname, fields[i]
.getType(), fields[i].getComparatorSource());
- if (fields[i].getType() == SortField.STRING) {
- this.fields[i] = new SortField(fieldname, SortField.STRING,
+ if (fields[i].getType() == SortField.Type.STRING) {
+ this.fields[i] = new SortField(fieldname, SortField.Type.STRING,
fields[i].getReverse());
} else {
this.fields[i] = new SortField(fieldname, fields[i].getType(),
@@ -144,16 +144,16 @@ class ShardFieldSortedHitQueue extends P
return c < 0;
}
- Comparator getCachedComparator(String fieldname, int type, FieldComparatorSource factory) {
+ Comparator getCachedComparator(String fieldname, SortField.Type type, FieldComparatorSource factory) {
Comparator comparator = null;
switch (type) {
- case SortField.SCORE:
+ case SCORE:
comparator = comparatorScore(fieldname);
break;
- case SortField.STRING:
+ case STRING:
comparator = comparatorNatural(fieldname);
break;
- case SortField.CUSTOM:
+ case CUSTOM:
if (factory instanceof MissingStringLastComparatorSource){
comparator = comparatorMissingStringLast(fieldname);
} else {
@@ -163,7 +163,7 @@ class ShardFieldSortedHitQueue extends P
// throw new RuntimeException("Custom sort not supported factory is "+factory.getClass());
}
break;
- case SortField.DOC:
+ case DOC:
// TODO: we can support this!
throw new RuntimeException("Doc sort not supported");
default:
@@ -282,4 +282,4 @@ class ShardFieldSortedHitQueue extends P
};
}
-}
\ No newline at end of file
+}
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/ShardResponse.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/ShardResponse.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/ShardResponse.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/ShardResponse.java Fri Jun 24 23:07:10 2011
@@ -56,12 +56,12 @@ public final class ShardResponse {
return shard;
}
- void setShardRequest(ShardRequest rsp)
+ public void setShardRequest(ShardRequest rsp)
{
this.req = rsp;
}
- void setSolrResponse(SolrResponse rsp)
+ public void setSolrResponse(SolrResponse rsp)
{
this.rsp = rsp;
}
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/SpellCheckComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/SpellCheckComponent.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/SpellCheckComponent.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/SpellCheckComponent.java Fri Jun 24 23:07:10 2011
@@ -172,11 +172,12 @@ public class SpellCheckComponent extends
NamedList response) {
int maxCollations = params.getInt(SPELLCHECK_MAX_COLLATIONS, 1);
int maxCollationTries = params.getInt(SPELLCHECK_MAX_COLLATION_TRIES, 0);
+ int maxCollationEvaluations = params.getInt(SPELLCHECK_MAX_COLLATION_EVALUATIONS, 10000);
boolean collationExtendedResults = params.getBool(SPELLCHECK_COLLATE_EXTENDED_RESULTS, false);
boolean shard = params.getBool(ShardParams.IS_SHARD, false);
SpellCheckCollator collator = new SpellCheckCollator();
- List<SpellCheckCollation> collations = collator.collate(spellingResult, q, rb, maxCollations, maxCollationTries);
+ List<SpellCheckCollation> collations = collator.collate(spellingResult, q, rb, maxCollations, maxCollationTries, maxCollationEvaluations);
//by sorting here we guarantee a non-distributed request returns all
//results in the same order as a distributed request would,
//even in cases when the internal rank is the same.
@@ -434,7 +435,7 @@ public class SpellCheckComponent extends
if (extendedResults) {
Integer o = origVsFreq.get(original);
- if (o != null) result.add(token, o);
+ if (o != null) result.addFrequency(token, o);
for (SuggestWord word : suggestions)
result.add(token, word.string, word.freq);
} else {
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/StatsComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/StatsComponent.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/StatsComponent.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/StatsComponent.java Fri Jun 24 23:07:10 2011
@@ -24,7 +24,6 @@ import java.util.Map;
import org.apache.lucene.search.FieldCache;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.CharsRef;
-import org.apache.noggit.CharArr;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.params.StatsParams;
import org.apache.solr.common.params.ShardParams;
@@ -42,7 +41,7 @@ import org.apache.solr.request.UnInverte
/**
* Stats component calculates simple statistics on numeric field values
*
- * @version $Id$
+ *
* @since solr 1.4
*/
public class StatsComponent extends SearchComponent {
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/TermVectorComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/TermVectorComponent.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/TermVectorComponent.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/TermVectorComponent.java Fri Jun 24 23:07:10 2011
@@ -74,7 +74,7 @@ import java.util.Map;
* </arr>
* </requestHandler></pre>
*
- * @version $Id$
+ *
*/
public class TermVectorComponent extends SearchComponent implements SolrCoreAware {
@@ -296,7 +296,7 @@ public class TermVectorComponent extends
private boolean useOffsets, usePositions;
//private Map<String, Integer> idfCache;
private NamedList<Object> fieldNL;
- private Term currentTerm;
+ private String field;
public TVMapper(IndexReader reader) {
@@ -337,9 +337,8 @@ public class TermVectorComponent extends
private int getDocFreq(BytesRef term) {
int result = 1;
- currentTerm = currentTerm.createTerm(term);
try {
- Terms terms = MultiFields.getTerms(reader, currentTerm.field());
+ Terms terms = MultiFields.getTerms(reader, field);
if (terms != null) {
TermsEnum termsEnum = terms.iterator();
if (termsEnum.seek(term) == TermsEnum.SeekStatus.FOUND) {
@@ -354,10 +353,7 @@ public class TermVectorComponent extends
@Override
public void setExpectations(String field, int numTerms, boolean storeOffsets, boolean storePositions) {
-
- if (fieldOptions.docFreq == true && reader != null) {
- this.currentTerm = new Term(field);
- }
+ this.field = field;
useOffsets = storeOffsets && fieldOptions.offsets;
usePositions = storePositions && fieldOptions.positions;
fieldNL = new NamedList<Object>();
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/TermsComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/TermsComponent.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/TermsComponent.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/handler/component/TermsComponent.java Fri Jun 24 23:07:10 2011
@@ -56,7 +56,7 @@ import java.util.regex.Pattern;
*
* @see org.apache.solr.common.params.TermsParams
* See Lucene's TermEnum class
- * @version $Id$
+ *
*/
public class TermsComponent extends SearchComponent {
public static final int UNLIMITED_MAX_COUNT = -1;
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/request/LocalSolrQueryRequest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/request/LocalSolrQueryRequest.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/request/LocalSolrQueryRequest.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/request/LocalSolrQueryRequest.java Fri Jun 24 23:07:10 2011
@@ -31,7 +31,7 @@ import java.util.Iterator;
// retained more for backward compatibility.
/**
- * @version $Id$
+ *
*/
public class LocalSolrQueryRequest extends SolrQueryRequestBase {
public final static Map emptyArgs = new HashMap(0,1);
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/request/ServletSolrParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/request/ServletSolrParams.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/request/ServletSolrParams.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/request/ServletSolrParams.java Fri Jun 24 23:07:10 2011
@@ -22,7 +22,7 @@ import javax.servlet.ServletRequest;
import org.apache.solr.common.params.MultiMapSolrParams;
/**
- * @version $Id$
+ *
*/
public class ServletSolrParams extends MultiMapSolrParams {
public ServletSolrParams(ServletRequest req) {
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/request/SimpleFacets.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/request/SimpleFacets.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/request/SimpleFacets.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/request/SimpleFacets.java Fri Jun 24 23:07:10 2011
@@ -22,7 +22,6 @@ import org.apache.lucene.queryParser.Par
import org.apache.lucene.search.*;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.CharsRef;
-import org.apache.lucene.util.StringHelper;
import org.apache.lucene.util.UnicodeUtil;
import org.apache.lucene.util.packed.Direct16;
import org.apache.lucene.util.packed.Direct32;
@@ -371,10 +370,9 @@ public class SimpleFacets {
FieldType ft = searcher.getSchema().getFieldType(field);
List<String> terms = StrUtils.splitSmart(termList, ",", true);
NamedList<Integer> res = new NamedList<Integer>();
- Term t = new Term(field);
for (String term : terms) {
String internal = ft.toInternal(term);
- int count = searcher.numDocs(new TermQuery(t.createTerm(internal)), base);
+ int count = searcher.numDocs(new TermQuery(new Term(field, internal)), base);
res.add(term, count);
}
return res;
@@ -674,7 +672,7 @@ public class SimpleFacets {
if (deState==null) {
deState = new SolrIndexSearcher.DocsEnumState();
- deState.fieldName = StringHelper.intern(field);
+ deState.fieldName = field;
deState.deletedDocs = MultiFields.getDeletedDocs(r);
deState.termsEnum = termsEnum;
deState.docsEnum = docsEnum;
Modified: lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/request/SolrQueryRequest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/request/SolrQueryRequest.java?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/request/SolrQueryRequest.java (original)
+++ lucene/dev/branches/solr2193/solr/src/java/org/apache/solr/request/SolrQueryRequest.java Fri Jun 24 23:07:10 2011
@@ -29,7 +29,7 @@ import java.util.Map;
* <p>Container for a request to execute a query.</p>
* <p><code>SolrQueryRequest</code> is not thread safe.</p>
*
- * @version $Id$
+ *
*/
public interface SolrQueryRequest {