You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2012/07/19 17:59:32 UTC
svn commit: r1363400 [26/31] - in /lucene/dev/branches/pforcodec_3892: ./
dev-tools/ dev-tools/eclipse/ dev-tools/idea/.idea/
dev-tools/idea/.idea/copyright/ dev-tools/idea/.idea/libraries/
dev-tools/idea/lucene/ dev-tools/maven/ dev-tools/maven/lucene...
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/DocSetBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/DocSetBase.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/DocSetBase.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/DocSetBase.java Thu Jul 19 15:58:54 2012
@@ -27,8 +27,6 @@ import org.apache.lucene.search.DocIdSet
import org.apache.lucene.search.BitsFilteredDocIdSet;
import org.apache.lucene.index.AtomicReaderContext;
-import java.io.IOException;
-
/** A base class that may be usefull for implementing DocSets */
abstract class DocSetBase implements DocSet {
@@ -140,7 +138,7 @@ abstract class DocSetBase implements Doc
return new Filter() {
@Override
- public DocIdSet getDocIdSet(final AtomicReaderContext context, Bits acceptDocs) throws IOException {
+ public DocIdSet getDocIdSet(final AtomicReaderContext context, Bits acceptDocs) {
AtomicReader reader = context.reader();
// all Solr DocSets that are used as filters only include live docs
final Bits acceptDocs2 = acceptDocs == null ? null : (reader.getLiveDocs() == acceptDocs ? null : acceptDocs);
@@ -155,7 +153,7 @@ abstract class DocSetBase implements Doc
return BitsFilteredDocIdSet.wrap(new DocIdSet() {
@Override
- public DocIdSetIterator iterator() throws IOException {
+ public DocIdSetIterator iterator() {
return new DocIdSetIterator() {
int pos=base-1;
int adjustedDoc=-1;
@@ -166,13 +164,13 @@ abstract class DocSetBase implements Doc
}
@Override
- public int nextDoc() throws IOException {
+ public int nextDoc() {
pos = bs.nextSetBit(pos+1);
return adjustedDoc = (pos>=0 && pos<max) ? pos-base : NO_MORE_DOCS;
}
@Override
- public int advance(int target) throws IOException {
+ public int advance(int target) {
if (target==NO_MORE_DOCS) return adjustedDoc=NO_MORE_DOCS;
pos = bs.nextSetBit(target+base);
return adjustedDoc = (pos>=0 && pos<max) ? pos-base : NO_MORE_DOCS;
@@ -186,7 +184,7 @@ abstract class DocSetBase implements Doc
}
@Override
- public Bits bits() throws IOException {
+ public Bits bits() {
// sparse filters should not use random access
return null;
}
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java Thu Jul 19 15:58:54 2012
@@ -15,11 +15,6 @@
* limitations under the License.
*/
-/*
- * This parser was originally derived from DismaxQParser from Solr.
- * All changes are Copyright 2008, Lucid Imagination, Inc.
- */
-
package org.apache.solr.search;
import java.util.ArrayList;
@@ -52,7 +47,8 @@ import org.apache.solr.schema.FieldType;
import org.apache.solr.util.SolrPluginUtils;
/**
- * An advanced multi-field query parser.
+ * An advanced multi-field query parser based on the DisMax parser.
+ * See Wiki page http://wiki.apache.org/solr/ExtendedDisMax
* @lucene.experimental
*/
public class ExtendedDismaxQParserPlugin extends QParserPlugin {
@@ -134,21 +130,26 @@ class ExtendedDismaxQParser extends QPar
userFields = new UserFields(U.parseFieldBoosts(solrParams.getParams(DMP.UF)));
queryFields = DisMaxQParser.parseQueryFields(req.getSchema(), solrParams);
+
+ // Phrase slop array
+ int pslop[] = new int[4];
+ pslop[0] = solrParams.getInt(DisMaxParams.PS, 0);
+ pslop[2] = solrParams.getInt(DisMaxParams.PS2, pslop[0]);
+ pslop[3] = solrParams.getInt(DisMaxParams.PS3, pslop[0]);
+
// Boosted phrase of the full query string
List<FieldParams> phraseFields =
- U.parseFieldBoostsAndSlop(solrParams.getParams(DMP.PF),0);
+ U.parseFieldBoostsAndSlop(solrParams.getParams(DMP.PF),0,pslop[0]);
// Boosted Bi-Term Shingles from the query string
List<FieldParams> phraseFields2 =
- U.parseFieldBoostsAndSlop(solrParams.getParams("pf2"),2);
+ U.parseFieldBoostsAndSlop(solrParams.getParams(DMP.PF2),2,pslop[2]);
// Boosted Tri-Term Shingles from the query string
List<FieldParams> phraseFields3 =
- U.parseFieldBoostsAndSlop(solrParams.getParams("pf3"),3);
-
+ U.parseFieldBoostsAndSlop(solrParams.getParams(DMP.PF3),3,pslop[3]);
float tiebreaker = solrParams.getFloat(DisMaxParams.TIE, 0.0f);
- int pslop = solrParams.getInt(DisMaxParams.PS, 0);
int qslop = solrParams.getInt(DisMaxParams.QS, 0);
// remove stopwords from mandatory "matching" component?
@@ -226,7 +227,7 @@ class ExtendedDismaxQParser extends QPar
Clause clause = clauses.get(i);
String s = clause.raw;
// and and or won't be operators at the start or end
- if (i>0 && i+1<clauses.size()) {
+ if (lowercaseOperators && i>0 && i+1<clauses.size()) {
if ("AND".equalsIgnoreCase(s)) {
s="AND";
} else if ("OR".equalsIgnoreCase(s)) {
@@ -332,11 +333,10 @@ class ExtendedDismaxQParser extends QPar
// full phrase and shingles
for (FieldParams phraseField: allPhraseFields) {
- int slop = (phraseField.getSlop() == 0) ? pslop : phraseField.getSlop();
Map<String,Float> pf = new HashMap<String,Float>(1);
pf.put(phraseField.getField(),phraseField.getBoost());
addShingledPhraseQueries(query, normalClauses, pf,
- phraseField.getWordGrams(),tiebreaker, slop);
+ phraseField.getWordGrams(),tiebreaker, phraseField.getSlop());
}
}
@@ -420,9 +420,8 @@ class ExtendedDismaxQParser extends QPar
* Extracts all the alised fields from the requests and adds them to up
* @param up
* @param tiebreaker
- * @throws ParseException
*/
- private void addAliasesFromRequest(ExtendedSolrQueryParser up, float tiebreaker) throws ParseException {
+ private void addAliasesFromRequest(ExtendedSolrQueryParser up, float tiebreaker) {
Iterator<String> it = solrParams.getParameterNamesIterator();
while(it.hasNext()) {
String param = it.next();
@@ -541,81 +540,81 @@ class ExtendedDismaxQParser extends QPar
}
-
- public static CharSequence partialEscape(CharSequence s) {
- StringBuilder sb = new StringBuilder();
-
- int len = s.length();
- for (int i = 0; i < len; i++) {
- char c = s.charAt(i);
- if (c == ':') {
- // look forward to make sure it's something that won't
- // cause a parse exception (something that won't be escaped... like
- // +,-,:, whitespace
- if (i+1<len && i>0) {
- char ch = s.charAt(i+1);
- if (!(Character.isWhitespace(ch) || ch=='+' || ch=='-' || ch==':')) {
- // OK, at this point the chars after the ':' will be fine.
- // now look back and try to determine if this is a fieldname
- // [+,-]? [letter,_] [letter digit,_,-,.]*
- // This won't cover *all* possible lucene fieldnames, but we should
- // only pick nice names to begin with
- int start, pos;
- for (start=i-1; start>=0; start--) {
- ch = s.charAt(start);
- if (Character.isWhitespace(ch)) break;
- }
-
- // skip whitespace
- pos = start+1;
-
- // skip leading + or -
- ch = s.charAt(pos);
- if (ch=='+' || ch=='-') {
- pos++;
- }
-
- // we don't need to explicitly check for end of string
- // since ':' will act as our sentinal
-
- // first char can't be '-' or '.'
- ch = s.charAt(pos++);
- if (Character.isJavaIdentifierPart(ch)) {
-
- for(;;) {
- ch = s.charAt(pos++);
- if (!(Character.isJavaIdentifierPart(ch) || ch=='-' || ch=='.')) {
- break;
- }
- }
-
- if (pos<=i) {
- // OK, we got to the ':' and everything looked like a valid fieldname, so
- // don't escape the ':'
- sb.append(':');
- continue; // jump back to start of outer-most loop
- }
-
- }
-
-
- }
- }
-
- // we fell through to here, so we should escape this like other reserved chars.
- sb.append('\\');
- }
- else if (c == '\\' || c == '!' || c == '(' || c == ')' ||
- c == '^' || c == '[' || c == ']' ||
- c == '{' || c == '}' || c == '~' || c == '*' || c == '?'
- )
- {
- sb.append('\\');
- }
- sb.append(c);
- }
- return sb;
- }
+// FIXME: Not in use
+// public static CharSequence partialEscape(CharSequence s) {
+// StringBuilder sb = new StringBuilder();
+//
+// int len = s.length();
+// for (int i = 0; i < len; i++) {
+// char c = s.charAt(i);
+// if (c == ':') {
+// // look forward to make sure it's something that won't
+// // cause a parse exception (something that won't be escaped... like
+// // +,-,:, whitespace
+// if (i+1<len && i>0) {
+// char ch = s.charAt(i+1);
+// if (!(Character.isWhitespace(ch) || ch=='+' || ch=='-' || ch==':')) {
+// // OK, at this point the chars after the ':' will be fine.
+// // now look back and try to determine if this is a fieldname
+// // [+,-]? [letter,_] [letter digit,_,-,.]*
+// // This won't cover *all* possible lucene fieldnames, but we should
+// // only pick nice names to begin with
+// int start, pos;
+// for (start=i-1; start>=0; start--) {
+// ch = s.charAt(start);
+// if (Character.isWhitespace(ch)) break;
+// }
+//
+// // skip whitespace
+// pos = start+1;
+//
+// // skip leading + or -
+// ch = s.charAt(pos);
+// if (ch=='+' || ch=='-') {
+// pos++;
+// }
+//
+// // we don't need to explicitly check for end of string
+// // since ':' will act as our sentinal
+//
+// // first char can't be '-' or '.'
+// ch = s.charAt(pos++);
+// if (Character.isJavaIdentifierPart(ch)) {
+//
+// for(;;) {
+// ch = s.charAt(pos++);
+// if (!(Character.isJavaIdentifierPart(ch) || ch=='-' || ch=='.')) {
+// break;
+// }
+// }
+//
+// if (pos<=i) {
+// // OK, we got to the ':' and everything looked like a valid fieldname, so
+// // don't escape the ':'
+// sb.append(':');
+// continue; // jump back to start of outer-most loop
+// }
+//
+// }
+//
+//
+// }
+// }
+//
+// // we fell through to here, so we should escape this like other reserved chars.
+// sb.append('\\');
+// }
+// else if (c == '\\' || c == '!' || c == '(' || c == ')' ||
+// c == '^' || c == '[' || c == ']' ||
+// c == '{' || c == '}' || c == '~' || c == '*' || c == '?'
+// )
+// {
+// sb.append('\\');
+// }
+// sb.append(c);
+// }
+// return sb;
+// }
static class Clause {
@@ -625,6 +624,7 @@ class ExtendedDismaxQParser extends QPar
}
String field;
+ String rawField; // if the clause is +(foo:bar) then rawField=(foo
boolean isPhrase;
boolean hasWhitespace;
boolean hasSpecialSyntax;
@@ -668,7 +668,9 @@ class ExtendedDismaxQParser extends QPar
}
if (clause.field != null) {
disallowUserField = false;
- pos += clause.field.length(); // skip the field name
+ int colon = s.indexOf(':',pos);
+ clause.rawField = s.substring(pos, colon);
+ pos += colon - pos; // skip the field name
pos++; // skip the ':'
}
@@ -726,6 +728,10 @@ class ExtendedDismaxQParser extends QPar
case '"':
case '+':
case '-':
+ case '\\':
+ case '|':
+ case '&':
+ case '/':
clause.hasSpecialSyntax = true;
sb.append('\\');
}
@@ -795,6 +801,10 @@ class ExtendedDismaxQParser extends QPar
// make sure there is space after the colon, but not whitespace
if (colon<=pos || colon+1>=end || Character.isWhitespace(s.charAt(colon+1))) return null;
char ch = s.charAt(p++);
+ while ((ch=='(' || ch=='+' || ch=='-') && (pos<end)) {
+ ch = s.charAt(p++);
+ pos++;
+ }
if (!Character.isJavaIdentifierPart(ch)) return null;
while (p<colon) {
ch = s.charAt(p++);
@@ -1151,7 +1161,7 @@ class ExtendedDismaxQParser extends QPar
return lst;
}
- private Query getQuery() throws ParseException {
+ private Query getQuery() {
try {
switch (type) {
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/FastLRUCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/FastLRUCache.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/FastLRUCache.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/FastLRUCache.java Thu Jul 19 15:58:54 2012
@@ -20,9 +20,7 @@ import org.apache.solr.common.SolrExcept
import org.apache.solr.util.ConcurrentLRUCache;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
-import org.apache.solr.core.SolrCore;
-import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
@@ -136,7 +134,7 @@ public class FastLRUCache<K,V> extends S
cache.setAlive(state == State.LIVE);
}
- public void warm(SolrIndexSearcher searcher, SolrCache old) throws IOException {
+ public void warm(SolrIndexSearcher searcher, SolrCache old) {
if (regenerator == null) return;
long warmingStartTime = System.currentTimeMillis();
FastLRUCache other = (FastLRUCache) old;
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/FieldParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/FieldParams.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/FieldParams.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/FieldParams.java Thu Jul 19 15:58:54 2012
@@ -21,7 +21,7 @@ package org.apache.solr.search;
**/
public class FieldParams {
private final int wordGrams; // make bigrams if 2, trigrams if 3, or all if 0
- private final int slop; // null defaults to ps parameter
+ private final int slop;
private final float boost;
private final String field;
public FieldParams(String field, int wordGrams, int slop, float boost) {
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/FieldQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/FieldQParserPlugin.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/FieldQParserPlugin.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/FieldQParserPlugin.java Thu Jul 19 15:58:54 2012
@@ -16,8 +16,7 @@
*/
package org.apache.solr.search;
-import org.apache.lucene.queryparser.classic.ParseException;
-import org.apache.lucene.search.*;
+import org.apache.lucene.search.Query;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.request.SolrQueryRequest;
@@ -42,7 +41,7 @@ public class FieldQParserPlugin extends
public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
return new QParser(qstr, localParams, params, req) {
@Override
- public Query parse() throws ParseException {
+ public Query parse() {
String field = localParams.get(QueryParsing.F);
String queryText = localParams.get(QueryParsing.V);
SchemaField sf = req.getSchema().getField(field);
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/Grouping.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/Grouping.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/Grouping.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/Grouping.java Thu Jul 19 15:58:54 2012
@@ -376,7 +376,7 @@ public class Grouping {
cachedCollector.replay(secondPhaseCollectors);
} else {
signalCacheWarning = true;
- logger.warn(String.format("The grouping cache is active, but not used because it exceeded the max cache limit of %d percent", maxDocsPercentageToCache));
+ logger.warn(String.format(Locale.ROOT, "The grouping cache is active, but not used because it exceeded the max cache limit of %d percent", maxDocsPercentageToCache));
logger.warn("Please increase cache size or disable group caching.");
searchWithTimeLimiter(luceneFilter, secondPhaseCollectors);
}
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java Thu Jul 19 15:58:54 2012
@@ -135,7 +135,7 @@ class JoinQuery extends Query {
private float queryWeight;
ResponseBuilder rb;
- public JoinQueryWeight(SolrIndexSearcher searcher) throws IOException {
+ public JoinQueryWeight(SolrIndexSearcher searcher) {
this.fromSearcher = searcher;
SolrRequestInfo info = SolrRequestInfo.getRequestInfo();
if (info != null) {
@@ -175,7 +175,7 @@ class JoinQuery extends Query {
final RefCounted<SolrIndexSearcher> ref = fromRef;
info.addCloseHook(new Closeable() {
@Override
- public void close() throws IOException {
+ public void close() {
ref.decref();
}
});
@@ -183,7 +183,7 @@ class JoinQuery extends Query {
info.addCloseHook(new Closeable() {
@Override
- public void close() throws IOException {
+ public void close() {
fromCore.close();
}
});
@@ -532,6 +532,11 @@ class JoinQuery extends Query {
public float score() throws IOException {
return score;
}
+
+ @Override
+ public float freq() throws IOException {
+ return 1;
+ }
@Override
public int advance(int target) throws IOException {
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/LFUCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/LFUCache.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/LFUCache.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/LFUCache.java Thu Jul 19 15:58:54 2012
@@ -22,7 +22,6 @@ import org.apache.solr.common.util.Simpl
import org.apache.solr.core.SolrCore;
import org.apache.solr.util.ConcurrentLFUCache;
-import java.io.IOException;
import java.io.Serializable;
import java.net.URL;
import java.util.List;
@@ -155,7 +154,7 @@ public class LFUCache<K, V> implements S
return state;
}
- public void warm(SolrIndexSearcher searcher, SolrCache old) throws IOException {
+ public void warm(SolrIndexSearcher searcher, SolrCache old) {
if (regenerator == null) return;
long warmingStartTime = System.currentTimeMillis();
LFUCache other = (LFUCache) old;
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/LRUCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/LRUCache.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/LRUCache.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/LRUCache.java Thu Jul 19 15:58:54 2012
@@ -17,7 +17,6 @@
package org.apache.solr.search;
-import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -144,7 +143,7 @@ public class LRUCache<K,V> extends SolrC
}
}
- public void warm(SolrIndexSearcher searcher, SolrCache<K,V> old) throws IOException {
+ public void warm(SolrIndexSearcher searcher, SolrCache<K,V> old) {
if (regenerator==null) return;
long warmingStartTime = System.currentTimeMillis();
LRUCache<K,V> other = (LRUCache<K,V>)old;
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/PrefixQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/PrefixQParserPlugin.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/PrefixQParserPlugin.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/PrefixQParserPlugin.java Thu Jul 19 15:58:54 2012
@@ -17,7 +17,6 @@
package org.apache.solr.search;
import org.apache.lucene.index.Term;
-import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.search.PrefixQuery;
import org.apache.lucene.search.Query;
import org.apache.solr.common.params.SolrParams;
@@ -40,7 +39,7 @@ public class PrefixQParserPlugin extends
public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
return new QParser(qstr, localParams, params, req) {
@Override
- public Query parse() throws ParseException {
+ public Query parse() {
return new PrefixQuery(new Term(localParams.get(QueryParsing.F), localParams.get(QueryParsing.V)));
}
};
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/QParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/QParser.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/QParser.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/QParser.java Thu Jul 19 15:58:54 2012
@@ -300,15 +300,15 @@ public abstract class QParser {
}
/** Create a <code>QParser</code> to parse <code>qstr</code>,
- * assuming that the default query type is <code>defaultType</code>.
- * The query type may be overridden by local parameters in the query
- * string itself. For example if defaultType=<code>"dismax"</code>
+ * assuming that the default query parser is <code>defaultParser</code>.
+ * The query parser may be overridden by local parameters in the query
+ * string itself. For example if defaultParser=<code>"dismax"</code>
* and qstr=<code>foo</code>, then the dismax query parser will be used
* to parse and construct the query object. However
* if qstr=<code>{!prefix f=myfield}foo</code>
* then the prefix query parser will be used.
*/
- public static QParser getParser(String qstr, String defaultType, SolrQueryRequest req) throws ParseException {
+ public static QParser getParser(String qstr, String defaultParser, SolrQueryRequest req) throws ParseException {
// SolrParams localParams = QueryParsing.getLocalParams(qstr, req.getParams());
String stringIncludingLocalParams = qstr;
@@ -335,18 +335,18 @@ public abstract class QParser {
}
- String type;
+ String parserName;
if (localParams == null) {
- type = defaultType;
+ parserName = defaultParser;
} else {
- type = localParams.get(QueryParsing.TYPE,defaultType);
+ parserName = localParams.get(QueryParsing.TYPE,defaultParser);
qstr = localParams.get("v");
}
- type = type==null ? QParserPlugin.DEFAULT_QTYPE : type;
+ parserName = parserName==null ? QParserPlugin.DEFAULT_QTYPE : parserName;
- QParserPlugin qplug = req.getCore().getQueryPlugin(type);
+ QParserPlugin qplug = req.getCore().getQueryPlugin(parserName);
QParser parser = qplug.createParser(qstr, localParams, req.getParams(), req);
parser.stringIncludingLocalParams = stringIncludingLocalParams;
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/QueryParsing.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/QueryParsing.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/QueryParsing.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/QueryParsing.java Thu Jul 19 15:58:54 2012
@@ -58,8 +58,8 @@ public class QueryParsing {
public static final String OP = "q.op"; // the SolrParam used to override the QueryParser "default operator"
public static final String V = "v"; // value of this parameter
public static final String F = "f"; // field that a query or command pertains to
- public static final String TYPE = "type";// type of this query or command
- public static final String DEFTYPE = "defType"; // default type for any direct subqueries
+ public static final String TYPE = "type";// parser for this query or command
+ public static final String DEFTYPE = "defType"; // default parser for any direct subqueries
public static final String LOCALPARAM_START = "{!";
public static final char LOCALPARAM_END = '}';
public static final String DOCID = "_docid_";
@@ -637,7 +637,7 @@ public class QueryParsing {
}
}
- float getFloat() throws ParseException {
+ float getFloat() {
eatws();
char[] arr = new char[end - pos];
int i;
@@ -657,7 +657,7 @@ public class QueryParsing {
return Float.parseFloat(new String(arr, 0, i));
}
- Number getNumber() throws ParseException {
+ Number getNumber() {
eatws();
int start = pos;
boolean flt = false;
@@ -682,7 +682,7 @@ public class QueryParsing {
}
}
- double getDouble() throws ParseException {
+ double getDouble() {
eatws();
char[] arr = new char[end - pos];
int i;
@@ -702,7 +702,7 @@ public class QueryParsing {
return Double.parseDouble(new String(arr, 0, i));
}
- int getInt() throws ParseException {
+ int getInt() {
eatws();
char[] arr = new char[end - pos];
int i;
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/QueryResultKey.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/QueryResultKey.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/QueryResultKey.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/QueryResultKey.java Thu Jul 19 15:58:54 2012
@@ -20,7 +20,6 @@ package org.apache.solr.search;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
-import java.io.IOException;
import java.util.List;
/** A hash key encapsulating a query, a list of filters, and a sort
@@ -38,7 +37,7 @@ public final class QueryResultKey {
private static SortField[] defaultSort = new SortField[0];
- public QueryResultKey(Query query, List<Query> filters, Sort sort, int nc_flags) throws IOException {
+ public QueryResultKey(Query query, List<Query> filters, Sort sort, int nc_flags) {
this.query = query;
this.sort = sort;
this.filters = filters;
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/RawQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/RawQParserPlugin.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/RawQParserPlugin.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/RawQParserPlugin.java Thu Jul 19 15:58:54 2012
@@ -17,7 +17,6 @@
package org.apache.solr.search;
import org.apache.lucene.index.Term;
-import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
import org.apache.solr.common.params.SolrParams;
@@ -44,7 +43,7 @@ public class RawQParserPlugin extends QP
public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
return new QParser(qstr, localParams, params, req) {
@Override
- public Query parse() throws ParseException {
+ public Query parse() {
return new TermQuery(new Term(localParams.get(QueryParsing.F), localParams.get(QueryParsing.V)));
}
};
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/ReturnFields.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/ReturnFields.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/ReturnFields.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/ReturnFields.java Thu Jul 19 15:58:54 2012
@@ -155,7 +155,7 @@ public class ReturnFields
// like getId, but also accepts dashes for legacy fields
- String getFieldName(QueryParsing.StrParser sp) throws ParseException {
+ String getFieldName(QueryParsing.StrParser sp) {
sp.eatws();
int id_start = sp.pos;
char ch;
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/SolrCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/SolrCache.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/SolrCache.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/SolrCache.java Thu Jul 19 15:58:54 2012
@@ -22,7 +22,6 @@ import org.apache.solr.core.SolrInfoMBea
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
/**
@@ -125,7 +124,7 @@ public interface SolrCache<K,V> extends
* Warm this cache associated with <code>searcher</code> using the <code>old</code>
* cache object. <code>this</code> and <code>old</code> will have the same concrete type.
*/
- void warm(SolrIndexSearcher searcher, SolrCache<K,V> old) throws IOException;
+ void warm(SolrIndexSearcher searcher, SolrCache<K,V> old);
// Q: an alternative to passing the searcher here would be to pass it in
// init and have the cache implementation save it.
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/SolrConstantScoreQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/SolrConstantScoreQuery.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/SolrConstantScoreQuery.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/SolrConstantScoreQuery.java Thu Jul 19 15:58:54 2012
@@ -186,6 +186,11 @@ public class SolrConstantScoreQuery exte
public float score() throws IOException {
return theScore;
}
+
+ @Override
+ public float freq() throws IOException {
+ return 1;
+ }
@Override
public int advance(int target) throws IOException {
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java Thu Jul 19 15:58:54 2012
@@ -37,6 +37,7 @@ import org.apache.lucene.index.*;
import org.apache.lucene.search.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.store.NRTCachingDirectory;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.OpenBitSet;
@@ -118,6 +119,18 @@ public class SolrIndexSearcher extends I
this(core, schema,name, core.getIndexReaderFactory().newReader(directoryFactory.get(path, config.lockType), core), true, enableCache, false, directoryFactory);
}
+ private static String getIndexDir(Directory dir) {
+ if (dir instanceof FSDirectory) {
+ return ((FSDirectory)dir).getDirectory().getAbsolutePath();
+ } else if (dir instanceof NRTCachingDirectory) {
+ // recurse on the delegate
+ return getIndexDir(((NRTCachingDirectory) dir).getDelegate());
+ } else {
+ log.warn("WARNING: Directory impl does not support setting indexDir: " + dir.getClass().getName());
+ return null;
+ }
+ }
+
public SolrIndexSearcher(SolrCore core, IndexSchema schema, String name, DirectoryReader r, boolean closeReader, boolean enableCache, boolean reserveDirectory, DirectoryFactory directoryFactory) throws IOException {
super(r);
this.directoryFactory = directoryFactory;
@@ -134,13 +147,8 @@ public class SolrIndexSearcher extends I
// keep the directory from being released while we use it
directoryFactory.incRef(dir);
}
-
- if (dir instanceof FSDirectory) {
- FSDirectory fsDirectory = (FSDirectory) dir;
- indexDir = fsDirectory.getDirectory().getAbsolutePath();
- } else {
- log.warn("WARNING: Directory impl does not support setting indexDir: " + dir.getClass().getName());
- }
+
+ this.indexDir = getIndexDir(dir);
this.closeReader = closeReader;
setSimilarity(schema.getSimilarity());
@@ -1300,14 +1308,14 @@ public class SolrIndexSearcher extends I
if (!needScores) {
collector = new Collector () {
@Override
- public void setScorer(Scorer scorer) throws IOException {
+ public void setScorer(Scorer scorer) {
}
@Override
- public void collect(int doc) throws IOException {
+ public void collect(int doc) {
numHits[0]++;
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ public void setNextReader(AtomicReaderContext context) {
}
@Override
public boolean acceptsDocsOutOfOrder() {
@@ -1318,7 +1326,7 @@ public class SolrIndexSearcher extends I
collector = new Collector() {
Scorer scorer;
@Override
- public void setScorer(Scorer scorer) throws IOException {
+ public void setScorer(Scorer scorer) {
this.scorer = scorer;
}
@Override
@@ -1328,7 +1336,7 @@ public class SolrIndexSearcher extends I
if (score > topscore[0]) topscore[0]=score;
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ public void setNextReader(AtomicReaderContext context) {
}
@Override
public boolean acceptsDocsOutOfOrder() {
@@ -1441,7 +1449,7 @@ public class SolrIndexSearcher extends I
collector = setCollector = new DocSetDelegateCollector(smallSetSize, maxDoc, new Collector() {
Scorer scorer;
@Override
- public void setScorer(Scorer scorer) throws IOException {
+ public void setScorer(Scorer scorer) {
this.scorer = scorer;
}
@Override
@@ -1450,7 +1458,7 @@ public class SolrIndexSearcher extends I
if (score > topscore[0]) topscore[0]=score;
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ public void setNextReader(AtomicReaderContext context) {
}
@Override
public boolean acceptsDocsOutOfOrder() {
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/SortedIntDocSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/SortedIntDocSet.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/SortedIntDocSet.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/SortedIntDocSet.java Thu Jul 19 15:58:54 2012
@@ -24,11 +24,8 @@ import org.apache.lucene.search.BitsFilt
import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.search.Filter;
-import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.AtomicReaderContext;
-import java.io.IOException;
-
/**
* <code>SortedIntDocSet</code> represents a sorted set of Lucene Document Ids.
*/
@@ -658,7 +655,7 @@ public class SortedIntDocSet extends Doc
int lastEndIdx = 0;
@Override
- public DocIdSet getDocIdSet(final AtomicReaderContext context, final Bits acceptDocs) throws IOException {
+ public DocIdSet getDocIdSet(final AtomicReaderContext context, final Bits acceptDocs) {
AtomicReader reader = context.reader();
// all Solr DocSets that are used as filters only include live docs
final Bits acceptDocs2 = acceptDocs == null ? null : (reader.getLiveDocs() == acceptDocs ? null : acceptDocs);
@@ -695,7 +692,7 @@ public class SortedIntDocSet extends Doc
return BitsFilteredDocIdSet.wrap(new DocIdSet() {
@Override
- public DocIdSetIterator iterator() throws IOException {
+ public DocIdSetIterator iterator() {
return new DocIdSetIterator() {
int idx = startIdx;
int adjustedDoc = -1;
@@ -706,12 +703,12 @@ public class SortedIntDocSet extends Doc
}
@Override
- public int nextDoc() throws IOException {
+ public int nextDoc() {
return adjustedDoc = (idx > endIdx) ? NO_MORE_DOCS : (docs[idx++] - base);
}
@Override
- public int advance(int target) throws IOException {
+ public int advance(int target) {
if (idx > endIdx || target==NO_MORE_DOCS) return adjustedDoc=NO_MORE_DOCS;
target += base;
@@ -757,7 +754,7 @@ public class SortedIntDocSet extends Doc
}
@Override
- public Bits bits() throws IOException {
+ public Bits bits() {
// random access is expensive for this set
return null;
}
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/TermQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/TermQParserPlugin.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/TermQParserPlugin.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/TermQParserPlugin.java Thu Jul 19 15:58:54 2012
@@ -17,7 +17,6 @@
package org.apache.solr.search;
import org.apache.lucene.index.Term;
-import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.util.BytesRef;
@@ -51,7 +50,7 @@ public class TermQParserPlugin extends Q
public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
return new QParser(qstr, localParams, params, req) {
@Override
- public Query parse() throws ParseException {
+ public Query parse() {
String fname = localParams.get(QueryParsing.F);
FieldType ft = req.getSchema().getFieldTypeNoEx(fname);
String val = localParams.get(QueryParsing.V);
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java Thu Jul 19 15:58:54 2012
@@ -529,13 +529,13 @@ public abstract class ValueSourceParser
addParser("pi", new ValueSourceParser() {
@Override
- public ValueSource parse(FunctionQParser fp) throws ParseException {
+ public ValueSource parse(FunctionQParser fp) {
return new DoubleConstValueSource(Math.PI);
}
});
addParser("e", new ValueSourceParser() {
@Override
- public ValueSource parse(FunctionQParser fp) throws ParseException {
+ public ValueSource parse(FunctionQParser fp) {
return new DoubleConstValueSource(Math.E);
}
});
@@ -601,28 +601,28 @@ public abstract class ValueSourceParser
addParser("maxdoc", new ValueSourceParser() {
@Override
- public ValueSource parse(FunctionQParser fp) throws ParseException {
+ public ValueSource parse(FunctionQParser fp) {
return new MaxDocValueSource();
}
});
addParser("numdocs", new ValueSourceParser() {
@Override
- public ValueSource parse(FunctionQParser fp) throws ParseException {
+ public ValueSource parse(FunctionQParser fp) {
return new NumDocsValueSource();
}
});
addParser("true", new ValueSourceParser() {
@Override
- public ValueSource parse(FunctionQParser fp) throws ParseException {
+ public ValueSource parse(FunctionQParser fp) {
return new BoolConstValueSource(true);
}
});
addParser("false", new ValueSourceParser() {
@Override
- public ValueSource parse(FunctionQParser fp) throws ParseException {
+ public ValueSource parse(FunctionQParser fp) {
return new BoolConstValueSource(false);
}
});
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/function/FileFloatSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/function/FileFloatSource.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/function/FileFloatSource.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/function/FileFloatSource.java Thu Jul 19 15:58:54 2012
@@ -31,6 +31,7 @@ import org.apache.lucene.index.DocsEnum;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.MultiFields;
import org.apache.lucene.index.IndexReaderContext;
+import org.apache.lucene.index.ReaderUtil;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.index.AtomicReaderContext;
import org.apache.lucene.queries.function.FunctionValues;
@@ -38,7 +39,7 @@ import org.apache.lucene.queries.functio
import org.apache.lucene.queries.function.docvalues.FloatDocValues;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.util.BytesRef;
-import org.apache.lucene.util.ReaderUtil;
+import org.apache.lucene.util.IOUtils;
import org.apache.solr.core.SolrCore;
import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.handler.RequestHandlerUtils;
@@ -224,7 +225,7 @@ public class FileFloatSource extends Val
return vals;
}
- BufferedReader r = new BufferedReader(new InputStreamReader(is));
+ BufferedReader r = new BufferedReader(new InputStreamReader(is, IOUtils.CHARSET_UTF_8));
String idName = ffs.keyField.getName();
FieldType idType = ffs.keyField.getType();
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/function/ValueSourceRangeFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/function/ValueSourceRangeFilter.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/function/ValueSourceRangeFilter.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/function/ValueSourceRangeFilter.java Thu Jul 19 15:58:54 2012
@@ -81,7 +81,7 @@ public class ValueSourceRangeFilter exte
return valueSource.getValues(context, readerContext).getRangeScorer(readerContext.reader(), lowerVal, upperVal, includeLower, includeUpper);
}
@Override
- public Bits bits() throws IOException {
+ public Bits bits() {
return null; // don't use random access
}
}, acceptDocs);
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/grouping/collector/FilterCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/grouping/collector/FilterCollector.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/grouping/collector/FilterCollector.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/grouping/collector/FilterCollector.java Thu Jul 19 15:58:54 2012
@@ -36,7 +36,7 @@ public class FilterCollector extends Col
private int docBase;
private int matches;
- public FilterCollector(DocSet filter, Collector delegate) throws IOException {
+ public FilterCollector(DocSet filter, Collector delegate) {
this.filter = filter;
this.delegate = delegate;
}
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/SearchGroupsResultTransformer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/SearchGroupsResultTransformer.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/SearchGroupsResultTransformer.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/SearchGroupsResultTransformer.java Thu Jul 19 15:58:54 2012
@@ -74,7 +74,7 @@ public class SearchGroupsResultTransform
/**
* {@inheritDoc}
*/
- public Map<String, Pair<Integer, Collection<SearchGroup<BytesRef>>>> transformToNative(NamedList<NamedList> shardResponse, Sort groupSort, Sort sortWithinGroup, String shard) throws IOException {
+ public Map<String, Pair<Integer, Collection<SearchGroup<BytesRef>>>> transformToNative(NamedList<NamedList> shardResponse, Sort groupSort, Sort sortWithinGroup, String shard) {
Map<String, Pair<Integer, Collection<SearchGroup<BytesRef>>>> result = new HashMap<String, Pair<Integer, Collection<SearchGroup<BytesRef>>>>();
for (Map.Entry<String, NamedList> command : shardResponse) {
List<SearchGroup<BytesRef>> searchGroups = new ArrayList<SearchGroup<BytesRef>>();
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/ShardResultTransformer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/ShardResultTransformer.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/ShardResultTransformer.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/ShardResultTransformer.java Thu Jul 19 15:58:54 2012
@@ -48,8 +48,7 @@ public interface ShardResultTransformer<
* @param sortWithinGroup The sort inside a group
* @param shard The shard address where the response originated from
* @return native structure of the data
- * @throws IOException If I/O related errors occur during transforming
*/
- R transformToNative(NamedList<NamedList> shardResponse, Sort groupSort, Sort sortWithinGroup, String shard) throws IOException;
+ R transformToNative(NamedList<NamedList> shardResponse, Sort groupSort, Sort sortWithinGroup, String shard);
}
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java Thu Jul 19 15:58:54 2012
@@ -26,9 +26,21 @@ import org.apache.solr.schema.SchemaAwar
import org.apache.solr.schema.SimilarityFactory;
/**
- * SimilarityFactory that returns a PerFieldSimilarityWrapper
- * that delegates to the fieldtype, if its configured, otherwise
+ * SimilarityFactory that returns a {@link PerFieldSimilarityWrapper}
+ * that delegates to the field type, if its configured, otherwise
* {@link DefaultSimilarity}.
+ *
+ * <p>
+ * <b>NOTE:</b> Users should be aware that in addition to supporting
+ * <code>Similarity</code> configurations specified on individual
+ * field types, this factory also differs in behavior from
+ * {@link DefaultSimilarityFactory} because of other differences in the
+ * implementations of <code>PerFieldSimilarityWrapper</code> and
+ * <code>DefaultSimilarity</code> - notably in methods such as
+ * {@link Similarity#coord} and {@link Similarity#queryNorm}.
+ * </p>
+ *
+ * @see FieldType#getSimilarity
*/
public class SchemaSimilarityFactory extends SimilarityFactory implements SchemaAware {
private Similarity similarity;
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java Thu Jul 19 15:58:54 2012
@@ -21,7 +21,6 @@ import java.io.InputStream;
import java.io.IOException;
import java.io.PrintWriter;
-import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -42,7 +41,7 @@ public final class LoadAdminUiServlet ex
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
- throws IOException, ServletException {
+ throws IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
@@ -76,7 +75,7 @@ public final class LoadAdminUiServlet ex
@Override
public void doPost(HttpServletRequest request,
HttpServletResponse response)
- throws IOException, ServletException {
+ throws IOException {
doGet(request, response);
}
}
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java Thu Jul 19 15:58:54 2012
@@ -17,23 +17,18 @@
package org.apache.solr.servlet;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
-import java.io.Writer;
+import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StringWriter;
-import java.io.OutputStreamWriter;
-import java.io.ByteArrayInputStream;
+import java.io.Writer;
import java.nio.charset.Charset;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.WeakHashMap;
-import org.apache.solr.handler.ContentStreamHandlerBase;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.xml.sax.InputSource;
-
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
@@ -44,23 +39,33 @@ import javax.servlet.http.HttpServletReq
import javax.servlet.http.HttpServletResponse;
import org.apache.solr.common.SolrException;
-import org.apache.solr.common.util.NamedList;
-import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.common.cloud.CloudState;
import org.apache.solr.common.cloud.Slice;
import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.CommonParams;
-import org.apache.solr.util.FastWriter;
import org.apache.solr.common.util.ContentStreamBase;
-import org.apache.solr.core.*;
-import org.apache.solr.handler.component.SearchHandler;
-import org.apache.solr.request.*;
+import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.SimpleOrderedMap;
+import org.apache.solr.core.Config;
+import org.apache.solr.core.CoreContainer;
+import org.apache.solr.core.SolrConfig;
+import org.apache.solr.core.SolrCore;
+import org.apache.solr.handler.ContentStreamHandlerBase;
+import org.apache.solr.request.ServletSolrParams;
+import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.request.SolrQueryRequestBase;
+import org.apache.solr.request.SolrRequestHandler;
+import org.apache.solr.request.SolrRequestInfo;
import org.apache.solr.response.BinaryQueryResponseWriter;
import org.apache.solr.response.QueryResponseWriter;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.servlet.cache.HttpCacheHeaderUtil;
import org.apache.solr.servlet.cache.Method;
+import org.apache.solr.util.FastWriter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xml.sax.InputSource;
/**
* This filter looks at the incoming URL maps them to handlers defined in solrconfig.xml
@@ -175,6 +180,13 @@ public class SolrDispatchFilter implemen
handleAdminRequest(req, response, handler, solrReq);
return;
}
+ // Check for the core admin collections url
+ if( path.equals( "/admin/collections" ) ) {
+ handler = cores.getCollectionsHandler();
+ solrReq = adminRequestParser.parse(null,path, req);
+ handleAdminRequest(req, response, handler, solrReq);
+ return;
+ }
else {
//otherwise, we should find a core from the path
idx = path.indexOf( "/", 1 );
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java Thu Jul 19 15:58:54 2012
@@ -246,7 +246,7 @@ class HttpRequestContentStream extends C
{
private final HttpServletRequest req;
- public HttpRequestContentStream( HttpServletRequest req ) throws IOException {
+ public HttpRequestContentStream( HttpServletRequest req ) {
this.req = req;
contentType = req.getContentType();
@@ -379,7 +379,7 @@ class StandardRequestParser implements S
public SolrParams parseParamsAndFillStreams(
final HttpServletRequest req, ArrayList<ContentStream> streams ) throws Exception
{
- String method = req.getMethod().toUpperCase(Locale.ENGLISH);
+ String method = req.getMethod().toUpperCase(Locale.ROOT);
if( "GET".equals( method ) || "HEAD".equals( method )) {
return new ServletSolrParams(req);
}
@@ -390,7 +390,7 @@ class StandardRequestParser implements S
if( idx > 0 ) { // remove the charset definition "; charset=utf-8"
contentType = contentType.substring( 0, idx );
}
- if( "application/x-www-form-urlencoded".equals( contentType.toLowerCase(Locale.ENGLISH) ) ) {
+ if( "application/x-www-form-urlencoded".equals( contentType.toLowerCase(Locale.ROOT) ) ) {
return new ServletSolrParams(req); // just get the params from parameterMap
}
if( ServletFileUpload.isMultipartContent(req) ) {
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/ZookeeperInfoServlet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/ZookeeperInfoServlet.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/ZookeeperInfoServlet.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/ZookeeperInfoServlet.java Thu Jul 19 15:58:54 2012
@@ -28,7 +28,6 @@ import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -49,13 +48,13 @@ public final class ZookeeperInfoServlet
static final Logger log = LoggerFactory.getLogger(ZookeeperInfoServlet.class);
@Override
- public void init() throws ServletException {
+ public void init() {
}
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
- throws IOException, ServletException {
+ throws IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json");
@@ -92,7 +91,7 @@ public final class ZookeeperInfoServlet
@Override
public void doPost(HttpServletRequest request,
HttpServletResponse response)
- throws IOException, ServletException {
+ throws IOException {
doGet(request, response);
}
@@ -363,7 +362,7 @@ public final class ZookeeperInfoServlet
json.write(v);
}
- boolean printZnode(JSONWriter json, String path) throws IOException {
+ boolean printZnode(JSONWriter json, String path) {
try {
Stat stat = new Stat();
// Trickily, the call to zkClient.getData fills in the stat variable
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/cache/HttpCacheHeaderUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/cache/HttpCacheHeaderUtil.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/cache/HttpCacheHeaderUtil.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/cache/HttpCacheHeaderUtil.java Thu Jul 19 15:58:54 2012
@@ -27,8 +27,6 @@ import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.lucene.index.IndexReader;
-
import org.apache.solr.core.IndexDeletionPolicyWrapper;
import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrConfig;
@@ -43,13 +41,11 @@ import org.apache.commons.codec.binary.B
public final class HttpCacheHeaderUtil {
- public static void sendNotModified(HttpServletResponse res)
- throws IOException {
+ public static void sendNotModified(HttpServletResponse res) {
res.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
}
- public static void sendPreconditionFailed(HttpServletResponse res)
- throws IOException {
+ public static void sendPreconditionFailed(HttpServletResponse res) {
res.setStatus(HttpServletResponse.SC_PRECONDITION_FAILED);
}
@@ -81,7 +77,7 @@ public final class HttpCacheHeaderUtil {
etagCache = "\""
+ new String(Base64.encodeBase64((Long.toHexString
(Long.reverse(indexVersionCache))
- + etagSeed).getBytes()), "US-ASCII")
+ + etagSeed).getBytes("US-ASCII")), "US-ASCII")
+ "\"";
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e); // may not happen
@@ -215,8 +211,7 @@ public final class HttpCacheHeaderUtil {
public static boolean doCacheHeaderValidation(final SolrQueryRequest solrReq,
final HttpServletRequest req,
final Method reqMethod,
- final HttpServletResponse resp)
- throws IOException {
+ final HttpServletResponse resp) {
if (Method.POST==reqMethod || Method.OTHER==reqMethod) {
return false;
@@ -244,14 +239,12 @@ public final class HttpCacheHeaderUtil {
* Check for etag related conditional headers and set status
*
* @return true if no request processing is necessary and HTTP response status has been set, false otherwise.
- * @throws IOException
*/
@SuppressWarnings("unchecked")
public static boolean checkETagValidators(final HttpServletRequest req,
final HttpServletResponse resp,
final Method reqMethod,
- final String etag)
- throws IOException {
+ final String etag) {
// First check If-None-Match because this is the common used header
// element by HTTP clients
@@ -281,12 +274,10 @@ public final class HttpCacheHeaderUtil {
* Check for modify time related conditional headers and set status
*
* @return true if no request processing is necessary and HTTP response status has been set, false otherwise.
- * @throws IOException
*/
public static boolean checkLastModValidators(final HttpServletRequest req,
final HttpServletResponse resp,
- final long lastMod)
- throws IOException {
+ final long lastMod) {
try {
// First check for If-Modified-Since because this is the common
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/cache/Method.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/cache/Method.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/cache/Method.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/servlet/cache/Method.java Thu Jul 19 15:58:54 2012
@@ -24,7 +24,7 @@ public enum Method {
public static Method getMethod(String method) {
try {
- return Method.valueOf(method.toUpperCase(Locale.ENGLISH));
+ return Method.valueOf(method.toUpperCase(Locale.ROOT));
} catch (Exception e) {
return OTHER;
}
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/spelling/WordBreakSolrSpellChecker.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/spelling/WordBreakSolrSpellChecker.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/spelling/WordBreakSolrSpellChecker.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/spelling/WordBreakSolrSpellChecker.java Thu Jul 19 15:58:54 2012
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.regex.Pattern;
import org.apache.lucene.analysis.Token;
@@ -126,7 +127,7 @@ public class WordBreakSolrSpellChecker e
wbsp = new WordBreakSpellChecker();
String bstb = strParam(config, PARAM_BREAK_SUGGESTION_TIE_BREAKER);
if (bstb != null) {
- bstb = bstb.toUpperCase();
+ bstb = bstb.toUpperCase(Locale.ROOT);
if (bstb.equals(BreakSuggestionTieBreaker.SUM_FREQ.name())) {
sortMethod = BreakSuggestionSortMethod.NUM_CHANGES_THEN_SUMMED_FREQUENCY;
} else if (bstb.equals(BreakSuggestionTieBreaker.MAX_FREQ.name())) {
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/update/AddUpdateCommand.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/update/AddUpdateCommand.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/update/AddUpdateCommand.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/update/AddUpdateCommand.java Thu Jul 19 15:58:54 2012
@@ -19,6 +19,7 @@ package org.apache.solr.update;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.Term;
+import org.apache.lucene.search.Query;
import org.apache.lucene.util.BytesRef;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
@@ -27,6 +28,8 @@ import org.apache.solr.request.SolrQuery
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
+import java.util.List;
+
/**
*
*/
@@ -42,6 +45,7 @@ public class AddUpdateCommand extends Up
public boolean overwrite = true;
public Term updateTerm;
+
public int commitWithin = -1;
public AddUpdateCommand(SolrQueryRequest req) {
Modified: lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java?rev=1363400&r1=1363399&r2=1363400&view=diff
==============================================================================
--- lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java (original)
+++ lucene/dev/branches/pforcodec_3892/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java Thu Jul 19 15:58:54 2012
@@ -25,6 +25,7 @@ import org.apache.solr.common.SolrExcept
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.DirectoryFactory;
import org.apache.solr.core.SolrCore;
+import org.apache.solr.util.RefCounted;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -41,30 +42,79 @@ public final class DefaultSolrCoreState
private boolean recoveryRunning;
private RecoveryStrategy recoveryStrat;
private boolean closed = false;
+
+ private RefCounted<IndexWriter> refCntWriter;
+
+ private boolean pauseWriter;
+ private boolean writerFree = true;
public DefaultSolrCoreState(DirectoryFactory directoryFactory) {
this.directoryFactory = directoryFactory;
}
@Override
- public synchronized IndexWriter getIndexWriter(SolrCore core) throws IOException {
+ public synchronized RefCounted<IndexWriter> getIndexWriter(SolrCore core)
+ throws IOException {
+ while (pauseWriter) {
+ try {
+ wait();
+ } catch (InterruptedException e) {}
+ }
+
if (indexWriter == null) {
- indexWriter = createMainIndexWriter(core, "DirectUpdateHandler2", false, false);
+ indexWriter = createMainIndexWriter(core, "DirectUpdateHandler2", false,
+ false);
}
- return indexWriter;
+ if (refCntWriter == null) {
+ refCntWriter = new RefCounted<IndexWriter>(indexWriter) {
+ @Override
+ public void close() {
+ synchronized (DefaultSolrCoreState.this) {
+ writerFree = true;
+ DefaultSolrCoreState.this.notifyAll();
+ }
+ }
+ };
+ }
+ writerFree = false;
+ notifyAll();
+ refCntWriter.incref();
+ return refCntWriter;
}
@Override
public synchronized void newIndexWriter(SolrCore core) throws IOException {
- if (indexWriter != null) {
- indexWriter.close();
+ // we need to wait for the Writer to fall out of use
+ // first lets stop it from being lent out
+ pauseWriter = true;
+ // then lets wait until its out of use
+ while(!writerFree) {
+ try {
+ wait();
+ } catch (InterruptedException e) {}
+ }
+
+ try {
+ if (indexWriter != null) {
+ try {
+ indexWriter.close();
+ } catch (Throwable t) {
+ SolrException.log(log, "Error closing old IndexWriter", t);
+ }
+ }
+
+ indexWriter = createMainIndexWriter(core, "DirectUpdateHandler2", false,
+ true);
+ // we need to null this so it picks up the new writer next get call
+ refCntWriter = null;
+ } finally {
+ pauseWriter = false;
+ notifyAll();
}
- indexWriter = createMainIndexWriter(core, "DirectUpdateHandler2",
- false, true);
}
@Override
- public void decref(IndexWriterCloser closer) throws IOException {
+ public void decref(IndexWriterCloser closer) {
synchronized (this) {
refCnt--;
if (refCnt == 0) {
@@ -126,6 +176,11 @@ public final class DefaultSolrCoreState
return;
}
+ if (cc.isShutDown()) {
+ log.warn("Skipping recovery because Solr is shutdown");
+ return;
+ }
+
cancelRecovery();
synchronized (recoveryLock) {
while (recoveryRunning) {
@@ -134,6 +189,11 @@ public final class DefaultSolrCoreState
} catch (InterruptedException e) {
}
+ // check again for those that were waiting
+ if (cc.isShutDown()) {
+ log.warn("Skipping recovery because Solr is shutdown");
+ return;
+ }
if (closed) return;
}