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 2015/09/18 17:13:52 UTC
svn commit: r1703881 [3/5] - in /lucene/dev/branches/lucene6780: ./ lucene/
lucene/analysis/ lucene/analysis/common/
lucene/analysis/common/src/java/org/apache/lucene/analysis/hunspell/
lucene/benchmark/ lucene/benchmark/src/test/org/apache/lucene/benc...
Modified: lucene/dev/branches/lucene6780/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestQueryParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestQueryParser.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestQueryParser.java (original)
+++ lucene/dev/branches/lucene6780/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestQueryParser.java Fri Sep 18 15:13:49 2015
@@ -35,6 +35,7 @@ import org.apache.lucene.search.BooleanQ
import org.apache.lucene.search.BoostQuery;
import org.apache.lucene.search.MultiPhraseQuery;
import org.apache.lucene.search.Query;
+import org.apache.lucene.search.SynonymQuery;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.util.automaton.TooComplexToDeterminizeException;
@@ -300,21 +301,16 @@ public class TestQueryParser extends Que
/** ordinary behavior, synonyms form uncoordinated boolean query */
QueryParser dumb = new QueryParser("field",
new Analyzer1());
- BooleanQuery.Builder expanded = new BooleanQuery.Builder();
- expanded.setDisableCoord(true);
- expanded.add(new TermQuery(new Term("field", "dogs")),
- BooleanClause.Occur.SHOULD);
- expanded.add(new TermQuery(new Term("field", "dog")),
- BooleanClause.Occur.SHOULD);
- assertEquals(expanded.build(), dumb.parse("\"dogs\""));
+ Query expanded = new SynonymQuery(new Term("field", "dogs"), new Term("field", "dog"));
+ assertEquals(expanded, dumb.parse("\"dogs\""));
/** even with the phrase operator the behavior is the same */
- assertEquals(expanded.build(), dumb.parse("dogs"));
+ assertEquals(expanded, dumb.parse("dogs"));
/**
* custom behavior, the synonyms are expanded, unless you use quote operator
*/
QueryParser smart = new SmartQueryParser();
- assertEquals(expanded.build(), smart.parse("dogs"));
+ assertEquals(expanded, smart.parse("dogs"));
Query unexpanded = new TermQuery(new Term("field", "dogs"));
assertEquals(unexpanded, smart.parse("\"dogs\""));
@@ -333,11 +329,7 @@ public class TestQueryParser extends Que
/** simple synonyms test */
public void testSynonyms() throws Exception {
- BooleanQuery.Builder expectedB = new BooleanQuery.Builder();
- expectedB.setDisableCoord(true);
- expectedB.add(new TermQuery(new Term("field", "dogs")), BooleanClause.Occur.SHOULD);
- expectedB.add(new TermQuery(new Term("field", "dog")), BooleanClause.Occur.SHOULD);
- Query expected = expectedB.build();
+ Query expected = new SynonymQuery(new Term("field", "dogs"), new Term("field", "dog"));
QueryParser qp = new QueryParser("field", new MockSynonymAnalyzer());
assertEquals(expected, qp.parse("dogs"));
assertEquals(expected, qp.parse("\"dogs\""));
@@ -405,11 +397,7 @@ public class TestQueryParser extends Que
/** simple CJK synonym test */
public void testCJKSynonym() throws Exception {
- BooleanQuery.Builder expectedB = new BooleanQuery.Builder();
- expectedB.setDisableCoord(true);
- expectedB.add(new TermQuery(new Term("field", "å½")), BooleanClause.Occur.SHOULD);
- expectedB.add(new TermQuery(new Term("field", "å")), BooleanClause.Occur.SHOULD);
- Query expected = expectedB.build();
+ Query expected = new SynonymQuery(new Term("field", "å½"), new Term("field", "å"));
QueryParser qp = new QueryParser("field", new MockCJKSynonymAnalyzer());
assertEquals(expected, qp.parse("å½"));
qp.setDefaultOperator(Operator.AND);
@@ -422,11 +410,8 @@ public class TestQueryParser extends Que
public void testCJKSynonymsOR() throws Exception {
BooleanQuery.Builder expectedB = new BooleanQuery.Builder();
expectedB.add(new TermQuery(new Term("field", "ä¸")), BooleanClause.Occur.SHOULD);
- BooleanQuery.Builder inner = new BooleanQuery.Builder();
- inner.setDisableCoord(true);
- inner.add(new TermQuery(new Term("field", "å½")), BooleanClause.Occur.SHOULD);
- inner.add(new TermQuery(new Term("field", "å")), BooleanClause.Occur.SHOULD);
- expectedB.add(inner.build(), BooleanClause.Occur.SHOULD);
+ Query inner = new SynonymQuery(new Term("field", "å½"), new Term("field", "å"));
+ expectedB.add(inner, BooleanClause.Occur.SHOULD);
Query expected = expectedB.build();
QueryParser qp = new QueryParser("field", new MockCJKSynonymAnalyzer());
assertEquals(expected, qp.parse("ä¸å½"));
@@ -438,16 +423,10 @@ public class TestQueryParser extends Que
public void testCJKSynonymsOR2() throws Exception {
BooleanQuery.Builder expectedB = new BooleanQuery.Builder();
expectedB.add(new TermQuery(new Term("field", "ä¸")), BooleanClause.Occur.SHOULD);
- BooleanQuery.Builder inner = new BooleanQuery.Builder();
- inner.setDisableCoord(true);
- inner.add(new TermQuery(new Term("field", "å½")), BooleanClause.Occur.SHOULD);
- inner.add(new TermQuery(new Term("field", "å")), BooleanClause.Occur.SHOULD);
- expectedB.add(inner.build(), BooleanClause.Occur.SHOULD);
- BooleanQuery.Builder inner2 = new BooleanQuery.Builder();
- inner2.setDisableCoord(true);
- inner2.add(new TermQuery(new Term("field", "å½")), BooleanClause.Occur.SHOULD);
- inner2.add(new TermQuery(new Term("field", "å")), BooleanClause.Occur.SHOULD);
- expectedB.add(inner2.build(), BooleanClause.Occur.SHOULD);
+ SynonymQuery inner = new SynonymQuery(new Term("field", "å½"), new Term("field", "å"));
+ expectedB.add(inner, BooleanClause.Occur.SHOULD);
+ SynonymQuery inner2 = new SynonymQuery(new Term("field", "å½"), new Term("field", "å"));
+ expectedB.add(inner2, BooleanClause.Occur.SHOULD);
Query expected = expectedB.build();
QueryParser qp = new QueryParser("field", new MockCJKSynonymAnalyzer());
assertEquals(expected, qp.parse("ä¸å½å½"));
@@ -459,11 +438,8 @@ public class TestQueryParser extends Que
public void testCJKSynonymsAND() throws Exception {
BooleanQuery.Builder expectedB = new BooleanQuery.Builder();
expectedB.add(new TermQuery(new Term("field", "ä¸")), BooleanClause.Occur.MUST);
- BooleanQuery.Builder inner = new BooleanQuery.Builder();
- inner.setDisableCoord(true);
- inner.add(new TermQuery(new Term("field", "å½")), BooleanClause.Occur.SHOULD);
- inner.add(new TermQuery(new Term("field", "å")), BooleanClause.Occur.SHOULD);
- expectedB.add(inner.build(), BooleanClause.Occur.MUST);
+ Query inner = new SynonymQuery(new Term("field", "å½"), new Term("field", "å"));
+ expectedB.add(inner, BooleanClause.Occur.MUST);
Query expected = expectedB.build();
QueryParser qp = new QueryParser("field", new MockCJKSynonymAnalyzer());
qp.setDefaultOperator(Operator.AND);
@@ -476,16 +452,10 @@ public class TestQueryParser extends Que
public void testCJKSynonymsAND2() throws Exception {
BooleanQuery.Builder expectedB = new BooleanQuery.Builder();
expectedB.add(new TermQuery(new Term("field", "ä¸")), BooleanClause.Occur.MUST);
- BooleanQuery.Builder inner = new BooleanQuery.Builder();
- inner.setDisableCoord(true);
- inner.add(new TermQuery(new Term("field", "å½")), BooleanClause.Occur.SHOULD);
- inner.add(new TermQuery(new Term("field", "å")), BooleanClause.Occur.SHOULD);
- expectedB.add(inner.build(), BooleanClause.Occur.MUST);
- BooleanQuery.Builder inner2 = new BooleanQuery.Builder();
- inner2.setDisableCoord(true);
- inner2.add(new TermQuery(new Term("field", "å½")), BooleanClause.Occur.SHOULD);
- inner2.add(new TermQuery(new Term("field", "å")), BooleanClause.Occur.SHOULD);
- expectedB.add(inner2.build(), BooleanClause.Occur.MUST);
+ Query inner = new SynonymQuery(new Term("field", "å½"), new Term("field", "å"));
+ expectedB.add(inner, BooleanClause.Occur.MUST);
+ Query inner2 = new SynonymQuery(new Term("field", "å½"), new Term("field", "å"));
+ expectedB.add(inner2, BooleanClause.Occur.MUST);
Query expected = expectedB.build();
QueryParser qp = new QueryParser("field", new MockCJKSynonymAnalyzer());
qp.setDefaultOperator(Operator.AND);
Modified: lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/FuzzyLikeThisQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/FuzzyLikeThisQuery.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/FuzzyLikeThisQuery.java (original)
+++ lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/FuzzyLikeThisQuery.java Fri Sep 18 15:13:49 2015
@@ -41,7 +41,7 @@ import org.apache.lucene.search.Constant
import org.apache.lucene.search.MaxNonCompetitiveBoostAttribute;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
-import org.apache.lucene.search.similarities.DefaultSimilarity;
+import org.apache.lucene.search.similarities.ClassicSimilarity;
import org.apache.lucene.search.similarities.TFIDFSimilarity;
import org.apache.lucene.util.AttributeSource;
import org.apache.lucene.util.BytesRef;
@@ -68,7 +68,7 @@ public class FuzzyLikeThisQuery extends
// a better way might be to convert this into multitermquery rewrite methods.
// the rewrite method can 'average' the TermContext's term statistics (docfreq,totalTermFreq)
// provided to TermQuery, so that the general idea is agnostic to any scoring system...
- static TFIDFSimilarity sim=new DefaultSimilarity();
+ static TFIDFSimilarity sim=new ClassicSimilarity();
ArrayList<FieldVals> fieldVals=new ArrayList<>();
Analyzer analyzer;
Modified: lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/JakartaRegexpCapabilities.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/JakartaRegexpCapabilities.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/JakartaRegexpCapabilities.java (original)
+++ lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/JakartaRegexpCapabilities.java Fri Sep 18 15:13:49 2015
@@ -18,9 +18,8 @@ package org.apache.lucene.sandbox.querie
*/
import org.apache.lucene.util.BytesRef;
-import org.apache.lucene.util.CharsRef;
import org.apache.lucene.util.CharsRefBuilder;
-import org.apache.lucene.util.UnicodeUtil;
+import org.apache.lucene.util.SuppressForbidden;
import org.apache.regexp.CharacterIterator;
import org.apache.regexp.RE;
import org.apache.regexp.REProgram;
@@ -40,6 +39,11 @@ public class JakartaRegexpCapabilities i
private static Method getPrefixMethod;
static {
+ initClass();
+ }
+
+ @SuppressForbidden(reason = "TODO: Remove this class completely and also the hack around setAccessible!")
+ private static void initClass() {
try {
getPrefixMethod = REProgram.class.getMethod("getPrefix");
} catch (Exception e) {
Modified: lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/JavaUtilRegexCapabilities.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/JavaUtilRegexCapabilities.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/JavaUtilRegexCapabilities.java (original)
+++ lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/JavaUtilRegexCapabilities.java Fri Sep 18 15:13:49 2015
@@ -21,9 +21,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.lucene.util.BytesRef;
-import org.apache.lucene.util.CharsRef;
import org.apache.lucene.util.CharsRefBuilder;
-import org.apache.lucene.util.UnicodeUtil;
/**
* An implementation tying Java's built-in java.util.regex to RegexQuery.
Modified: lucene/dev/branches/lucene6780/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSlowFuzzyQuery2.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSlowFuzzyQuery2.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSlowFuzzyQuery2.java (original)
+++ lucene/dev/branches/lucene6780/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSlowFuzzyQuery2.java Fri Sep 18 15:13:49 2015
@@ -33,7 +33,7 @@ import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MultiTermQuery;
import org.apache.lucene.search.TopDocs;
-import org.apache.lucene.search.similarities.DefaultSimilarity;
+import org.apache.lucene.search.similarities.ClassicSimilarity;
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.LuceneTestCase;
@@ -111,7 +111,7 @@ public class TestSlowFuzzyQuery2 extends
}
// even though this uses a boost-only rewrite, this test relies upon queryNorm being the default implementation,
// otherwise scores are different!
- searcher.setSimilarity(new DefaultSimilarity());
+ searcher.setSimilarity(new ClassicSimilarity());
writer.close();
String line;
Modified: lucene/dev/branches/lucene6780/lucene/spatial3d/src/test/org/apache/lucene/bkdtree3d/TestGeo3DPointField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/spatial3d/src/test/org/apache/lucene/bkdtree3d/TestGeo3DPointField.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/spatial3d/src/test/org/apache/lucene/bkdtree3d/TestGeo3DPointField.java (original)
+++ lucene/dev/branches/lucene6780/lucene/spatial3d/src/test/org/apache/lucene/bkdtree3d/TestGeo3DPointField.java Fri Sep 18 15:13:49 2015
@@ -557,7 +557,7 @@ public class TestGeo3DPointField extends
hits.add(docID);
}
}
- break;
+ continue;
case GeoArea.OVERLAPS:
if (VERBOSE) {
log.println(" GeoArea.OVERLAPS: keep splitting");
Modified: lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/search/RandomSimilarityProvider.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/search/RandomSimilarityProvider.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/search/RandomSimilarityProvider.java (original)
+++ lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/search/RandomSimilarityProvider.java Fri Sep 18 15:13:49 2015
@@ -37,7 +37,7 @@ import org.apache.lucene.search.similari
import org.apache.lucene.search.similarities.BasicModelIne;
import org.apache.lucene.search.similarities.BasicModelP;
import org.apache.lucene.search.similarities.DFRSimilarity;
-import org.apache.lucene.search.similarities.DefaultSimilarity;
+import org.apache.lucene.search.similarities.ClassicSimilarity;
import org.apache.lucene.search.similarities.Distribution;
import org.apache.lucene.search.similarities.DistributionLL;
import org.apache.lucene.search.similarities.DistributionSPL;
@@ -63,7 +63,7 @@ import org.apache.lucene.search.similari
* for the same field.
*/
public class RandomSimilarityProvider extends PerFieldSimilarityWrapper {
- final DefaultSimilarity defaultSim = new DefaultSimilarity();
+ final ClassicSimilarity defaultSim = new ClassicSimilarity();
final List<Similarity> knownSims;
Map<String,Similarity> previousMappings = new HashMap<>();
final int perFieldSeed;
@@ -139,7 +139,7 @@ public class RandomSimilarityProvider ex
static List<Similarity> allSims;
static {
allSims = new ArrayList<>();
- allSims.add(new DefaultSimilarity());
+ allSims.add(new ClassicSimilarity());
allSims.add(new BM25Similarity());
for (BasicModel basicModel : BASIC_MODELS) {
for (AfterEffect afterEffect : AFTER_EFFECTS) {
Modified: lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java (original)
+++ lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java Fri Sep 18 15:13:49 2015
@@ -29,7 +29,6 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
@@ -684,23 +683,12 @@ public abstract class LuceneTestCase ext
/** Tells {@link IndexWriter} to enforce the specified limit as the maximum number of documents in one index; call
* {@link #restoreIndexWriterMaxDocs} once your test is done. */
public void setIndexWriterMaxDocs(int limit) {
- Method m;
- try {
- m = IndexWriter.class.getDeclaredMethod("setMaxDocs", int.class);
- } catch (NoSuchMethodException nsme) {
- throw new RuntimeException(nsme);
- }
- m.setAccessible(true);
- try {
- m.invoke(IndexWriter.class, limit);
- } catch (IllegalAccessException | InvocationTargetException iae) {
- throw new RuntimeException(iae);
- }
+ IndexWriterMaxDocsChanger.setMaxDocs(limit);
}
- /** Returns the default {@link IndexWriter#MAX_DOCS} limit. */
+ /** Returns to the default {@link IndexWriter#MAX_DOCS} limit. */
public void restoreIndexWriterMaxDocs() {
- setIndexWriterMaxDocs(IndexWriter.MAX_DOCS);
+ IndexWriterMaxDocsChanger.restoreMaxDocs();
}
// -----------------------------------------------------------------
Modified: lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java (original)
+++ lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java Fri Sep 18 15:13:49 2015
@@ -20,6 +20,8 @@ package org.apache.lucene.util;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Collection;
@@ -184,32 +186,35 @@ public final class RamUsageTester {
* Create a cached information about shallow size and reference fields for
* a given class.
*/
+ @SuppressForbidden(reason = "We need to access private fields of measured objects.")
private static ClassCache createCacheEntry(final Class<?> clazz) {
- ClassCache cachedInfo;
- long shallowInstanceSize = RamUsageEstimator.NUM_BYTES_OBJECT_HEADER;
- final ArrayList<Field> referenceFields = new ArrayList<>(32);
- for (Class<?> c = clazz; c != null; c = c.getSuperclass()) {
- if (c == Class.class) {
- // prevent inspection of Class' fields, throws SecurityException in Java 9!
- continue;
- }
- final Field[] fields = c.getDeclaredFields();
- for (final Field f : fields) {
- if (!Modifier.isStatic(f.getModifiers())) {
- shallowInstanceSize = RamUsageEstimator.adjustForField(shallowInstanceSize, f);
-
- if (!f.getType().isPrimitive()) {
- f.setAccessible(true);
- referenceFields.add(f);
+ return AccessController.doPrivileged((PrivilegedAction<ClassCache>) () -> {
+ ClassCache cachedInfo;
+ long shallowInstanceSize = RamUsageEstimator.NUM_BYTES_OBJECT_HEADER;
+ final ArrayList<Field> referenceFields = new ArrayList<>(32);
+ for (Class<?> c = clazz; c != null; c = c.getSuperclass()) {
+ if (c == Class.class) {
+ // prevent inspection of Class' fields, throws SecurityException in Java 9!
+ continue;
+ }
+ final Field[] fields = c.getDeclaredFields();
+ for (final Field f : fields) {
+ if (!Modifier.isStatic(f.getModifiers())) {
+ shallowInstanceSize = RamUsageEstimator.adjustForField(shallowInstanceSize, f);
+
+ if (!f.getType().isPrimitive()) {
+ f.setAccessible(true);
+ referenceFields.add(f);
+ }
}
}
}
- }
-
- cachedInfo = new ClassCache(
- RamUsageEstimator.alignObjectSize(shallowInstanceSize),
- referenceFields.toArray(new Field[referenceFields.size()]));
- return cachedInfo;
+
+ cachedInfo = new ClassCache(
+ RamUsageEstimator.alignObjectSize(shallowInstanceSize),
+ referenceFields.toArray(new Field[referenceFields.size()]));
+ return cachedInfo;
+ });
}
}
Modified: lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/Rethrow.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/Rethrow.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/Rethrow.java (original)
+++ lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/Rethrow.java Fri Sep 18 15:13:49 2015
@@ -24,22 +24,19 @@ package org.apache.lucene.util;
* <p>Pulled from <a href="http://www.javapuzzlers.com">Java Puzzlers</a>.</p>
* @see <a href="http://www.amazon.com/Java-Puzzlers-Traps-Pitfalls-Corner/dp/032133678X">http://www.amazon.com/Java-Puzzlers-Traps-Pitfalls-Corner/dp/032133678X</a>
*/
-@SuppressWarnings({"unchecked","rawtypes"})
public final class Rethrow {
- /**
- * Classy puzzler to rethrow any checked exception as an unchecked one.
- */
- private static class Rethrower<T extends Throwable> {
- private void rethrow(Throwable t) throws T {
- throw (T) t;
- }
- }
-
+ private Rethrow() {}
+
/**
* Rethrows <code>t</code> (identical object).
*/
public static void rethrow(Throwable t) {
- new Rethrower<Error>().rethrow(t);
+ Rethrow.<Error>rethrow0(t);
+ }
+
+ @SuppressWarnings("unchecked")
+ private static <T extends Throwable> void rethrow0(Throwable t) throws T {
+ throw (T) t;
}
}
Modified: lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleSetupAndRestoreClassEnv.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleSetupAndRestoreClassEnv.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleSetupAndRestoreClassEnv.java (original)
+++ lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleSetupAndRestoreClassEnv.java Fri Sep 18 15:13:49 2015
@@ -38,7 +38,7 @@ import org.apache.lucene.codecs.mockrand
import org.apache.lucene.codecs.simpletext.SimpleTextCodec;
import org.apache.lucene.index.RandomCodec;
import org.apache.lucene.search.RandomSimilarityProvider;
-import org.apache.lucene.search.similarities.DefaultSimilarity;
+import org.apache.lucene.search.similarities.ClassicSimilarity;
import org.apache.lucene.search.similarities.Similarity;
import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
import org.junit.internal.AssumptionViolatedException;
@@ -207,7 +207,7 @@ final class TestRuleSetupAndRestoreClass
TimeZone randomTimeZone = randomTimeZone(random());
timeZone = testTimeZone.equals("random") ? randomTimeZone : TimeZone.getTimeZone(testTimeZone);
TimeZone.setDefault(timeZone);
- similarity = random().nextBoolean() ? new DefaultSimilarity() : new RandomSimilarityProvider(random());
+ similarity = random().nextBoolean() ? new ClassicSimilarity() : new RandomSimilarityProvider(random());
// Check codec restrictions once at class level.
try {
Modified: lucene/dev/branches/lucene6780/lucene/tools/forbiddenApis/base.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/tools/forbiddenApis/base.txt?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/tools/forbiddenApis/base.txt (original)
+++ lucene/dev/branches/lucene6780/lucene/tools/forbiddenApis/base.txt Fri Sep 18 15:13:49 2015
@@ -27,13 +27,16 @@ java.util.Properties#load(java.io.InputS
java.util.Properties#save(java.io.OutputStream,java.lang.String)
java.util.Properties#store(java.io.OutputStream,java.lang.String)
+@defaultMessage Accessing private members of foreign classes breaks in security-sensitive environments. In addition, it no longer works with Java 9 on runtime classes.
+java.lang.reflect.AccessibleObject#setAccessible(boolean)
+java.lang.reflect.AccessibleObject#setAccessible(java.lang.reflect.AccessibleObject[],boolean)
+
java.lang.Character#codePointBefore(char[],int) @ Implicit start offset is error-prone when the char[] is a buffer and the first chars are random chars
java.lang.Character#codePointAt(char[],int) @ Implicit end offset is error-prone when the char[] is a buffer and the last chars are random chars
java.io.File#delete() @ use Files.delete for real exception, IOUtils.deleteFilesIgnoringExceptions if you dont care
-@defaultMessage Use shuffle(List, Random) instead so that it can be reproduced
-java.util.Collections#shuffle(java.util.List)
+java.util.Collections#shuffle(java.util.List) @ Use shuffle(List, Random) instead so that it can be reproduced
# START: forbidden-apis patch
# TODO: remove this once forbidden-apis was updated to next version with following commit:
Modified: lucene/dev/branches/lucene6780/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/CHANGES.txt?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/CHANGES.txt (original)
+++ lucene/dev/branches/lucene6780/solr/CHANGES.txt Fri Sep 18 15:13:49 2015
@@ -67,11 +67,18 @@ New Features
* SOLR-7903: Add the FacetStream to the Streaming API and wire it into the SQLHandler (Joel Bernstein)
+* SOLR-7986: JDBC Driver for SQL Interface (Uwe Schindler, Joel Bernstein)
+
Optimizations
----------------------
* SOLR-7876: Speed up queries and operations that use many terms when timeAllowed has not been
specified. Speedups of up to 8% were observed. (yonik)
+* SOLR-8037: Speed up creation of filters from term range queries (i.e. non-numeric range queries)
+ and use the filter cache for term range queries that are part of larger queries. Some observed
+ speedups were up to 2.5x for production of filters, and up to 10x for query evaluation with
+ embedded term range queres that resulted in filter cache hits. (yonik)
+
Other Changes
----------------------
@@ -148,6 +155,12 @@ New Features
* SOLR-7915: Provide pluggable context tool support for VelocityResponseWriter (Erik Hatcher)
+* LUCENE-6795: SystemInfoHandler was improved to also show detailed operating
+ system statistics on IBM J9 virtual machines. It also no longer fails on Java 9
+ with Jigsaw module system. (Uwe Schindler)
+
+* SOLR-8053: Basic auth support in SolrJ (noble)
+
Bug Fixes
----------------------
@@ -188,6 +201,14 @@ Bug Fixes
related to leader initiated recovery is performed by a dedicated LIR thread in the background.
(Ramkumar Aiyengar, shalin)
+* SOLR-7746: Ping requests stopped working with distrib=true in Solr 5.2.1. (Michael Sun)
+
+* SOLR-6547: ClassCastException in SolrResponseBase.getQTime on update response from CloudSolrClient
+ when parallelUpdates is enabled (default) and multiple docs are sent as a single update.
+ (kevin, hossman, shalin)
+
+* SOLR-8058: Fix the exclusion filter so that collections that start with js, css, img, tpl
+ can be accessed. (Upayavira, Steve Rowe, Anshum Gupta)
Optimizations
----------------------
@@ -251,6 +272,11 @@ Other Changes
* SOLR-7999: SolrRequestParser tests no longer depend on external URLs
that may fail to work. (Uwe Schindler)
+* SOLR-8034: Leader no longer puts replicas in recovery in case of a failed update, when minRF
+ isn't achieved. (Jessica Cheng, Timothy Potter, Anshum Gupta)
+
+* SOLR-8066: SolrCore.checkStale method doesn't restore interrupt status. (shalin)
+
================== 5.3.1 ==================
Bug Fixes
@@ -274,6 +300,9 @@ Bug Fixes
* SOLR-7990: Use of timeAllowed can cause incomplete filters to be cached and incorrect
results to be returned on subsequent requests. (Erick Erickson, yonik)
+* SOLR-8041: Fix VelocityResponseWriter's $resource.get(key,baseName,locale) to use specified locale.
+ (Erik Hatcher)
+
================== 5.3.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
@@ -1125,6 +1154,8 @@ Other Changes
* SOLR-7662: Refactored response writing to consolidate the logic in one place (Noble Paul)
+* SOLR-7110: Added option to optimize JavaBinCodec to minimize string Object creation (Noble Paul)
+
================== 5.1.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
@@ -1442,6 +1473,9 @@ Optimizations
* SOLR-7239: improved performance of min & max in StatsComponent, as well as situations
where local params disable all stats (hossman)
+ * SOLR-7050: realtime get should internally load only fields specified in fl.
+ (yonik, Noble Paul)
+
Other Changes
----------------------
Modified: lucene/dev/branches/lucene6780/solr/contrib/analytics/src/test/org/apache/solr/analytics/AbstractAnalyticsStatsTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/analytics/src/test/org/apache/solr/analytics/AbstractAnalyticsStatsTest.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/analytics/src/test/org/apache/solr/analytics/AbstractAnalyticsStatsTest.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/analytics/src/test/org/apache/solr/analytics/AbstractAnalyticsStatsTest.java Fri Sep 18 15:13:49 2015
@@ -41,6 +41,8 @@ import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.analytics.util.MedianCalculator;
import org.apache.solr.analytics.util.PercentileCalculator;
import org.apache.solr.request.SolrQueryRequest;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -73,16 +75,28 @@ public class AbstractAnalyticsStatsTest
}
static private Document doc;
- static private XPathFactory xPathFact = XPathFactory.newInstance();
+ static private XPathFactory xPathFact;
static private String rawResponse;
+
+ @BeforeClass
+ public static void beforeClassAbstractAnalysis() {
+ xPathFact = XPathFactory.newInstance();
+ }
+
+ @AfterClass
+ public static void afterClassAbstractAnalysis() {
+ xPathFact = null;
+ doc = null;
+ rawResponse = null;
+ defaults.clear();
+ }
public static void setResponse(String response) throws ParserConfigurationException, IOException, SAXException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true); // never forget this!
DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.parse(new InputSource(new ByteArrayInputStream(response.getBytes(StandardCharsets.UTF_8))));
- xPathFact = XPathFactory.newInstance();
rawResponse = response;
}
Modified: lucene/dev/branches/lucene6780/solr/contrib/analytics/src/test/org/apache/solr/analytics/facet/AbstractAnalyticsFacetTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/analytics/src/test/org/apache/solr/analytics/facet/AbstractAnalyticsFacetTest.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/analytics/src/test/org/apache/solr/analytics/facet/AbstractAnalyticsFacetTest.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/analytics/src/test/org/apache/solr/analytics/facet/AbstractAnalyticsFacetTest.java Fri Sep 18 15:13:49 2015
@@ -35,6 +35,8 @@ import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.analytics.util.MedianCalculator;
import org.apache.solr.analytics.util.PercentileCalculator;
import org.apache.solr.request.SolrQueryRequest;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
import com.google.common.collect.ObjectArrays;
@@ -57,15 +59,27 @@ public class AbstractAnalyticsFacetTest
protected String latestType = "";
private static Document doc;
- private static XPathFactory xPathFact = XPathFactory.newInstance();
+ private static XPathFactory xPathFact;
private static String rawResponse;
+ @BeforeClass
+ public static void beforeClassAbstractAnalysis() {
+ xPathFact = XPathFactory.newInstance();
+ }
+
+ @AfterClass
+ public static void afterClassAbstractAnalysis() {
+ xPathFact = null;
+ doc = null;
+ rawResponse = null;
+ defaults.clear();
+ }
+
protected static void setResponse(String response) throws ParserConfigurationException, IOException, SAXException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true); // never forget this!
DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.parse(new InputSource(new ByteArrayInputStream(response.getBytes(StandardCharsets.UTF_8))));
- xPathFact = XPathFactory.newInstance();
rawResponse = response;
}
Modified: lucene/dev/branches/lucene6780/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/FieldStreamDataSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/FieldStreamDataSource.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/FieldStreamDataSource.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/FieldStreamDataSource.java Fri Sep 18 15:13:49 2015
@@ -16,17 +16,16 @@
*/
package org.apache.solr.handler.dataimport;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import static org.apache.solr.handler.dataimport.DataImportHandlerException.SEVERE;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
import java.sql.Blob;
+import java.sql.SQLException;
import java.util.Properties;
-import static org.apache.solr.handler.dataimport.DataImportHandlerException.SEVERE;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
@@ -62,24 +61,13 @@ public class FieldStreamDataSource exten
Object o = wrapper.getVariableResolver().resolve(dataField);
if (o == null) {
throw new DataImportHandlerException(SEVERE, "No field available for name : " + dataField);
- }
- if (o instanceof Blob) {
+ } else if (o instanceof Blob) {
Blob blob = (Blob) o;
try {
- //Most of the JDBC drivers have getBinaryStream defined as public
- // so let us just check it
- Method m = blob.getClass().getDeclaredMethod("getBinaryStream");
- if (Modifier.isPublic(m.getModifiers())) {
- return (InputStream) m.invoke(blob);
- } else {
- // force invoke
- m.setAccessible(true);
- return (InputStream) m.invoke(blob);
- }
- } catch (Exception e) {
+ return blob.getBinaryStream();
+ } catch (SQLException sqle) {
LOG.info("Unable to get data from BLOB");
return null;
-
}
} else if (o instanceof byte[]) {
byte[] bytes = (byte[]) o;
Modified: lucene/dev/branches/lucene6780/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MRUnitBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MRUnitBase.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MRUnitBase.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MRUnitBase.java Fri Sep 18 15:13:49 2015
@@ -46,6 +46,7 @@ public abstract class MRUnitBase extends
@AfterClass
public static void teardownClass() throws Exception {
if (solrHomeZip != null) Files.delete(solrHomeZip.toPath());
+ solrHomeZip = null;
}
protected void setupHadoopConfig(Configuration config) throws IOException {
Modified: lucene/dev/branches/lucene6780/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java Fri Sep 18 15:13:49 2015
@@ -39,6 +39,7 @@ public class SolrCellMorphlineTest exten
private Map<String,Integer> expectedRecords = new HashMap<>();
private Map<String, Map<String, Object>> expectedRecordContents = new HashMap<>();
+
@BeforeClass
public static void beforeClass2() {
assumeFalse("FIXME: Morphlines currently has issues with Windows paths", Constants.WINDOWS);
Modified: lucene/dev/branches/lucene6780/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineTestBase.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineTestBase.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineTestBase.java Fri Sep 18 15:13:49 2015
@@ -100,6 +100,7 @@ public class AbstractSolrMorphlineTestBa
if (savedLocale != null) {
Locale.setDefault(savedLocale);
}
+ savedLocale = null;
}
protected static void myInitCore(String baseDirName) throws Exception {
Modified: lucene/dev/branches/lucene6780/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineZkTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineZkTestBase.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineZkTestBase.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineZkTestBase.java Fri Sep 18 15:13:49 2015
@@ -20,6 +20,7 @@ package org.apache.solr.morphlines.solr;
import com.codahale.metrics.MetricRegistry;
import com.google.common.collect.ListMultimap;
import com.typesafe.config.Config;
+
import org.apache.commons.io.FileUtils;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
@@ -27,6 +28,7 @@ import org.apache.solr.cloud.AbstractFul
import org.apache.solr.cloud.AbstractZkTestCase;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.cloud.SolrZkClient;
+import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.kitesdk.morphline.api.Collector;
import org.kitesdk.morphline.api.Command;
@@ -72,6 +74,11 @@ public abstract class AbstractSolrMorphl
FileUtils.copyDirectory(SOLR_INSTANCE_DIR, solrHomeDirectory);
}
+ @AfterClass
+ public static void tearDownClass() throws Exception {
+ solrHomeDirectory = null;
+ }
+
@Override
public void distribSetUp() throws Exception {
super.distribSetUp();
Modified: lucene/dev/branches/lucene6780/solr/contrib/velocity/src/java/org/apache/solr/response/VelocityResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/velocity/src/java/org/apache/solr/response/VelocityResponseWriter.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/velocity/src/java/org/apache/solr/response/VelocityResponseWriter.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/velocity/src/java/org/apache/solr/response/VelocityResponseWriter.java Fri Sep 18 15:13:49 2015
@@ -368,7 +368,10 @@ public class VelocityResponseWriter impl
@Override
protected ResourceBundle getBundle(String baseName, Object loc) {
// resource bundles for this tool must be in velocity "package"
- return ResourceBundle.getBundle("velocity." + baseName, getLocale(), solrClassLoader);
+ return ResourceBundle.getBundle(
+ "velocity." + baseName,
+ (loc == null) ? this.getLocale() : this.toLocale(loc),
+ solrClassLoader);
}
// Why did Velocity Tools make this private? Copied from ResourceTools.java
Modified: lucene/dev/branches/lucene6780/solr/contrib/velocity/src/test/org/apache/solr/velocity/VelocityResponseWriterTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/velocity/src/test/org/apache/solr/velocity/VelocityResponseWriterTest.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/velocity/src/test/org/apache/solr/velocity/VelocityResponseWriterTest.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/velocity/src/test/org/apache/solr/velocity/VelocityResponseWriterTest.java Fri Sep 18 15:13:49 2015
@@ -148,6 +148,9 @@ public class VelocityResponseWriterTest
VelocityResponseWriter.LOCALE,"en_US")));
assertEquals("Colour", h.query(req("q", "*:*", "wt", "velocity", VelocityResponseWriter.TEMPLATE, "locale",
VelocityResponseWriter.LOCALE,"en_UK")));
+
+ // Test that $resource.get(key,baseName,locale) works with specified locale
+ assertEquals("Colour", h.query(req("q","*:*", "wt","velocity",VelocityResponseWriter.TEMPLATE,"resource_get")));
}
@Test
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java Fri Sep 18 15:13:49 2015
@@ -28,6 +28,7 @@ import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.SslConnectionFactory;
import org.eclipse.jetty.server.session.HashSessionIdManager;
+import org.eclipse.jetty.servlet.BaseHolder;
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
@@ -85,6 +86,8 @@ public class JettySolrRunner {
private volatile boolean startedBefore = false;
private LinkedList<FilterHolder> extraFilters;
+
+ private static final String excludePatterns = "/css/.+,/js/.+,/img/.+,/tpl/.+";
private int proxyPort = -1;
@@ -333,9 +336,10 @@ public class JettySolrRunner {
String pathSpec = config.extraServlets.get(servletHolder);
root.addServlet(servletHolder, pathSpec);
}
-
- dispatchFilter = root.addFilter(SolrDispatchFilter.class, "*", EnumSet.of(DispatcherType.REQUEST) );
-
+ dispatchFilter = root.getServletHandler().newFilterHolder(BaseHolder.Source.EMBEDDED);
+ dispatchFilter.setHeldClass(SolrDispatchFilter.class);
+ dispatchFilter.setInitParameter("excludePatterns", excludePatterns);
+ root.addFilter(dispatchFilter, "*", EnumSet.of(DispatcherType.REQUEST));
}
@Override
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/core/SolrCore.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/core/SolrCore.java Fri Sep 18 15:13:49 2015
@@ -2640,7 +2640,7 @@ public final class SolrCore implements S
} catch (KeeperException e) {
log.error("error refreshing solrconfig ", e);
} catch (InterruptedException e) {
- Thread.currentThread().isInterrupted();
+ Thread.currentThread().interrupt();
}
return false;
}
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/handler/PingRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/handler/PingRequestHandler.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/handler/PingRequestHandler.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/handler/PingRequestHandler.java Fri Sep 18 15:13:49 2015
@@ -23,18 +23,19 @@ import java.nio.file.Files;
import java.util.Date;
import java.util.Locale;
+import org.apache.commons.io.FileUtils;
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.params.SolrParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrCore;
-import org.apache.solr.util.DateFormatUtil;
-import org.apache.solr.util.plugin.SolrCoreAware;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrRequestHandler;
import org.apache.solr.response.SolrQueryResponse;
-import org.apache.commons.io.FileUtils;
+import org.apache.solr.util.DateFormatUtil;
+import org.apache.solr.util.plugin.SolrCoreAware;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -53,10 +54,13 @@ import org.slf4j.LoggerFactory;
* executed. If the request succeeds, then the PingRequestHandler
* will respond back with a simple "OK" status. If the request fails,
* then the PingRequestHandler will respond back with the
- * corrisponding HTTP Error code. Clients (such as load balancers)
+ * corresponding HTTP Error code. Clients (such as load balancers)
* can be configured to poll the PingRequestHandler monitoring for
* these types of responses (or for a simple connection failure) to
* know if there is a problem with the Solr server.
+ *
+ * Note in case isShard=true, PingRequestHandler respond back with
+ * what the delegated handler returns (by default it's /select handler).
* </p>
*
* <pre class="prettyprint">
@@ -233,7 +237,7 @@ public class PingRequestHandler extends
SolrCore core = req.getCore();
// Get the RequestHandler
- String qt = params.get( CommonParams.QT );//optional; you get the default otherwise
+ String qt = params.get( CommonParams.QT );//optional; you get the default otherwise
SolrRequestHandler handler = core.getRequestHandler( qt );
if( handler == null ) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
@@ -241,27 +245,54 @@ public class PingRequestHandler extends
}
if( handler instanceof PingRequestHandler ) {
- throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
- "Cannot execute the PingRequestHandler recursively" );
+ // In case it's a query for shard, use default handler
+ if (params.getBool(ShardParams.IS_SHARD, false)) {
+ handler = core.getRequestHandler( null );
+ ModifiableSolrParams wparams = new ModifiableSolrParams(params);
+ wparams.remove(CommonParams.QT);
+ req.setParams(wparams);
+ } else {
+ throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
+ "Cannot execute the PingRequestHandler recursively" );
+ }
}
// Execute the ping query and catch any possible exception
Throwable ex = null;
- try {
- SolrQueryResponse pingrsp = new SolrQueryResponse();
- core.execute(handler, req, pingrsp );
- ex = pingrsp.getException();
- }
- catch( Exception e ) {
- ex = e;
- }
- // Send an error or an 'OK' message (response code will be 200)
- if( ex != null ) {
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
- "Ping query caused exception: "+ex.getMessage(), ex );
- }
- rsp.add( "status", "OK" );
+ // In case it's a query for shard, return the result from delegated handler for distributed query to merge result
+ if (params.getBool(ShardParams.IS_SHARD, false)) {
+ try {
+ core.execute(handler, req, rsp );
+ ex = rsp.getException();
+ }
+ catch( Exception e ) {
+ ex = e;
+ }
+ // Send an error or return
+ if( ex != null ) {
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
+ "Ping query caused exception: "+ex.getMessage(), ex );
+ }
+ } else {
+ try {
+ SolrQueryResponse pingrsp = new SolrQueryResponse();
+ core.execute(handler, req, pingrsp );
+ ex = pingrsp.getException();
+ }
+ catch( Exception e ) {
+ ex = e;
+ }
+
+ // Send an error or an 'OK' message (response code will be 200)
+ if( ex != null ) {
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
+ "Ping query caused exception: "+ex.getMessage(), ex );
+ }
+
+ rsp.add( "status", "OK" );
+ }
+
}
protected void handleEnable(boolean enable) throws SolrException {
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java Fri Sep 18 15:13:49 2015
@@ -17,24 +17,31 @@
package org.apache.solr.handler.admin;
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
+import java.lang.management.PlatformManagedObject;
import java.lang.management.RuntimeMXBean;
-import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.charset.Charset;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
+import java.util.Arrays;
import java.util.Date;
import java.util.Locale;
import org.apache.commons.io.IOUtils;
import org.apache.lucene.LucenePackage;
+import org.apache.lucene.util.Constants;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.core.CoreContainer;
@@ -160,58 +167,68 @@ public class SystemInfoHandler extends R
SimpleOrderedMap<Object> info = new SimpleOrderedMap<>();
OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean();
- info.add(NAME, os.getName());
- info.add( "version", os.getVersion() );
- info.add( "arch", os.getArch() );
- info.add( "systemLoadAverage", os.getSystemLoadAverage());
-
- // com.sun.management.OperatingSystemMXBean
- addGetterIfAvaliable( os, "committedVirtualMemorySize", info);
- addGetterIfAvaliable( os, "freePhysicalMemorySize", info);
- addGetterIfAvaliable( os, "freeSwapSpaceSize", info);
- addGetterIfAvaliable( os, "processCpuTime", info);
- addGetterIfAvaliable( os, "totalPhysicalMemorySize", info);
- addGetterIfAvaliable( os, "totalSwapSpaceSize", info);
-
- // com.sun.management.UnixOperatingSystemMXBean
- addGetterIfAvaliable( os, "openFileDescriptorCount", info );
- addGetterIfAvaliable( os, "maxFileDescriptorCount", info );
+ info.add(NAME, os.getName()); // add at least this one
+ try {
+ // add remaining ones dynamically using Java Beans API
+ addMXBeanProperties(os, OperatingSystemMXBean.class, info);
+ } catch (IntrospectionException | ReflectiveOperationException e) {
+ log.warn("Unable to fetch properties of OperatingSystemMXBean.", e);
+ }
+
+ // There are some additional beans we want to add (not available on all JVMs):
+ for (String clazz : Arrays.asList(
+ "com.sun.management.OperatingSystemMXBean",
+ "com.sun.management.UnixOperatingSystemMXBean",
+ "com.ibm.lang.management.OperatingSystemMXBean"
+ )) {
+ try {
+ final Class<? extends PlatformManagedObject> intf = Class.forName(clazz)
+ .asSubclass(PlatformManagedObject.class);
+ addMXBeanProperties(os, intf, info);
+ } catch (ClassNotFoundException e) {
+ // ignore
+ } catch (IntrospectionException | ReflectiveOperationException e) {
+ log.warn("Unable to fetch properties of JVM-specific OperatingSystemMXBean.", e);
+ }
+ }
+ // Try some command line things:
try {
- if( !os.getName().toLowerCase(Locale.ROOT).startsWith( "windows" ) ) {
- // Try some command line things
+ if (!Constants.WINDOWS) {
info.add( "uname", execute( "uname -a" ) );
info.add( "uptime", execute( "uptime" ) );
}
- }
- catch( Exception ex ) {
- ex.printStackTrace();
+ } catch( Exception ex ) {
+ log.warn("Unable to execute command line tools to get operating system properties.", ex);
}
return info;
}
/**
- * Try to run a getter function. This is useful because java 1.6 has a few extra
- * useful functions on the <code>OperatingSystemMXBean</code>
- *
- * If you are running a sun jvm, there are nice functions in:
- * UnixOperatingSystemMXBean and com.sun.management.OperatingSystemMXBean
- *
- * it is package protected so it can be tested...
+ * Add all bean properties of a {@link PlatformManagedObject} to the given {@link NamedList}.
+ * <p>
+ * If you are running a OpenJDK/Oracle JVM, there are nice properties in:
+ * {@code com.sun.management.UnixOperatingSystemMXBean} and
+ * {@code com.sun.management.OperatingSystemMXBean}
*/
- static void addGetterIfAvaliable( Object obj, String getter, NamedList<Object> info )
- {
- // This is a 1.6 function, so lets do a little magic to *try* to make it work
- try {
- String n = Character.toUpperCase( getter.charAt(0) ) + getter.substring( 1 );
- Method m = obj.getClass().getMethod( "get" + n );
- m.setAccessible(true);
- Object v = m.invoke( obj, (Object[])null );
- if( v != null ) {
- info.add( getter, v );
+ static <T extends PlatformManagedObject> void addMXBeanProperties(T obj, Class<? extends T> intf, NamedList<Object> info)
+ throws IntrospectionException, ReflectiveOperationException {
+ if (intf.isInstance(obj)) {
+ final BeanInfo beanInfo = Introspector.getBeanInfo(intf, intf.getSuperclass(), Introspector.IGNORE_ALL_BEANINFO);
+ for (final PropertyDescriptor desc : beanInfo.getPropertyDescriptors()) {
+ final String name = desc.getName();
+ if (info.get(name) == null) {
+ try {
+ final Object v = desc.getReadMethod().invoke(obj);
+ if(v != null) {
+ info.add(name, v);
+ }
+ } catch (InvocationTargetException ite) {
+ // ignore (some properties throw UOE)
+ }
+ }
}
}
- catch( Exception ex ) {} // don't worry, this only works for 1.6
}
@@ -314,7 +331,9 @@ public class SystemInfoHandler extends R
SimpleOrderedMap<Object> jmx = new SimpleOrderedMap<>();
try{
RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean();
- jmx.add( "bootclasspath", mx.getBootClassPath());
+ if (mx.isBootClassPathSupported()) {
+ jmx.add( "bootclasspath", mx.getBootClassPath());
+ }
jmx.add( "classpath", mx.getClassPath() );
// the input arguments passed to the Java virtual machine
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java Fri Sep 18 15:13:49 2015
@@ -152,7 +152,7 @@ public abstract class SolrQueryParserBas
try {
// TopLevelQuery is a Query followed by the end-of-input (EOF)
Query res = TopLevelQuery(null); // pass null so we can tell later if an explicit field was provided or not
- return res!=null ? res : newBooleanQuery(false).build();
+ return res!=null ? res : newBooleanQuery().build();
}
catch (ParseException | TokenMgrError tme) {
throw new SyntaxError("Cannot parse '" +query+ "': " + tme.getMessage(), tme);
@@ -488,30 +488,12 @@ public abstract class SolrQueryParserBas
*
* @return Resulting {@link org.apache.lucene.search.Query} object.
*/
- protected Query getBooleanQuery(List<BooleanClause> clauses) throws SyntaxError {
- return getBooleanQuery(clauses, false);
- }
-
- /**
- * Factory method for generating query, given a set of clauses.
- * By default creates a boolean query composed of clauses passed in.
- *
- * Can be overridden by extending classes, to modify query being
- * returned.
- *
- * @param clauses List that contains {@link org.apache.lucene.search.BooleanClause} instances
- * to join.
- * @param disableCoord true if coord scoring should be disabled.
- *
- * @return Resulting {@link org.apache.lucene.search.Query} object.
- */
- protected Query getBooleanQuery(List<BooleanClause> clauses, boolean disableCoord)
- throws SyntaxError
+ protected Query getBooleanQuery(List<BooleanClause> clauses) throws SyntaxError
{
if (clauses.size()==0) {
return null; // all clause words were filtered away by the analyzer.
}
- BooleanQuery.Builder query = newBooleanQuery(disableCoord);
+ BooleanQuery.Builder query = newBooleanQuery();
for(final BooleanClause clause: clauses) {
query.add(clause);
}
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/schema/FieldType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/schema/FieldType.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/schema/FieldType.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/schema/FieldType.java Fri Sep 18 15:13:49 2015
@@ -63,6 +63,7 @@ import org.apache.solr.common.SolrExcept
import org.apache.solr.common.util.Base64;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.common.util.StrUtils;
+import org.apache.solr.query.SolrRangeQuery;
import org.apache.solr.response.TextResponseWriter;
import org.apache.solr.search.QParser;
import org.apache.solr.search.Sorting;
@@ -720,12 +721,11 @@ public abstract class FieldType extends
part2 == null ? null : new BytesRef(toInternal(part2)),
minInclusive, maxInclusive);
} else {
- MultiTermQuery rangeQuery = TermRangeQuery.newStringRange(
+ SolrRangeQuery rangeQuery = new SolrRangeQuery(
field.getName(),
- part1 == null ? null : toInternal(part1),
- part2 == null ? null : toInternal(part2),
+ part1 == null ? null : new BytesRef(toInternal(part1)),
+ part2 == null ? null : new BytesRef(toInternal(part2)),
minInclusive, maxInclusive);
- rangeQuery.setRewriteMethod(getRewriteMethod(parser, field));
return rangeQuery;
}
}
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/schema/TextField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/schema/TextField.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/schema/TextField.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/schema/TextField.java Fri Sep 18 15:13:49 2015
@@ -28,6 +28,7 @@ import org.apache.lucene.uninverting.Uni
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.QueryBuilder;
import org.apache.solr.common.SolrException;
+import org.apache.solr.query.SolrRangeQuery;
import org.apache.solr.response.TextResponseWriter;
import org.apache.solr.search.QParser;
import org.apache.solr.search.Sorting;
@@ -136,7 +137,7 @@ public class TextField extends FieldType
Analyzer multiAnalyzer = getMultiTermAnalyzer();
BytesRef lower = analyzeMultiTerm(field.getName(), part1, multiAnalyzer);
BytesRef upper = analyzeMultiTerm(field.getName(), part2, multiAnalyzer);
- return new TermRangeQuery(field.getName(), lower, upper, minInclusive, maxInclusive);
+ return new SolrRangeQuery(field.getName(), lower, upper, minInclusive, maxInclusive);
}
public static BytesRef analyzeMultiTerm(String field, String part, Analyzer analyzerIn) {
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/BitDocSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/BitDocSet.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/BitDocSet.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/BitDocSet.java Fri Sep 18 15:13:49 2015
@@ -285,8 +285,7 @@ public class BitDocSet extends DocSetBas
}
final int base = context.docBase;
- final int maxDoc = reader.maxDoc();
- final int max = base + maxDoc; // one past the max doc in this segment.
+ final int max = base + reader.maxDoc(); // one past the max doc in this segment.
return BitsFilteredDocIdSet.wrap(new DocIdSet() {
@Override
@@ -302,10 +301,11 @@ public class BitDocSet extends DocSetBas
@Override
public int nextDoc() {
- if (pos >= bs.length() - 1) {
+ int next = pos+1;
+ if (next >= max) {
return adjustedDoc = NO_MORE_DOCS;
} else {
- pos = bs.nextSetBit(pos + 1);
+ pos = bs.nextSetBit(next);
return adjustedDoc = pos < max ? pos - base : NO_MORE_DOCS;
}
}
@@ -314,7 +314,7 @@ public class BitDocSet extends DocSetBas
public int advance(int target) {
if (target == NO_MORE_DOCS) return adjustedDoc = NO_MORE_DOCS;
int adjusted = target + base;
- if (adjusted >= bs.length()) {
+ if (adjusted >= max) {
return adjustedDoc = NO_MORE_DOCS;
} else {
pos = bs.nextSetBit(adjusted);
@@ -326,6 +326,7 @@ public class BitDocSet extends DocSetBas
public long cost() {
// we don't want to actually compute cardinality, but
// if it's already been computed, we use it (pro-rated for the segment)
+ int maxDoc = max-base;
if (size != -1) {
return (long)(size * ((FixedBitSet.bits2words(maxDoc)<<6) / (float)bs.length()));
} else {
@@ -350,7 +351,7 @@ public class BitDocSet extends DocSetBas
@Override
public int length() {
- return maxDoc;
+ return max-base;
}
};
}
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/DocSetCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/DocSetCollector.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/DocSetCollector.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/DocSetCollector.java Fri Sep 18 15:13:49 2015
@@ -40,6 +40,10 @@ public class DocSetCollector extends Sim
// in case there are only a few.
final int[] scratch;
+ public DocSetCollector(int maxDoc) {
+ this(DocSetUtil.smallSetSize(maxDoc), maxDoc);
+ }
+
public DocSetCollector(int smallSetSize, int maxDoc) {
this.smallSetSize = smallSetSize;
this.maxDoc = maxDoc;
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/DocSetUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/DocSetUtil.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/DocSetUtil.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/DocSetUtil.java Fri Sep 18 15:13:49 2015
@@ -46,43 +46,16 @@ import org.apache.lucene.util.FixedBitSe
/** @lucene.experimental */
public class DocSetUtil {
- private static DocSet createDocSetByIterator(SolrIndexSearcher searcher, Filter filter) throws IOException {
- int maxDoc = searcher.getIndexReader().maxDoc();
-
- Map fcontext = null;
- if (filter instanceof SolrFilter) {
- fcontext = ValueSource.newContext(searcher);
- ((SolrFilter) filter).createWeight(fcontext, searcher);
- }
-
- DocSetCollector collector = new DocSetCollector((maxDoc >> 6) + 5, maxDoc);
-
- for (LeafReaderContext readerContext : searcher.getIndexReader().getContext().leaves()) {
- collector.doSetNextReader(readerContext);
- Bits acceptDocs = readerContext.reader().getLiveDocs();
-
- DocIdSet docIdSet = filter instanceof SolrFilter
- ? ((SolrFilter) filter).getDocIdSet(fcontext, readerContext, acceptDocs)
- : filter.getDocIdSet(readerContext, acceptDocs);
-
- if (docIdSet == null) continue;
- DocIdSetIterator iter = docIdSet.iterator();
-
- for (;;) {
- int id = iter.nextDoc();
- if (id == DocIdSetIterator.NO_MORE_DOCS) {
- break;
- }
- collector.collect(id);
- }
-
- }
-
- return collector.getDocSet();
-
+ /** The cut-off point for small sets (SortedIntDocSet) vs large sets (BitDocSet) */
+ public static int smallSetSize(int maxDoc) {
+ return (maxDoc>>6)+5; // The +5 is for better test coverage for small sets
}
- private static boolean equals(DocSet a, DocSet b) {
+ /**
+ * Iterates DocSets to test for equality - slow and for testing purposes only.
+ * @lucene.internal
+ */
+ public static boolean equals(DocSet a, DocSet b) {
DocIterator iter1 = a.iterator();
DocIterator iter2 = b.iterator();
@@ -129,7 +102,7 @@ public class DocSetUtil {
public static DocSet createDocSetGeneric(SolrIndexSearcher searcher, Query query) throws IOException {
int maxDoc = searcher.getIndexReader().maxDoc();
- DocSetCollector collector = new DocSetCollector((maxDoc >> 6) + 5, maxDoc);
+ DocSetCollector collector = new DocSetCollector(maxDoc);
// This may throw an ExitableDirectoryReader.ExitingReaderException
// but we should not catch it here, as we don't know how this DocSet will be used (it could be negated before use) or cached.
@@ -141,7 +114,7 @@ public class DocSetUtil {
public static DocSet createDocSet(SolrIndexSearcher searcher, Term term) throws IOException {
DirectoryReader reader = searcher.getRawReader(); // raw reader to avoid extra wrapping overhead
int maxDoc = searcher.getIndexReader().maxDoc();
- int smallSetSize = (maxDoc >> 6) + 5;
+ int smallSetSize = smallSetSize(maxDoc);
String field = term.field();
@@ -219,7 +192,7 @@ public class DocSetUtil {
BitDocSet docSet = new BitDocSet( new FixedBitSet(bits, maxDoc), sz );
- int smallSetSize = (maxDoc >> 6) + 5;
+ int smallSetSize = smallSetSize(maxDoc);
if (sz < smallSetSize) {
// make this optional?
DocSet smallSet = toSmallSet( docSet );
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java Fri Sep 18 15:13:49 2015
@@ -1010,8 +1010,8 @@ public class ExtendedDismaxQParser exten
}
@Override
- protected Query getBooleanQuery(List<BooleanClause> clauses, boolean disableCoord) throws SyntaxError {
- Query q = super.getBooleanQuery(clauses, disableCoord);
+ protected Query getBooleanQuery(List<BooleanClause> clauses) throws SyntaxError {
+ Query q = super.getBooleanQuery(clauses);
if (q != null) {
q = QueryUtils.makeQueryable(q);
}
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/Grouping.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/Grouping.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/Grouping.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/Grouping.java Fri Sep 18 15:13:49 2015
@@ -347,7 +347,7 @@ public class Grouping {
DocSetCollector setCollector = null;
if (getDocSet && allGroupHeadsCollector == null) {
- setCollector = new DocSetCollector(maxDoc >> 6, maxDoc);
+ setCollector = new DocSetCollector(maxDoc);
collectors.add(setCollector);
}
Collector allCollectors = MultiCollector.wrap(collectors);
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java Fri Sep 18 15:13:49 2015
@@ -462,6 +462,10 @@ public class SolrIndexSearcher extends I
return fieldNames;
}
+ public SolrCache<Query,DocSet> getFilterCache() {
+ return filterCache;
+ }
+
/**
* Returns a collection of the names of all stored fields which can be
* highlighted the index reader knows about.
@@ -919,12 +923,12 @@ public class SolrIndexSearcher extends I
DocSet absAnswer = filterCache.get(absQ);
if (absAnswer!=null) {
if (positive) return absAnswer;
- else return getPositiveDocSet(matchAllDocsQuery).andNot(absAnswer);
+ else return getLiveDocs().andNot(absAnswer);
}
}
DocSet absAnswer = getDocSetNC(absQ, null);
- DocSet answer = positive ? absAnswer : getPositiveDocSet(matchAllDocsQuery).andNot(absAnswer);
+ DocSet answer = positive ? absAnswer : getLiveDocs().andNot(absAnswer);
if (filterCache != null) {
// cache negative queries as positive
@@ -948,7 +952,15 @@ public class SolrIndexSearcher extends I
}
private static Query matchAllDocsQuery = new MatchAllDocsQuery();
+ private BitDocSet liveDocs;
+ public BitDocSet getLiveDocs() throws IOException {
+ // going through the filter cache will provide thread safety here
+ if (liveDocs == null) {
+ liveDocs = getDocSetBits(matchAllDocsQuery);
+ }
+ return liveDocs;
+ }
public static class ProcessedFilter {
public DocSet answer; // the answer, if non-null
@@ -967,7 +979,7 @@ public class SolrIndexSearcher extends I
private DocSet getDocSetScore(List<Query> queries) throws IOException {
Query main = queries.remove(0);
ProcessedFilter pf = getProcessedFilter(null, queries);
- DocSetCollector setCollector = new DocSetCollector(maxDoc()>>6, maxDoc());
+ DocSetCollector setCollector = new DocSetCollector(maxDoc());
Collector collector = setCollector;
if (pf.postFilter != null) {
pf.postFilter.setLastDelegate(collector);
@@ -1014,7 +1026,7 @@ public class SolrIndexSearcher extends I
if (pf.answer != null) return pf.answer;
- DocSetCollector setCollector = new DocSetCollector(maxDoc()>>6, maxDoc());
+ DocSetCollector setCollector = new DocSetCollector(maxDoc());
Collector collector = setCollector;
if (pf.postFilter != null) {
pf.postFilter.setLastDelegate(collector);
@@ -1129,7 +1141,7 @@ public class SolrIndexSearcher extends I
// Are all of our normal cached filters negative?
if (end > 0 && answer==null) {
- answer = getPositiveDocSet(matchAllDocsQuery);
+ answer = getLiveDocs();
}
// do negative queries first to shrink set size
@@ -1152,7 +1164,7 @@ public class SolrIndexSearcher extends I
} else {
if (postFilters == null) {
if (answer == null) {
- answer = getPositiveDocSet(matchAllDocsQuery);
+ answer = getLiveDocs();
}
// "answer" is the only part of the filter, so set it.
pf.answer = answer;
@@ -1187,7 +1199,7 @@ public class SolrIndexSearcher extends I
if (result != null) return result;
}
- int smallSetSize = maxDoc()>>6;
+ int smallSetSize = DocSetUtil.smallSetSize(maxDoc());
int scratchSize = Math.min(smallSetSize, largestPossible);
if (deState.scratch == null || deState.scratch.length < scratchSize)
deState.scratch = new int[scratchSize];
@@ -1715,7 +1727,6 @@ public class SolrIndexSearcher extends I
boolean needScores = (cmd.getFlags() & GET_SCORES) != 0;
int maxDoc = maxDoc();
- int smallSetSize = maxDoc>>6;
ProcessedFilter pf = getProcessedFilter(cmd.getFilter(), cmd.getFilterList());
Query query = QueryUtils.makeQueryable(cmd.getQuery());
@@ -1731,7 +1742,7 @@ public class SolrIndexSearcher extends I
final float[] topscore = new float[] { Float.NEGATIVE_INFINITY };
Collector collector;
- final DocSetCollector setCollector = new DocSetCollector(smallSetSize, maxDoc);
+ final DocSetCollector setCollector = new DocSetCollector(maxDoc);
if (!needScores) {
collector = setCollector;
@@ -1774,7 +1785,7 @@ public class SolrIndexSearcher extends I
} else {
final TopDocsCollector topCollector = buildTopDocsCollector(len, cmd);
- DocSetCollector setCollector = new DocSetCollector(maxDoc>>6, maxDoc);
+ DocSetCollector setCollector = new DocSetCollector(maxDoc);
Collector collector = MultiCollector.wrap(topCollector, setCollector);
buildAndRunCollectorChain(qr, query, collector, cmd, pf.postFilter);
@@ -2151,7 +2162,7 @@ public class SolrIndexSearcher extends I
// if both negative, we need to create a temp DocSet since we
// don't have a counting method that takes three.
- DocSet all = getPositiveDocSet(matchAllDocsQuery);
+ DocSet all = getLiveDocs();
// -a -b == *:*.andNot(a).andNotSize(b) == *.*.andNotSize(a.union(b))
// we use the last form since the intermediate DocSet should normally be smaller.
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/facet/BlockJoin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/facet/BlockJoin.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/facet/BlockJoin.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/facet/BlockJoin.java Fri Sep 18 15:13:49 2015
@@ -26,6 +26,7 @@ import org.apache.solr.search.BitDocSet;
import org.apache.solr.search.DocIterator;
import org.apache.solr.search.DocSet;
import org.apache.solr.search.DocSetCollector;
+import org.apache.solr.search.DocSetUtil;
import org.apache.solr.search.QueryContext;
/** @lucene.experimental */
@@ -36,7 +37,7 @@ public class BlockJoin {
*/
public static DocSet toChildren(DocSet parentInput, BitDocSet parentList, DocSet acceptDocs, QueryContext qcontext) throws IOException {
FixedBitSet parentBits = parentList.getBits();
- DocSetCollector collector = new DocSetCollector(qcontext.searcher().maxDoc()>>6, qcontext.searcher().maxDoc());
+ DocSetCollector collector = new DocSetCollector(qcontext.searcher().maxDoc());
DocIterator iter = parentInput.iterator();
while (iter.hasNext()) {
int parentDoc = iter.nextDoc();
@@ -56,7 +57,7 @@ public class BlockJoin {
/** childInput may also contain parents (i.e. a parent or below will all roll up to that parent) */
public static DocSet toParents(DocSet childInput, BitDocSet parentList, QueryContext qcontext) throws IOException {
FixedBitSet parentBits = parentList.getBits();
- DocSetCollector collector = new DocSetCollector(qcontext.searcher().maxDoc()>>6, qcontext.searcher().maxDoc());
+ DocSetCollector collector = new DocSetCollector(qcontext.searcher().maxDoc());
DocIterator iter = childInput.iterator();
int currentParent = -1;
while (iter.hasNext()) {
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java Fri Sep 18 15:13:49 2015
@@ -190,7 +190,7 @@ public class CommandHandler {
private DocSet computeDocSet(Query query, ProcessedFilter filter, List<Collector> collectors) throws IOException {
int maxDoc = searcher.maxDoc();
final Collector collector;
- final DocSetCollector docSetCollector = new DocSetCollector(maxDoc >> 6, maxDoc);
+ final DocSetCollector docSetCollector = new DocSetCollector(maxDoc);
List<Collector> allCollectors = new ArrayList<>(collectors);
allCollectors.add(docSetCollector);
searchWithTimeLimiter(query, filter, MultiCollector.wrap(allCollectors));
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/similarities/DefaultSimilarityFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/similarities/DefaultSimilarityFactory.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/similarities/DefaultSimilarityFactory.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/similarities/DefaultSimilarityFactory.java Fri Sep 18 15:13:49 2015
@@ -17,22 +17,22 @@ package org.apache.solr.search.similarit
* limitations under the License.
*/
-import org.apache.lucene.search.similarities.DefaultSimilarity;
+import org.apache.lucene.search.similarities.ClassicSimilarity;
import org.apache.lucene.search.similarities.Similarity;
import org.apache.lucene.search.similarities.TFIDFSimilarity; // javadoc
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.schema.SimilarityFactory;
/**
- * Factory for {@link DefaultSimilarity}
+ * Factory for {@link ClassicSimilarity}
* <p>
- * DefaultSimilarity is Lucene's default scoring implementation, based
+ * ClassicSimilarity is Lucene's original scoring implementation, based
* upon the Vector Space Model.
* <p>
* Optional settings:
* <ul>
* <li>discountOverlaps (bool): Sets
- * {@link DefaultSimilarity#setDiscountOverlaps(boolean)}</li>
+ * {@link ClassicSimilarity#setDiscountOverlaps(boolean)}</li>
* </ul>
* @see TFIDFSimilarity
* @lucene.experimental
@@ -40,13 +40,13 @@ import org.apache.solr.schema.Similarity
public class DefaultSimilarityFactory extends SimilarityFactory {
/** Init param name for specifying the value to use in
- * {@link DefaultSimilarity#setDiscountOverlaps(boolean)}
+ * {@link ClassicSimilarity#setDiscountOverlaps(boolean)}
*/
public static final String DISCOUNT_OVERLAPS = "discountOverlaps";
/**
- * Controls the value of {@link DefaultSimilarity#setDiscountOverlaps(boolean)}
- * on newly constructed instances of {@link DefaultSimilarity}
+ * Controls the value of {@link ClassicSimilarity#setDiscountOverlaps(boolean)}
+ * on newly constructed instances of {@link ClassicSimilarity}
*/
protected boolean discountOverlaps = true;
@@ -58,7 +58,7 @@ public class DefaultSimilarityFactory ex
@Override
public Similarity getSimilarity() {
- DefaultSimilarity sim = new DefaultSimilarity();
+ ClassicSimilarity sim = new ClassicSimilarity();
sim.setDiscountOverlaps(discountOverlaps);
return sim;
}
Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java Fri Sep 18 15:13:49 2015
@@ -17,7 +17,7 @@ package org.apache.solr.search.similarit
* limitations under the License.
*/
-import org.apache.lucene.search.similarities.DefaultSimilarity;
+import org.apache.lucene.search.similarities.ClassicSimilarity;
import org.apache.lucene.search.similarities.PerFieldSimilarityWrapper;
import org.apache.lucene.search.similarities.Similarity;
import org.apache.solr.common.params.SolrParams;
@@ -29,7 +29,7 @@ import org.apache.solr.util.plugin.SolrC
/**
* SimilarityFactory that returns a {@link PerFieldSimilarityWrapper}
* that delegates to the field type, if it's configured, otherwise
- * {@link DefaultSimilarity}.
+ * {@link ClassicSimilarity}.
*
* <p>
* <b>NOTE:</b> Users should be aware that in addition to supporting
@@ -45,7 +45,7 @@ import org.apache.solr.util.plugin.SolrC
*/
public class SchemaSimilarityFactory extends SimilarityFactory implements SolrCoreAware {
private Similarity similarity;
- private Similarity defaultSimilarity = new DefaultSimilarity();
+ private Similarity defaultSimilarity = new ClassicSimilarity();
private volatile SolrCore core;
@Override