You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2011/02/09 10:36:03 UTC

svn commit: r1068809 [29/36] - in /lucene/dev/branches/docvalues: ./ dev-tools/eclipse/ dev-tools/idea/.idea/ dev-tools/idea/.idea/copyright/ dev-tools/idea/lucene/ dev-tools/idea/lucene/contrib/ant/ dev-tools/idea/lucene/contrib/queryparser/ dev-tools...

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/DocSetHitCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/DocSetHitCollector.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/DocSetHitCollector.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/DocSetHitCollector.java Wed Feb  9 09:35:27 2011
@@ -20,7 +20,7 @@ package org.apache.solr.search;
 import org.apache.lucene.search.Collector;
 import org.apache.lucene.search.Scorer;
 import org.apache.lucene.util.OpenBitSet;
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 
 import java.io.IOException;
 
@@ -45,6 +45,7 @@ class DocSetCollector extends Collector 
     this.maxDoc = maxDoc;
     this.scratch = new int[smallSetSize];
   }
+  @Override
   public void collect(int doc) throws IOException {
     doc += base;
     // optimistically collect the first docs in an array
@@ -77,13 +78,16 @@ class DocSetCollector extends Collector 
     }
   }
 
+  @Override
   public void setScorer(Scorer scorer) throws IOException {
   }
 
-  public void setNextReader(IndexReader reader, int docBase) throws IOException {
-    this.base = docBase;
+  @Override
+  public void setNextReader(AtomicReaderContext context) throws IOException {
+    this.base = context.docBase;
   }
 
+  @Override
   public boolean acceptsDocsOutOfOrder() {
     return false;
   }
@@ -97,6 +101,7 @@ class DocSetDelegateCollector extends Do
     this.collector = collector;
   }
 
+  @Override
   public void collect(int doc) throws IOException {
     collector.collect(doc);
 
@@ -120,6 +125,7 @@ class DocSetDelegateCollector extends Do
     pos++;
   }
 
+  @Override
   public DocSet getDocSet() {
     if (pos<=scratch.length) {
       // assumes docs were collected in sorted order!
@@ -131,12 +137,14 @@ class DocSetDelegateCollector extends Do
     }
   }
 
+  @Override
   public void setScorer(Scorer scorer) throws IOException {
     collector.setScorer(scorer);
   }
 
-  public void setNextReader(IndexReader reader, int docBase) throws IOException {
-    collector.setNextReader(reader, docBase);
-    this.base = docBase;
+  @Override
+  public void setNextReader(AtomicReaderContext context) throws IOException {
+    collector.setNextReader(context);
+    this.base = context.docBase;
   }
 }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java Wed Feb  9 09:35:27 2011
@@ -55,6 +55,7 @@ public class ExtendedDismaxQParserPlugin
   public void init(NamedList args) {
   }
 
+  @Override
   public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
     return new ExtendedDismaxQParser(qstr, localParams, params, req);
   }
@@ -96,6 +97,7 @@ class ExtendedDismaxQParser extends QPar
   private QParser altQParser;
 
 
+  @Override
   public Query parse() throws ParseException {
     SolrParams localParams = getLocalParams();
     SolrParams params = getParams();
@@ -483,6 +485,7 @@ class ExtendedDismaxQParser extends QPar
     return parsedUserQuery == null ? altUserQuery : parsedUserQuery;
   }
 
+  @Override
   public void addDebugInfo(NamedList<Object> debugInfo) {
     super.addDebugInfo(debugInfo);
     debugInfo.add("altquerystring", altUserQuery);
@@ -820,6 +823,7 @@ class ExtendedDismaxQParser extends QPar
       analyzer.removeStopFilter = remove;
     }
 
+    @Override
     protected Query getBooleanQuery(List clauses, boolean disableCoord) throws ParseException {
       Query q = super.getBooleanQuery(clauses, disableCoord);
       if (q != null) {
@@ -834,6 +838,7 @@ class ExtendedDismaxQParser extends QPar
     ////////////////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////////
 
+    @Override
     protected void addClause(List clauses, int conj, int mods, Query q) {
 //System.out.println("addClause:clauses="+clauses+" conj="+conj+" mods="+mods+" q="+q);
       super.addClause(clauses, conj, mods, q);
@@ -1075,6 +1080,7 @@ final class ExtendedAnalyzer extends Ana
     this.queryAnalyzer = parser.getReq().getSchema().getQueryAnalyzer();
   }
 
+  @Override
   public TokenStream tokenStream(String fieldName, Reader reader) {
     if (!removeStopFilter) {
       return queryAnalyzer.tokenStream(fieldName, reader);
@@ -1138,10 +1144,12 @@ final class ExtendedAnalyzer extends Ana
     return newa.tokenStream(fieldName, reader);        
   }
 
+  @Override
   public int getPositionIncrementGap(String fieldName) {
     return queryAnalyzer.getPositionIncrementGap(fieldName);
   }
 
+  @Override
   public TokenStream reusableTokenStream(String fieldName, Reader reader) throws IOException {
     if (!removeStopFilter) {
       return queryAnalyzer.reusableTokenStream(fieldName, reader);

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FastLRUCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FastLRUCache.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FastLRUCache.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FastLRUCache.java Wed Feb  9 09:35:27 2011
@@ -274,6 +274,7 @@ public class FastLRUCache<K,V> extends S
     return lst;
   }
 
+  @Override
   public String toString() {
     return name + getStatistics().toString();
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FieldQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FieldQParserPlugin.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FieldQParserPlugin.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FieldQParserPlugin.java Wed Feb  9 09:35:27 2011
@@ -38,8 +38,10 @@ public class FieldQParserPlugin extends 
   public void init(NamedList args) {
   }
 
+  @Override
   public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
     return new QParser(qstr, localParams, params, req) {
+      @Override
       public Query parse() throws ParseException {
         String field = localParams.get(QueryParsing.F);
         String queryText = localParams.get(QueryParsing.V);

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FunctionQParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FunctionQParser.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FunctionQParser.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FunctionQParser.java Wed Feb  9 09:35:27 2011
@@ -56,6 +56,7 @@ public class FunctionQParser extends QPa
     return parseMultipleSources;
   }
 
+  @Override
   public Query parse() throws ParseException {
     sp = new QueryParsing.StrParser(getString());
 

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FunctionQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FunctionQParserPlugin.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FunctionQParserPlugin.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FunctionQParserPlugin.java Wed Feb  9 09:35:27 2011
@@ -31,6 +31,7 @@ public class FunctionQParserPlugin exten
   public void init(NamedList args) {
   }
 
+  @Override
   public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
     return new FunctionQParser(qstr, localParams, params, req);
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FunctionRangeQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FunctionRangeQParserPlugin.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FunctionRangeQParserPlugin.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/FunctionRangeQParserPlugin.java Wed Feb  9 09:35:27 2011
@@ -39,11 +39,13 @@ public class FunctionRangeQParserPlugin 
   public void init(NamedList args) {
   }
 
+  @Override
   public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
     return new QParser(qstr, localParams, params, req) {
       ValueSource vs;
       String funcStr;
 
+      @Override
       public Query parse() throws ParseException {
         funcStr = localParams.get(QueryParsing.V, null);
         Query funcQ = subQuery(funcStr, FunctionQParserPlugin.NAME).parse();

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/Grouping.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/Grouping.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/Grouping.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/Grouping.java Wed Feb  9 09:35:27 2011
@@ -17,7 +17,7 @@
 
 package org.apache.solr.search;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.*;
 import org.apache.lucene.util.BytesRef;
 import org.apache.solr.common.util.NamedList;
@@ -77,10 +77,11 @@ public class Grouping {
       int docsToCollect = getMax(off, len, max);
 
       // TODO: implement a DocList impl that doesn't need to start at offset=0
-      TopDocs topDocs = collector.topDocs(0, docsToCollect);
+      TopDocs topDocs = collector.topDocs(0, Math.max(docsToCollect,1));  // 0 isn't supported as a valid value
+      int docsCollected = Math.min(docsToCollect, topDocs.scoreDocs.length);
 
-      int ids[] = new int[topDocs.scoreDocs.length];
-      float[] scores = needScores ? new float[topDocs.scoreDocs.length] : null;
+      int ids[] = new int[docsCollected];
+      float[] scores = needScores ? new float[docsCollected] : null;
       for (int i=0; i<ids.length; i++) {
         ids[i] = topDocs.scoreDocs[i].doc;
         if (scores != null)
@@ -151,7 +152,7 @@ public class Grouping {
     
     @Override
     void prepare() throws IOException {
-        Map context = ValueSource.newContext();
+        Map context = ValueSource.newContext(searcher);
         groupBy.createWeight(context, searcher);
     }
 
@@ -162,7 +163,7 @@ public class Grouping {
       // if we aren't going to return any groups, disregard the offset 
       if (numGroups == 0) maxGroupToFind = 0;
 
-      collector = new TopGroupCollector(groupBy, context, normalizeSort(sort), maxGroupToFind);
+      collector = new TopGroupCollector(groupBy, context, searcher.weightSort(normalizeSort(sort)), maxGroupToFind);
 
       /*** if we need a different algorithm when sort != group.sort
       if (compareSorts(sort, groupSort)) {
@@ -185,9 +186,9 @@ public class Grouping {
       int collectorOffset = format==Format.Simple ? 0 : offset;
 
       if (groupBy instanceof StrFieldSource) {
-        collector2 = new Phase2StringGroupCollector(collector, groupBy, context, groupSort, docsToCollect, needScores, collectorOffset);
+        collector2 = new Phase2StringGroupCollector(collector, groupBy, context, searcher.weightSort(groupSort), docsToCollect, needScores, collectorOffset);
       } else {
-        collector2 = new Phase2GroupCollector(collector, groupBy, context, groupSort, docsToCollect, needScores, collectorOffset);
+        collector2 = new Phase2GroupCollector(collector, groupBy, context, searcher.weightSort(groupSort), docsToCollect, needScores, collectorOffset);
       }
       return collector2;
     }
@@ -306,11 +307,11 @@ public class Grouping {
     return v;
   }
 
-  static TopDocsCollector newCollector(Sort sort, int numHits, boolean fillFields, boolean needScores) throws IOException {
+  TopDocsCollector newCollector(Sort sort, int numHits, boolean fillFields, boolean needScores) throws IOException {
     if (sort==null || sort==byScoreDesc) {
       return TopScoreDocCollector.create(numHits, true);
     } else {
-      return TopFieldCollector.create(sort, numHits, false, needScores, needScores, true);
+      return TopFieldCollector.create(searcher.weightSort(sort), numHits, false, needScores, needScores, true);
     }
   }
 
@@ -457,14 +458,15 @@ class FilterCollector extends GroupColle
   @Override
   public void collect(int doc) throws IOException {
     matches++;
-    if (filter.exists(doc + docBase))
+    if (filter.exists(doc + docBase)) {
       collector.collect(doc);
+    }
   }
 
   @Override
-  public void setNextReader(IndexReader reader, int docBase) throws IOException {
-    this.docBase = docBase;
-    collector.setNextReader(reader, docBase);
+  public void setNextReader(AtomicReaderContext context) throws IOException {
+    docBase = context.docBase;
+    collector.setNextReader(context);
   }
 
   @Override
@@ -504,12 +506,12 @@ class TopGroupCollector extends GroupCol
 
   int matches;
 
-  public TopGroupCollector(ValueSource groupByVS, Map vsContext, Sort sort, int nGroups) throws IOException {
+  public TopGroupCollector(ValueSource groupByVS, Map vsContext, Sort weightedSort, int nGroups) throws IOException {
     this.vs = groupByVS;
     this.context = vsContext;
     this.nGroups = nGroups = Math.max(1,nGroups);  // we need a minimum of 1 for this collector
 
-    SortField[] sortFields = sort.getSort();
+    SortField[] sortFields = weightedSort.getSort();
     this.comparators = new FieldComparator[sortFields.length];
     this.reversed = new int[sortFields.length];
     for (int i = 0; i < sortFields.length; i++) {
@@ -685,13 +687,13 @@ class TopGroupCollector extends GroupCol
   }
 
   @Override
-  public void setNextReader(IndexReader reader, int docBase) throws IOException {
-    this.docBase = docBase;
-    docValues = vs.getValues(context, reader);
+  public void setNextReader(AtomicReaderContext readerContext) throws IOException {
+    this.docBase = readerContext.docBase;
+    docValues = vs.getValues(context, readerContext);
     filler = docValues.getValueFiller();
     mval = filler.getValue();
     for (int i=0; i<comparators.length; i++)
-      comparators[i] = comparators[i].setNextReader(reader, docBase);
+      comparators[i] = comparators[i].setNextReader(readerContext);
   }
 
   @Override
@@ -718,7 +720,7 @@ class Phase2GroupCollector extends Colle
   int docBase;
 
   // TODO: may want to decouple from the phase1 collector
-  public Phase2GroupCollector(TopGroupCollector topGroups, ValueSource groupByVS, Map vsContext, Sort sort, int docsPerGroup, boolean getScores, int offset) throws IOException {
+  public Phase2GroupCollector(TopGroupCollector topGroups, ValueSource groupByVS, Map vsContext, Sort weightedSort, int docsPerGroup, boolean getScores, int offset) throws IOException {
     boolean getSortFields = false;
 
     if (topGroups.orderedGroups == null)
@@ -732,10 +734,10 @@ class Phase2GroupCollector extends Colle
       }
       SearchGroupDocs groupDocs = new SearchGroupDocs();
       groupDocs.groupValue = group.groupValue;
-      if (sort==null)
+      if (weightedSort==null)
         groupDocs.collector = TopScoreDocCollector.create(docsPerGroup, true);        
       else
-        groupDocs.collector = TopFieldCollector.create(sort, docsPerGroup, getSortFields, getScores, getScores, true);
+        groupDocs.collector = TopFieldCollector.create(weightedSort, docsPerGroup, getSortFields, getScores, getScores, true);
       groupMap.put(groupDocs.groupValue, groupDocs);
     }
 
@@ -759,13 +761,13 @@ class Phase2GroupCollector extends Colle
   }
 
   @Override
-  public void setNextReader(IndexReader reader, int docBase) throws IOException {
-    this.docBase = docBase;
-    docValues = vs.getValues(context, reader);
+  public void setNextReader(AtomicReaderContext readerContext) throws IOException {
+    this.docBase = readerContext.docBase;
+    docValues = vs.getValues(context, readerContext);
     filler = docValues.getValueFiller();
     mval = filler.getValue();
     for (SearchGroupDocs group : groupMap.values())
-      group.collector.setNextReader(reader, docBase);
+      group.collector.setNextReader(readerContext);
   }
 
   @Override
@@ -790,8 +792,8 @@ class Phase2StringGroupCollector extends
   final SearchGroupDocs[] groups;
   final BytesRef spare = new BytesRef();
 
-  public Phase2StringGroupCollector(TopGroupCollector topGroups, ValueSource groupByVS, Map vsContext, Sort sort, int docsPerGroup, boolean getScores, int offset) throws IOException {
-    super(topGroups, groupByVS, vsContext,sort,docsPerGroup,getScores,offset);
+  public Phase2StringGroupCollector(TopGroupCollector topGroups, ValueSource groupByVS, Map vsContext, Sort weightedSort, int docsPerGroup, boolean getScores, int offset) throws IOException {
+    super(topGroups, groupByVS, vsContext,weightedSort,docsPerGroup,getScores,offset);
     ordSet = new SentinelIntSet(groupMap.size(), -1);
     groups = new SearchGroupDocs[ordSet.keys.length];
   }
@@ -812,8 +814,8 @@ class Phase2StringGroupCollector extends
   }
 
   @Override
-  public void setNextReader(IndexReader reader, int docBase) throws IOException {
-    super.setNextReader(reader, docBase);
+  public void setNextReader(AtomicReaderContext context) throws IOException {
+    super.setNextReader(context);
     index = ((StringIndexDocValues)docValues).getDocTermsIndex();
 
     ordSet.clear();

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/LRUCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/LRUCache.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/LRUCache.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/LRUCache.java Wed Feb  9 09:35:27 2011
@@ -77,6 +77,7 @@ public class LRUCache<K,V> extends SolrC
     description += ')';
 
     map = new LinkedHashMap<K,V>(initialSize, 0.75f, true) {
+        @Override
         protected boolean removeEldestEntry(Map.Entry eldest) {
           if (size() > limit) {
             // increment evictions regardless of state.
@@ -277,6 +278,7 @@ public class LRUCache<K,V> extends SolrC
     return lst;
   }
 
+  @Override
   public String toString() {
     return name + getStatistics().toString();
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/LuceneQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/LuceneQParserPlugin.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/LuceneQParserPlugin.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/LuceneQParserPlugin.java Wed Feb  9 09:35:27 2011
@@ -41,6 +41,7 @@ public class LuceneQParserPlugin extends
   public void init(NamedList args) {
   }
 
+  @Override
   public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
     return new LuceneQParser(qstr, localParams, params, req);
   }
@@ -55,6 +56,7 @@ class LuceneQParser extends QParser {
   }
 
 
+  @Override
   public Query parse() throws ParseException {
     String qstr = getString();
     if (qstr == null) return null;
@@ -73,6 +75,7 @@ class LuceneQParser extends QParser {
   }
 
 
+  @Override
   public String[] getDefaultHighlightFields() {
     return lparser == null ? new String[]{} : new String[]{lparser.getField()};
   }
@@ -87,6 +90,7 @@ class OldLuceneQParser extends LuceneQPa
     super(qstr, localParams, params, req);
   }
 
+  @Override
   public Query parse() throws ParseException {
     // handle legacy "query;sort" syntax
     if (getLocalParams() == null) {

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/LuceneQueryOptimizer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/LuceneQueryOptimizer.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/LuceneQueryOptimizer.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/LuceneQueryOptimizer.java Wed Feb  9 09:35:27 2011
@@ -46,6 +46,7 @@ class LuceneQueryOptimizer {
    */
   public LuceneQueryOptimizer(final int cacheSize, float threshold) {
     this.cache = new LinkedHashMap(cacheSize, 0.75f, true) {
+        @Override
         protected boolean removeEldestEntry(Map.Entry eldest) {
           return size() > cacheSize;              // limit size of cache
         }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/MissingStringLastComparatorSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/MissingStringLastComparatorSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/MissingStringLastComparatorSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/MissingStringLastComparatorSource.java Wed Feb  9 09:35:27 2011
@@ -19,6 +19,7 @@ package org.apache.solr.search;
 
 import org.apache.lucene.search.*;
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.packed.Direct16;
 import org.apache.lucene.util.packed.Direct32;
@@ -46,6 +47,7 @@ public class MissingStringLastComparator
     this.missingValueProxy=missingValueProxy;
   }
 
+  @Override
   public FieldComparator newComparator(String fieldname, int numHits, int sortPos, boolean reversed) throws IOException {
     return new TermOrdValComparator_SML(numHits, fieldname, sortPos, reversed, missingValueProxy);
   }
@@ -101,8 +103,8 @@ class TermOrdValComparator_SML extends F
   }
 
   @Override
-  public FieldComparator setNextReader(IndexReader reader, int docBase) throws IOException {
-    return TermOrdValComparator_SML.createComparator(reader, this);
+  public FieldComparator setNextReader(AtomicReaderContext context) throws IOException {
+    return TermOrdValComparator_SML.createComparator(context.reader, this);
   }
 
   // Base class for specialized (per bit width of the
@@ -142,8 +144,8 @@ class TermOrdValComparator_SML extends F
     }
 
     @Override
-    public FieldComparator setNextReader(IndexReader reader, int docBase) throws IOException {
-      return TermOrdValComparator_SML.createComparator(reader, parent);
+    public FieldComparator setNextReader(AtomicReaderContext context) throws IOException {
+      return TermOrdValComparator_SML.createComparator(context.reader, parent);
     }
 
     @Override

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/MutableValue.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/MutableValue.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/MutableValue.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/MutableValue.java Wed Feb  9 09:35:27 2011
@@ -50,6 +50,7 @@ public abstract class MutableValue imple
     return (c1 == c2) && this.equalsSameType(other);
   }
 
+  @Override
   public abstract int hashCode();
 
   @Override

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/NestedQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/NestedQParserPlugin.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/NestedQParserPlugin.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/NestedQParserPlugin.java Wed Feb  9 09:35:27 2011
@@ -38,25 +38,30 @@ public class NestedQParserPlugin extends
   public void init(NamedList args) {
   }
 
+  @Override
   public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
     return new QParser(qstr, localParams, params, req) {
       QParser baseParser;
       ValueSource vs;
       String b;
 
+      @Override
       public Query parse() throws ParseException {
         baseParser = subQuery(localParams.get(QueryParsing.V), null);
         return baseParser.getQuery();
       }
 
+      @Override
       public String[] getDefaultHighlightFields() {
         return baseParser.getDefaultHighlightFields();
       }
 
+      @Override
       public Query getHighlightQuery() throws ParseException {
         return baseParser.getHighlightQuery();
       }
 
+      @Override
       public void addDebugInfo(NamedList<Object> debugInfo) {
         // encapsulate base debug info in a sub-list?
         baseParser.addDebugInfo(debugInfo);

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/OldLuceneQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/OldLuceneQParserPlugin.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/OldLuceneQParserPlugin.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/OldLuceneQParserPlugin.java Wed Feb  9 09:35:27 2011
@@ -31,6 +31,7 @@ public class OldLuceneQParserPlugin exte
   public void init(NamedList args) {
   }
 
+  @Override
   public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
     return new OldLuceneQParser(qstr, localParams, params, req);
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/PrefixQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/PrefixQParserPlugin.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/PrefixQParserPlugin.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/PrefixQParserPlugin.java Wed Feb  9 09:35:27 2011
@@ -36,8 +36,10 @@ public class PrefixQParserPlugin extends
   public void init(NamedList args) {
   }
 
+  @Override
   public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
     return new QParser(qstr, localParams, params, req) {
+      @Override
       public Query parse() throws ParseException {
         return new PrefixQuery(new Term(localParams.get(QueryParsing.F), localParams.get(QueryParsing.V)));
       }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/QParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/QParser.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/QParser.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/QParser.java Wed Feb  9 09:35:27 2011
@@ -63,10 +63,11 @@ public abstract class QParser {
     if (localParams != null) {
       String tagStr = localParams.get(CommonParams.TAG);
       if (tagStr != null) {
-        Map context = req.getContext();
-        Map<String,Collection<Object>> tagMap = (Map<String, Collection<Object>>)req.getContext().get("tags");
+        Map<Object,Object> context = req.getContext();
+        @SuppressWarnings("unchecked")
+        Map<Object,Collection<Object>> tagMap = (Map<Object, Collection<Object>>)req.getContext().get("tags");
         if (tagMap == null) {
-          tagMap = new HashMap<String,Collection<Object>>();
+          tagMap = new HashMap<Object,Collection<Object>>();
           context.put("tags", tagMap);          
         }
         if (tagStr.indexOf(',') >= 0) {
@@ -85,10 +86,10 @@ public abstract class QParser {
   }
 
 
-  private static void addTag(Map tagMap, Object key, Object val) {
-    Collection lst = (Collection)tagMap.get(key);
+  private static void addTag(Map<Object,Collection<Object>> tagMap, Object key, Object val) {
+    Collection<Object> lst = tagMap.get(key);
     if (lst == null) {
-      lst = new ArrayList(2);
+      lst = new ArrayList<Object>(2);
       tagMap.put(key, lst);
     }
     lst.add(val);

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/QueryParsing.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/QueryParsing.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/QueryParsing.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/QueryParsing.java Wed Feb  9 09:35:27 2011
@@ -330,16 +330,9 @@ public class QueryParsing {
             }
             throw new SolrException
               (SolrException.ErrorCode.BAD_REQUEST,
-               "sort param fiedl can't be found: " + field);
+               "sort param field can't be found: " + field);
           }
-              
-          // TODO: remove this - it should be up to the FieldType
-          if (!sf.indexed()) {
-            throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, 
-                                    "can not sort on unindexed field: " 
-                                    + field);
-          }
-          lst.add(sf.getType().getSortField(sf, top));
+          lst.add(sf.getSortField(top));
         }
       }
 
@@ -828,6 +821,7 @@ public class QueryParsing {
       return pos < end ? val.charAt(pos) : 0;
     }
 
+    @Override
     public String toString() {
       return "'" + val + "'" + ", pos=" + pos;
     }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/QueryResultKey.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/QueryResultKey.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/QueryResultKey.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/QueryResultKey.java Wed Feb  9 09:35:27 2011
@@ -56,10 +56,12 @@ public final class QueryResultKey {
     hc = h;
   }
 
+  @Override
   public int hashCode() {
     return hc;
   }
 
+  @Override
   public boolean equals(Object o) {
     if (o==this) return true;
     if (!(o instanceof QueryResultKey)) return false;

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/RawQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/RawQParserPlugin.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/RawQParserPlugin.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/RawQParserPlugin.java Wed Feb  9 09:35:27 2011
@@ -40,8 +40,10 @@ public class RawQParserPlugin extends QP
   public void init(NamedList args) {
   }
 
+  @Override
   public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
     return new QParser(qstr, localParams, params, req) {
+      @Override
       public Query parse() throws ParseException {
         return new TermQuery(new Term(localParams.get(QueryParsing.F), localParams.get(QueryParsing.V)));
       }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrCacheBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrCacheBase.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrCacheBase.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrCacheBase.java Wed Feb  9 09:35:27 2011
@@ -55,6 +55,7 @@ public abstract class SolrCacheBase {
         throw new RuntimeException("Can't parse autoWarm value: " + configValue, e);
       }
     }
+    @Override
     public String toString() {
       return strVal;
     }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrConstantScoreQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrConstantScoreQuery.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrConstantScoreQuery.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrConstantScoreQuery.java Wed Feb  9 09:35:27 2011
@@ -2,6 +2,7 @@ package org.apache.solr.search;
 
 import org.apache.lucene.search.*;
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.solr.search.function.ValueSource;
 import org.apache.solr.common.SolrException;
 
@@ -40,28 +41,29 @@ public class SolrConstantScoreQuery exte
   }
 
   /** Returns the encapsulated filter */
+  @Override
   public Filter getFilter() {
     return filter;
   }
 
+  @Override
   public Query rewrite(IndexReader reader) throws IOException {
     return this;
   }
 
+  @Override
   public void extractTerms(Set terms) {
     // OK to not add any terms when used for MultiSearcher,
     // but may not be OK for highlighting
   }
 
   protected class ConstantWeight extends Weight {
-    private Similarity similarity;
     private float queryNorm;
     private float queryWeight;
     private Map context;
 
     public ConstantWeight(IndexSearcher searcher) throws IOException {
-      this.similarity = getSimilarity(searcher);
-      this.context = ValueSource.newContext();
+      this.context = ValueSource.newContext(searcher);
       if (filter instanceof SolrFilter)
         ((SolrFilter)filter).createWeight(context, searcher);
     }
@@ -89,14 +91,14 @@ public class SolrConstantScoreQuery exte
     }
 
     @Override
-    public Scorer scorer(IndexReader reader, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
-      return new ConstantScorer(similarity, reader, this);
+    public Scorer scorer(AtomicReaderContext context, ScorerContext scorerContext) throws IOException {
+      return new ConstantScorer(context, this);
     }
 
     @Override
-    public Explanation explain(IndexReader reader, int doc) throws IOException {
+    public Explanation explain(AtomicReaderContext context, int doc) throws IOException {
 
-      ConstantScorer cs = new ConstantScorer(similarity, reader, this);
+      ConstantScorer cs = new ConstantScorer(context, this);
       boolean exists = cs.docIdSetIterator.advance(doc) == doc;
 
       ComplexExplanation result = new ComplexExplanation();
@@ -123,10 +125,10 @@ public class SolrConstantScoreQuery exte
     final float theScore;
     int doc = -1;
 
-    public ConstantScorer(Similarity similarity, IndexReader reader, ConstantWeight w) throws IOException {
-      super(similarity);
+    public ConstantScorer(AtomicReaderContext context, ConstantWeight w) throws IOException {
+      super(w);
       theScore = w.getValue();
-      DocIdSet docIdSet = filter instanceof SolrFilter ? ((SolrFilter)filter).getDocIdSet(w.context, reader) : filter.getDocIdSet(reader);
+      DocIdSet docIdSet = filter instanceof SolrFilter ? ((SolrFilter)filter).getDocIdSet(w.context, context) : filter.getDocIdSet(context);
       if (docIdSet == null) {
         docIdSetIterator = DocIdSet.EMPTY_DOCIDSET.iterator();
       } else {

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrFilter.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrFilter.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrFilter.java Wed Feb  9 09:35:27 2011
@@ -21,6 +21,8 @@ import org.apache.lucene.search.Filter;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.DocIdSet;
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 
 import java.util.Map;
 import java.io.IOException;
@@ -37,10 +39,10 @@ public abstract class SolrFilter extends
    * The context object will be passed to getDocIdSet() where this info can be retrieved. */
   public abstract void createWeight(Map context, IndexSearcher searcher) throws IOException;
   
-  public abstract DocIdSet getDocIdSet(Map context, IndexReader reader) throws IOException;
+  public abstract DocIdSet getDocIdSet(Map context, AtomicReaderContext readerContext) throws IOException;
 
   @Override
-  public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
-    return getDocIdSet(null, reader);
+  public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
+    return getDocIdSet(null, context);
   }
 }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java Wed Feb  9 09:35:27 2011
@@ -21,6 +21,7 @@ import org.apache.lucene.document.Docume
 import org.apache.lucene.document.FieldSelector;
 import org.apache.lucene.document.FieldSelectorResult;
 import org.apache.lucene.index.*;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.*;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.FSDirectory;
@@ -67,7 +68,7 @@ public class SolrIndexSearcher extends I
   private long openTime = System.currentTimeMillis();
   private long registerTime = 0;
   private long warmupTime = 0;
-  private final SolrIndexReader reader;
+  private final IndexReader reader;
   private final boolean closeReader;
 
   private final int queryResultWindowSize;
@@ -79,7 +80,7 @@ public class SolrIndexSearcher extends I
   private final SolrCache<Query,DocSet> filterCache;
   private final SolrCache<QueryResultKey,DocList> queryResultCache;
   private final SolrCache<Integer,Document> documentCache;
-  private final SolrCache<String,Object> fieldValueCache;
+  private final SolrCache<String,UnInvertedField> fieldValueCache;
 
   private final LuceneQueryOptimizer optimizer;
   
@@ -116,35 +117,22 @@ public class SolrIndexSearcher extends I
     this(core, schema,name,r, false, enableCache);
   }
 
-  private static SolrIndexReader wrap(IndexReader r) {
-    SolrIndexReader sir;
-    // wrap the reader
-    if (!(r instanceof SolrIndexReader)) {
-      sir = new SolrIndexReader(r, null, 0);
-      sir.associateInfo(null);
-    } else {
-      sir = (SolrIndexReader)r;
-    }
-    return sir;
-  }
 
   public SolrIndexSearcher(SolrCore core, IndexSchema schema, String name, IndexReader r, boolean closeReader, boolean enableCache) {
-    super(wrap(r));
-    this.reader = (SolrIndexReader)super.getIndexReader();
+    super(r);
+    this.reader = getIndexReader();
     this.core = core;
     this.schema = schema;
     this.name = "Searcher@" + Integer.toHexString(hashCode()) + (name!=null ? " "+name : "");
     log.info("Opening " + this.name);
 
-    SolrIndexReader.setSearcher(reader, this);
-
     if (r.directory() instanceof FSDirectory) {
       FSDirectory fsDirectory = (FSDirectory) r.directory();
       indexDir = fsDirectory.getDirectory().getAbsolutePath();
     }
 
     this.closeReader = closeReader;
-    setSimilarity(schema.getSimilarity());
+    setSimilarityProvider(schema.getSimilarityProvider());
 
     SolrConfig solrConfig = core.getSolrConfig();
     queryResultWindowSize = solrConfig.queryResultWindowSize;
@@ -196,6 +184,7 @@ public class SolrIndexSearcher extends I
   }
 
 
+  @Override
   public String toString() {
     return name;
   }
@@ -219,6 +208,7 @@ public class SolrIndexSearcher extends I
    *
    * In particular, the underlying reader and any cache's in use are closed.
    */
+  @Override
   public void close() throws IOException {
     if (cachingEnabled) {
       StringBuilder sb = new StringBuilder();
@@ -246,8 +236,6 @@ public class SolrIndexSearcher extends I
     numCloses.incrementAndGet();
   }
 
-  /** Direct access to the IndexReader used by this searcher */
-  public SolrIndexReader getReader() { return reader; }
   /** Direct access to the IndexSchema for use with this searcher */
   public IndexSchema getSchema() { return schema; }
   
@@ -369,7 +357,7 @@ public class SolrIndexSearcher extends I
 
   /**
    * @return the indexDir on which this searcher is opened
-   * @see org.apache.solr.search.SolrIndexSearcher#SolrIndexSearcher(org.apache.solr.core.SolrCore, org.apache.solr.schema.IndexSchema, String, String, boolean)
+   * @see #SolrIndexSearcher(SolrCore, IndexSchema, String, Directory, boolean)
    */
   public String getIndexDir() {
     return indexDir;
@@ -404,6 +392,7 @@ public class SolrIndexSearcher extends I
   /**
    * Retrieve the {@link Document} instance corresponding to the document id.
    */
+  @Override
   public Document doc(int i) throws IOException {
     return doc(i, (Set<String>)null);
   }
@@ -412,6 +401,7 @@ public class SolrIndexSearcher extends I
    * This method does not currently use the Solr document cache.
    * 
    * @see IndexReader#document(int, FieldSelector) */
+  @Override
   public Document doc(int n, FieldSelector fieldSelector) throws IOException {
     return getIndexReader().document(n, fieldSelector);
   }
@@ -470,10 +460,34 @@ public class SolrIndexSearcher extends I
   ////////////////////////////////////////////////////////////////////////////////
 
   /** expert: internal API, subject to change */
-  public SolrCache getFieldValueCache() {
+  public SolrCache<String,UnInvertedField> getFieldValueCache() {
     return fieldValueCache;
   }
 
+  /** Returns a weighted sort according to this searcher */
+  public Sort weightSort(Sort sort) throws IOException {
+    if (sort == null) return null;
+    SortField[] sorts = sort.getSort();
+
+    boolean needsWeighting = false;
+    for (SortField sf : sorts) {
+      if (sf instanceof SolrSortField) {
+        needsWeighting = true;
+        break;
+      }
+    }
+    if (!needsWeighting) return sort;
+
+    SortField[] newSorts = Arrays.copyOf(sorts, sorts.length);
+    for (int i=0; i<newSorts.length; i++) {
+      if (newSorts[i] instanceof SolrSortField) {
+        newSorts[i] = ((SolrSortField)newSorts[i]).weight(this);
+      }
+    }
+
+    return new Sort(newSorts);
+  }
+
 
   /**
    * Returns the first document number containing the term <code>t</code>
@@ -826,19 +840,17 @@ public class SolrIndexSearcher extends I
     if (filter==null) {
       if (query instanceof TermQuery) {
         Term t = ((TermQuery)query).getTerm();
-        SolrIndexReader[] readers = reader.getLeafReaders();
-        int[] offsets = reader.getLeafOffsets();
+        final AtomicReaderContext[] leaves = leafContexts;
 
-        for (int i=0; i<readers.length; i++) {
-          SolrIndexReader sir = readers[i];
-          int offset = offsets[i];
-          collector.setNextReader(sir, offset);
-          
-          Fields fields = sir.fields();
+        for (int i=0; i<leaves.length; i++) {
+          final AtomicReaderContext leaf = leaves[i];
+          final IndexReader reader = leaf.reader;
+          collector.setNextReader(leaf);
+          Fields fields = reader.fields();
           Terms terms = fields.terms(t.field());
           BytesRef termBytes = t.bytes();
           
-          Bits skipDocs = sir.getDeletedDocs();
+          Bits skipDocs = reader.getDeletedDocs();
           DocsEnum docsEnum = terms==null ? null : terms.docs(skipDocs, termBytes, null);
 
           if (docsEnum != null) {
@@ -898,22 +910,6 @@ public class SolrIndexSearcher extends I
     return positive ? getDocSetNC(absQ,filter) : filter.andNot(getPositiveDocSet(absQ));
   }
 
-
-  /**
-  * Converts a filter into a DocSet.
-  * This method is not cache-aware and no caches are checked.
-  */
-  public DocSet convertFilter(Filter lfilter) throws IOException {
-    DocIdSet docSet = lfilter.getDocIdSet(this.reader);
-    OpenBitSet obs = new OpenBitSet();
-    DocIdSetIterator it = docSet.iterator();
-    int doc;
-    while((doc = it.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
-      obs.fastSet(doc);
-    }
-    return new BitDocSet(obs);
-  }
-
   /**
    * Returns documents matching both <code>query</code> and <code>filter</code>
    * and sorted by <code>sort</code>.
@@ -1137,13 +1133,17 @@ public class SolrIndexSearcher extends I
 
       if (!needScores) {
         collector = new Collector () {
+          @Override
           public void setScorer(Scorer scorer) throws IOException {
           }
+          @Override
           public void collect(int doc) throws IOException {
             numHits[0]++;
           }
-          public void setNextReader(IndexReader reader, int docBase) throws IOException {
+          @Override
+          public void setNextReader(AtomicReaderContext context) throws IOException {
           }
+          @Override
           public boolean acceptsDocsOutOfOrder() {
             return true;
           }
@@ -1151,16 +1151,20 @@ public class SolrIndexSearcher extends I
       } else {
         collector = new Collector() {
           Scorer scorer;
+          @Override
           public void setScorer(Scorer scorer) throws IOException {
             this.scorer = scorer;
           }
+          @Override
           public void collect(int doc) throws IOException {
             numHits[0]++;
             float score = scorer.score();
             if (score > topscore[0]) topscore[0]=score;            
           }
-          public void setNextReader(IndexReader reader, int docBase) throws IOException {
+          @Override
+          public void setNextReader(AtomicReaderContext context) throws IOException {
           }
+          @Override
           public boolean acceptsDocsOutOfOrder() {
             return true;
           }
@@ -1188,7 +1192,7 @@ public class SolrIndexSearcher extends I
       if (cmd.getSort() == null) {
         topCollector = TopScoreDocCollector.create(len, true);
       } else {
-        topCollector = TopFieldCollector.create(cmd.getSort(), len, false, needScores, needScores, true);
+        topCollector = TopFieldCollector.create(weightSort(cmd.getSort()), len, false, needScores, needScores, true);
       }
       Collector collector = topCollector;
       if( timeAllowed > 0 ) {
@@ -1258,16 +1262,20 @@ public class SolrIndexSearcher extends I
        } else {
          collector = setCollector = new DocSetDelegateCollector(smallSetSize, maxDoc, new Collector() {
            Scorer scorer;
-           public void setScorer(Scorer scorer) throws IOException {
+           @Override
+          public void setScorer(Scorer scorer) throws IOException {
              this.scorer = scorer;
            }
-           public void collect(int doc) throws IOException {
+           @Override
+          public void collect(int doc) throws IOException {
              float score = scorer.score();
              if (score > topscore[0]) topscore[0]=score;
            }
-           public void setNextReader(IndexReader reader, int docBase) throws IOException {
+           @Override
+          public void setNextReader(AtomicReaderContext context) throws IOException {
            }
-           public boolean acceptsDocsOutOfOrder() {
+           @Override
+          public boolean acceptsDocsOutOfOrder() {
              return false;
            }
          });
@@ -1298,7 +1306,7 @@ public class SolrIndexSearcher extends I
       if (cmd.getSort() == null) {
         topCollector = TopScoreDocCollector.create(len, true);
       } else {
-        topCollector = TopFieldCollector.create(cmd.getSort(), len, false, needScores, needScores, true);
+        topCollector = TopFieldCollector.create(weightSort(cmd.getSort()), len, false, needScores, needScores, true);
       }
 
       DocSetCollector setCollector = new DocSetDelegateCollector(maxDoc>>6, maxDoc, topCollector);
@@ -1580,27 +1588,27 @@ public class SolrIndexSearcher extends I
     // bit of a hack to tell if a set is sorted - do it better in the futute.
     boolean inOrder = set instanceof BitDocSet || set instanceof SortedIntDocSet;
 
-    TopDocsCollector topCollector = TopFieldCollector.create(sort, nDocs, false, false, false, inOrder);
+    TopDocsCollector topCollector = TopFieldCollector.create(weightSort(sort), nDocs, false, false, false, inOrder);
 
     DocIterator iter = set.iterator();
     int base=0;
     int end=0;
     int readerIndex = -1;
-    SolrIndexReader r=null;
-
+    
+    AtomicReaderContext leaf = null;
 
-    while(iter.hasNext()) {
+    for (int i = 0; i < leafContexts.length; i++) {
       int doc = iter.nextDoc();
       while (doc>=end) {
-        r = reader.getLeafReaders()[++readerIndex];
-        base = reader.getLeafOffsets()[readerIndex];
-        end = base + r.maxDoc();
-        topCollector.setNextReader(r, base);
+        leaf = leafContexts[i++];
+        base = leaf.docBase;
+        end = base + leaf.reader.maxDoc();
+        topCollector.setNextReader(leaf);
         // we should never need to set the scorer given the settings for the collector
       }
       topCollector.collect(doc-base);
     }
-
+    
     TopDocs topDocs = topCollector.topDocs(0, nDocs);
 
     int nDocsReturned = topDocs.scoreDocs.length;
@@ -1767,8 +1775,8 @@ public class SolrIndexSearcher extends I
     return null;
   }
 
-  public NamedList getStatistics() {
-    NamedList lst = new SimpleOrderedMap();
+  public NamedList<Object> getStatistics() {
+    NamedList<Object> lst = new SimpleOrderedMap<Object>();
     lst.add("searcherName", name);
     lst.add("caching", cachingEnabled);
     lst.add("numDocs", reader.numDocs());

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SortedIntDocSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SortedIntDocSet.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SortedIntDocSet.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SortedIntDocSet.java Wed Feb  9 09:35:27 2011
@@ -22,6 +22,7 @@ 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.IndexReader.AtomicReaderContext;
 
 import java.io.IOException;
 
@@ -551,14 +552,10 @@ public class SortedIntDocSet extends Doc
       int lastEndIdx = 0;
 
       @Override
-      public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
-        int offset = 0;
-        SolrIndexReader r = (SolrIndexReader)reader;
-        while (r.getParent() != null) {
-          offset += r.getBase();
-          r = r.getParent();
-        }
-        final int base = offset;
+      public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
+        IndexReader reader = context.reader;
+
+        final int base = context.docBase;
         final int maxDoc = reader.maxDoc();
         final int max = base + maxDoc;   // one past the max doc in this segment.
         int sidx = Math.max(0,lastEndIdx);
@@ -589,6 +586,7 @@ public class SortedIntDocSet extends Doc
 
 
         return new DocIdSet() {
+          @Override
           public DocIdSetIterator iterator() throws IOException {
             return new DocIdSetIterator() {
               int idx = startIdx;

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SpatialBoxQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SpatialBoxQParserPlugin.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SpatialBoxQParserPlugin.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SpatialBoxQParserPlugin.java Wed Feb  9 09:35:27 2011
@@ -31,6 +31,7 @@ public class SpatialBoxQParserPlugin ext
     return new SpatialFilterQParser(qstr, localParams, params, req, true);
   }
 
+  @Override
   public void init(NamedList args) {
 
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/TermQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/TermQParserPlugin.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/TermQParserPlugin.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/TermQParserPlugin.java Wed Feb  9 09:35:27 2011
@@ -47,8 +47,10 @@ public class TermQParserPlugin extends Q
   public void init(NamedList args) {
   }
 
+  @Override
   public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
     return new QParser(qstr, localParams, params, req) {
+      @Override
       public Query parse() throws ParseException {
         String fname = localParams.get(QueryParsing.F);
         FieldType ft = req.getSchema().getFieldTypeNoEx(fname);

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/ValueSourceParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/ValueSourceParser.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/ValueSourceParser.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/ValueSourceParser.java Wed Feb  9 09:35:27 2011
@@ -16,7 +16,7 @@
  */
 package org.apache.solr.search;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.queryParser.ParseException;
 import org.apache.lucene.search.Query;
@@ -81,31 +81,35 @@ public abstract class ValueSourceParser 
 
   static {
     addParser("ord", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         String field = fp.parseId();
-        return new TopValueSource(new OrdFieldSource(field));
+        return new OrdFieldSource(field);
       }
     });
     addParser("literal", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         return new LiteralValueSource(fp.getString());
       }
     });
     addParser("rord", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         String field = fp.parseId();
-        return new TopValueSource(new ReverseOrdFieldSource(field));
+        return new ReverseOrdFieldSource(field);
       }
     });
     addParser("top", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
+        // top(vs) is now a no-op
         ValueSource source = fp.parseValueSource();
-        // nested top is redundant, and ord and rord get automatically wrapped
-        if (source instanceof TopValueSource) return source;
-        return new TopValueSource(source);
+        return source;
       }
     });
     addParser("linear", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         ValueSource source = fp.parseValueSource();
         float slope = fp.parseFloat();
@@ -114,6 +118,7 @@ public abstract class ValueSourceParser 
       }
     });
     addParser("max", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         ValueSource source = fp.parseValueSource();
         float val = fp.parseFloat();
@@ -121,6 +126,7 @@ public abstract class ValueSourceParser 
       }
     });
     addParser("recip", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         ValueSource source = fp.parseValueSource();
         float m = fp.parseFloat();
@@ -130,14 +136,16 @@ public abstract class ValueSourceParser 
       }
     });
     addParser("scale", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         ValueSource source = fp.parseValueSource();
         float min = fp.parseFloat();
         float max = fp.parseFloat();
-        return new TopValueSource(new ScaleFloatFunction(source, min, max));
+        return new ScaleFloatFunction(source, min, max);
       }
     });
     addParser("div", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         ValueSource a = fp.parseValueSource();
         ValueSource b = fp.parseValueSource();
@@ -145,6 +153,7 @@ public abstract class ValueSourceParser 
       }
     });
     addParser("map", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         ValueSource source = fp.parseValueSource();
         float min = fp.parseFloat();
@@ -156,13 +165,16 @@ public abstract class ValueSourceParser 
     });
 
     addParser("abs", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         ValueSource source = fp.parseValueSource();
         return new SimpleFloatFunction(source) {
+          @Override
           protected String name() {
             return "abs";
           }
 
+          @Override
           protected float func(int doc, DocValues vals) {
             return Math.abs(vals.floatVal(doc));
           }
@@ -170,6 +182,7 @@ public abstract class ValueSourceParser 
       }
     });
     addParser("sum", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         List<ValueSource> sources = fp.parseValueSourceList();
         return new SumFloatFunction(sources.toArray(new ValueSource[sources.size()]));
@@ -178,6 +191,7 @@ public abstract class ValueSourceParser 
     alias("sum","add");    
 
     addParser("product", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         List<ValueSource> sources = fp.parseValueSourceList();
         return new ProductFloatFunction(sources.toArray(new ValueSource[sources.size()]));
@@ -186,14 +200,17 @@ public abstract class ValueSourceParser 
     alias("product","mul");
 
     addParser("sub", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         ValueSource a = fp.parseValueSource();
         ValueSource b = fp.parseValueSource();
         return new DualFloatFunction(a, b) {
+          @Override
           protected String name() {
             return "sub";
           }
 
+          @Override
           protected float func(int doc, DocValues aVals, DocValues bVals) {
             return aVals.floatVal(doc) - bVals.floatVal(doc);
           }
@@ -201,12 +218,14 @@ public abstract class ValueSourceParser 
       }
     });
     addParser("vector", new ValueSourceParser(){
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException{
         return new VectorValueSource(fp.parseValueSourceList());
       }
     });
     addParser("query", new ValueSourceParser() {
       // boost(query($q),rating)
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         Query q = fp.parseNestedQuery();
         float defVal = 0.0f;
@@ -217,6 +236,7 @@ public abstract class ValueSourceParser 
       }
     });
     addParser("boost", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         Query q = fp.parseNestedQuery();
         ValueSource vs = fp.parseValueSource();
@@ -225,6 +245,7 @@ public abstract class ValueSourceParser 
       }
     });
     addParser("joindf", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         String f0 = fp.parseArg();
         String qf = fp.parseArg();
@@ -235,6 +256,7 @@ public abstract class ValueSourceParser 
     addParser("geodist", HaversineConstFunction.parser);
 
     addParser("hsin", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
 
         double radius = fp.parseDouble();
@@ -275,6 +297,7 @@ public abstract class ValueSourceParser 
     });
 
     addParser("ghhsin", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         double radius = fp.parseDouble();
 
@@ -286,6 +309,7 @@ public abstract class ValueSourceParser 
     });
 
     addParser("geohash", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
 
         ValueSource lat = fp.parseValueSource();
@@ -295,6 +319,7 @@ public abstract class ValueSourceParser 
       }
     });
     addParser("strdist", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
 
         ValueSource str1 = fp.parseValueSource();
@@ -320,117 +345,140 @@ public abstract class ValueSourceParser 
     });
 
     addParser(new DoubleParser("rad") {
+      @Override
       public double func(int doc, DocValues vals) {
         return vals.doubleVal(doc) * DistanceUtils.DEGREES_TO_RADIANS;
       }
     });
     addParser(new DoubleParser("deg") {
+      @Override
       public double func(int doc, DocValues vals) {
         return vals.doubleVal(doc) * DistanceUtils.RADIANS_TO_DEGREES;
       }
     });
     addParser(new DoubleParser("sqrt") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.sqrt(vals.doubleVal(doc));
       }
     });
     addParser(new DoubleParser("cbrt") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.cbrt(vals.doubleVal(doc));
       }
     });
     addParser(new DoubleParser("log") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.log10(vals.doubleVal(doc));
       }
     });
     addParser(new DoubleParser("ln") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.log(vals.doubleVal(doc));
       }
     });
     addParser(new DoubleParser("exp") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.exp(vals.doubleVal(doc));
       }
     });
     addParser(new DoubleParser("sin") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.sin(vals.doubleVal(doc));
       }
     });
     addParser(new DoubleParser("cos") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.cos(vals.doubleVal(doc));
       }
     });
     addParser(new DoubleParser("tan") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.tan(vals.doubleVal(doc));
       }
     });
     addParser(new DoubleParser("asin") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.asin(vals.doubleVal(doc));
       }
     });
     addParser(new DoubleParser("acos") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.acos(vals.doubleVal(doc));
       }
     });
     addParser(new DoubleParser("atan") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.atan(vals.doubleVal(doc));
       }
     });
     addParser(new DoubleParser("sinh") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.sinh(vals.doubleVal(doc));
       }
     });
     addParser(new DoubleParser("cosh") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.cosh(vals.doubleVal(doc));
       }
     });
     addParser(new DoubleParser("tanh") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.tanh(vals.doubleVal(doc));
       }
     });
     addParser(new DoubleParser("ceil") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.ceil(vals.doubleVal(doc));
       }
     });
     addParser(new DoubleParser("floor") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.floor(vals.doubleVal(doc));
       }
     });
     addParser(new DoubleParser("rint") {
+      @Override
       public double func(int doc, DocValues vals) {
         return Math.rint(vals.doubleVal(doc));
       }
     });
     addParser(new Double2Parser("pow") {
+      @Override
       public double func(int doc, DocValues a, DocValues b) {
         return Math.pow(a.doubleVal(doc), b.doubleVal(doc));
       }
     });
     addParser(new Double2Parser("hypot") {
+      @Override
       public double func(int doc, DocValues a, DocValues b) {
         return Math.hypot(a.doubleVal(doc), b.doubleVal(doc));
       }
     });
     addParser(new Double2Parser("atan2") {
+      @Override
       public double func(int doc, DocValues a, DocValues b) {
         return Math.atan2(a.doubleVal(doc), b.doubleVal(doc));
       }
     });
 
     addParser("sqedist", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         List<ValueSource> sources = fp.parseValueSourceList();
         MVResult mvr = getMultiValueSources(sources);
@@ -440,6 +488,7 @@ public abstract class ValueSourceParser 
     });
 
     addParser("dist", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         float power = fp.parseFloat();
         List<ValueSource> sources = fp.parseValueSourceList();
@@ -451,11 +500,13 @@ public abstract class ValueSourceParser 
 
     
     addParser("pi", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         return new DoubleConstValueSource(Math.PI);
       }
     });
     addParser("e", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         return new DoubleConstValueSource(Math.E);
       }
@@ -463,6 +514,7 @@ public abstract class ValueSourceParser 
 
 
     addParser("docfreq", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         TInfo tinfo = parseTerm(fp);
         return new DocFreqValueSource(tinfo.field, tinfo.val, tinfo.indexedField, tinfo.indexedBytes);
@@ -470,6 +522,7 @@ public abstract class ValueSourceParser 
     });
 
     addParser("idf", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         TInfo tinfo = parseTerm(fp);
         return new IDFValueSource(tinfo.field, tinfo.val, tinfo.indexedField, tinfo.indexedBytes);
@@ -477,6 +530,7 @@ public abstract class ValueSourceParser 
     });
 
     addParser("termfreq", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         TInfo tinfo = parseTerm(fp);
         return new TermFreqValueSource(tinfo.field, tinfo.val, tinfo.indexedField, tinfo.indexedBytes);
@@ -484,6 +538,7 @@ public abstract class ValueSourceParser 
     });
 
     addParser("tf", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         TInfo tinfo = parseTerm(fp);
         return new TFValueSource(tinfo.field, tinfo.val, tinfo.indexedField, tinfo.indexedBytes);
@@ -491,6 +546,7 @@ public abstract class ValueSourceParser 
     });
 
     addParser("norm", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         String field = fp.parseArg();
         return new NormValueSource(field);
@@ -498,12 +554,14 @@ public abstract class ValueSourceParser 
     });
 
     addParser("maxdoc", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         return new MaxDocValueSource();
       }
     });
 
     addParser("numdocs", new ValueSourceParser() {
+      @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {
         return new NumDocsValueSource();
       }
@@ -600,6 +658,7 @@ public abstract class ValueSourceParser 
 class DateValueSourceParser extends ValueSourceParser {
   DateField df = new TrieDateField();
 
+  @Override
   public void init(NamedList args) {
   }
 
@@ -620,6 +679,7 @@ class DateValueSourceParser extends Valu
     return f.getType().getValueSource(f, fp);
   }
 
+  @Override
   public ValueSource parse(FunctionQParser fp) throws ParseException {
     String first = fp.parseArg();
     String second = fp.parseArg();
@@ -656,10 +716,12 @@ class DateValueSourceParser extends Valu
     // "dv"
     if (d1 != null && v2 != null)
       return new DualFloatFunction(new LongConstValueSource(ms1), v2) {
+        @Override
         protected String name() {
           return "ms";
         }
 
+        @Override
         protected float func(int doc, DocValues aVals, DocValues bVals) {
           return ms1 - bVals.longVal(doc);
         }
@@ -668,10 +730,12 @@ class DateValueSourceParser extends Valu
     // "vd"
     if (v1 != null && d2 != null)
       return new DualFloatFunction(v1, new LongConstValueSource(ms2)) {
+        @Override
         protected String name() {
           return "ms";
         }
 
+        @Override
         protected float func(int doc, DocValues aVals, DocValues bVals) {
           return aVals.longVal(doc) - ms2;
         }
@@ -680,10 +744,12 @@ class DateValueSourceParser extends Valu
     // "vv"
     if (v1 != null && v2 != null)
       return new DualFloatFunction(v1, v2) {
+        @Override
         protected String name() {
           return "ms";
         }
 
+        @Override
         protected float func(int doc, DocValues aVals, DocValues bVals) {
           return aVals.longVal(doc) - bVals.longVal(doc);
         }
@@ -707,42 +773,52 @@ class LongConstValueSource extends Const
     this.fv = constant;
   }
 
+  @Override
   public String description() {
     return "const(" + constant + ")";
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     return new DocValues() {
+      @Override
       public float floatVal(int doc) {
         return fv;
       }
 
+      @Override
       public int intVal(int doc) {
         return (int) constant;
       }
 
+      @Override
       public long longVal(int doc) {
         return constant;
       }
 
+      @Override
       public double doubleVal(int doc) {
         return dv;
       }
 
+      @Override
       public String strVal(int doc) {
         return Long.toString(constant);
       }
 
+      @Override
       public String toString(int doc) {
         return description();
       }
     };
   }
 
+  @Override
   public int hashCode() {
     return (int) constant + (int) (constant >>> 32);
   }
 
+  @Override
   public boolean equals(Object o) {
     if (LongConstValueSource.class != o.getClass()) return false;
     LongConstValueSource other = (LongConstValueSource) o;
@@ -794,6 +870,7 @@ abstract class DoubleParser extends Name
 
   public abstract double func(int doc, DocValues vals);
 
+  @Override
   public ValueSource parse(FunctionQParser fp) throws ParseException {
     return new Function(fp.parseValueSource());
   }
@@ -803,29 +880,36 @@ abstract class DoubleParser extends Name
       super(source);
     }
 
+    @Override
     public String name() {
       return DoubleParser.this.name();
     }
 
     @Override
-    public DocValues getValues(Map context, IndexReader reader) throws IOException {
-      final DocValues vals =  source.getValues(context, reader);
+    public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+      final DocValues vals =  source.getValues(context, readerContext);
       return new DocValues() {
+        @Override
         public float floatVal(int doc) {
           return (float)doubleVal(doc);
         }
+        @Override
         public int intVal(int doc) {
           return (int)doubleVal(doc);
         }
+        @Override
         public long longVal(int doc) {
           return (long)doubleVal(doc);
         }
+        @Override
         public double doubleVal(int doc) {
           return func(doc, vals);
         }
+        @Override
         public String strVal(int doc) {
           return Double.toString(doubleVal(doc));
         }
+        @Override
         public String toString(int doc) {
           return name() + '(' + vals.toString(doc) + ')';
         }
@@ -842,6 +926,7 @@ abstract class Double2Parser extends Nam
 
   public abstract double func(int doc, DocValues a, DocValues b);
 
+  @Override
   public ValueSource parse(FunctionQParser fp) throws ParseException {
     return new Function(fp.parseValueSource(), fp.parseValueSource());
   }
@@ -859,29 +944,37 @@ abstract class Double2Parser extends Nam
       this.b = b;
     }
 
+    @Override
     public String description() {
       return name() + "(" + a.description() + "," + b.description() + ")";
     }
 
-    public DocValues getValues(Map context, IndexReader reader) throws IOException {
-      final DocValues aVals =  a.getValues(context, reader);
-      final DocValues bVals =  b.getValues(context, reader);
+    @Override
+    public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+      final DocValues aVals =  a.getValues(context, readerContext);
+      final DocValues bVals =  b.getValues(context, readerContext);
       return new DocValues() {
+        @Override
         public float floatVal(int doc) {
           return (float)doubleVal(doc);
         }
+        @Override
         public int intVal(int doc) {
           return (int)doubleVal(doc);
         }
+        @Override
         public long longVal(int doc) {
           return (long)doubleVal(doc);
         }
+        @Override
         public double doubleVal(int doc) {
           return func(doc, aVals, bVals);
         }
+        @Override
         public String strVal(int doc) {
           return Double.toString(doubleVal(doc));
         }
+        @Override
         public String toString(int doc) {
           return name() + '(' + aVals.toString(doc) + ',' + bVals.toString(doc) + ')';
         }
@@ -890,10 +983,9 @@ abstract class Double2Parser extends Nam
 
     @Override
     public void createWeight(Map context, IndexSearcher searcher) throws IOException {
-      a.createWeight(context,searcher);
-      b.createWeight(context,searcher);
     }
 
+    @Override
     public int hashCode() {
       int h = a.hashCode();
       h ^= (h << 13) | (h >>> 20);
@@ -903,6 +995,7 @@ abstract class Double2Parser extends Nam
       return h;
     }
 
+    @Override
     public boolean equals(Object o) {
       if (this.getClass() != o.getClass()) return false;
       Function other = (Function)o;

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/BoostedQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/BoostedQuery.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/BoostedQuery.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/BoostedQuery.java Wed Feb  9 09:35:27 2011
@@ -19,8 +19,8 @@ package org.apache.solr.search.function;
 
 import org.apache.lucene.search.*;
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.util.ToStringUtils;
-import org.apache.solr.search.SolrIndexReader;
 
 import java.io.IOException;
 import java.util.Set;
@@ -41,6 +41,7 @@ public class BoostedQuery extends Query 
   public Query getQuery() { return q; }
   public ValueSource getValueSource() { return boostVal; }
 
+  @Override
   public Query rewrite(IndexReader reader) throws IOException {
     Query newQ = q.rewrite(reader);
     if (newQ == q) return this;
@@ -49,10 +50,12 @@ public class BoostedQuery extends Query 
     return bq;
   }
 
+  @Override
   public void extractTerms(Set terms) {
     q.extractTerms(terms);
   }
 
+  @Override
   public Weight createWeight(IndexSearcher searcher) throws IOException {
     return new BoostedQuery.BoostedWeight(searcher);
   }
@@ -60,19 +63,21 @@ public class BoostedQuery extends Query 
   private class BoostedWeight extends Weight {
     IndexSearcher searcher;
     Weight qWeight;
-    Map context;
+    Map fcontext;
 
     public BoostedWeight(IndexSearcher searcher) throws IOException {
       this.searcher = searcher;
       this.qWeight = q.weight(searcher);
-      this.context = boostVal.newContext();
-      boostVal.createWeight(context,searcher);
+      this.fcontext = boostVal.newContext(searcher);
+      boostVal.createWeight(fcontext,searcher);
     }
 
+    @Override
     public Query getQuery() {
       return BoostedQuery.this;
     }
 
+    @Override
     public float getValue() {
       return getBoost();
     }
@@ -91,33 +96,26 @@ public class BoostedQuery extends Query 
     }
 
     @Override
-    public Scorer scorer(IndexReader reader, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
-      Scorer subQueryScorer = qWeight.scorer(reader, true, false);
+    public Scorer scorer(AtomicReaderContext context, ScorerContext scorerContext) throws IOException {
+      Scorer subQueryScorer = qWeight.scorer(context, ScorerContext.def());
       if(subQueryScorer == null) {
         return null;
       }
-      return new BoostedQuery.CustomScorer(getSimilarity(searcher), searcher, reader, this, subQueryScorer, boostVal);
+      return new BoostedQuery.CustomScorer(context, this, subQueryScorer, boostVal);
     }
 
     @Override
-    public Explanation explain(IndexReader reader, int doc) throws IOException {
-      SolrIndexReader topReader = (SolrIndexReader)reader;
-      SolrIndexReader[] subReaders = topReader.getLeafReaders();
-      int[] offsets = topReader.getLeafOffsets();
-      int readerPos = SolrIndexReader.readerIndex(doc, offsets);
-      int readerBase = offsets[readerPos];
-
-      Explanation subQueryExpl = qWeight.explain(reader,doc);
+    public Explanation explain(AtomicReaderContext readerContext, int doc) throws IOException {
+      Explanation subQueryExpl = qWeight.explain(readerContext,doc);
       if (!subQueryExpl.isMatch()) {
         return subQueryExpl;
       }
-
-      DocValues vals = boostVal.getValues(context, subReaders[readerPos]);
-      float sc = subQueryExpl.getValue() * vals.floatVal(doc-readerBase);
+      DocValues vals = boostVal.getValues(fcontext, readerContext);
+      float sc = subQueryExpl.getValue() * vals.floatVal(doc);
       Explanation res = new ComplexExplanation(
         true, sc, BoostedQuery.this.toString() + ", product of:");
       res.addDetail(subQueryExpl);
-      res.addDetail(vals.explain(doc-readerBase));
+      res.addDetail(vals.explain(doc));
       return res;
     }
   }
@@ -128,18 +126,16 @@ public class BoostedQuery extends Query 
     private final float qWeight;
     private final Scorer scorer;
     private final DocValues vals;
-    private final IndexReader reader;
-    private final IndexSearcher searcher;
+    private final AtomicReaderContext readerContext;
 
-    private CustomScorer(Similarity similarity, IndexSearcher searcher, IndexReader reader, BoostedQuery.BoostedWeight w,
+    private CustomScorer(AtomicReaderContext readerContext, BoostedQuery.BoostedWeight w,
         Scorer scorer, ValueSource vs) throws IOException {
-      super(similarity);
+      super(w);
       this.weight = w;
       this.qWeight = w.getValue();
       this.scorer = scorer;
-      this.reader = reader;
-      this.searcher = searcher; // for explain
-      this.vals = vs.getValues(weight.context, reader);
+      this.readerContext = readerContext;
+      this.vals = vs.getValues(weight.fcontext, readerContext);
     }
 
     @Override
@@ -168,7 +164,7 @@ public class BoostedQuery extends Query 
     }
 
     public Explanation explain(int doc) throws IOException {
-      Explanation subQueryExpl = weight.qWeight.explain(reader,doc);
+      Explanation subQueryExpl = weight.qWeight.explain(readerContext ,doc);
       if (!subQueryExpl.isMatch()) {
         return subQueryExpl;
       }
@@ -182,6 +178,7 @@ public class BoostedQuery extends Query 
   }
 
 
+  @Override
   public String toString(String field) {
     StringBuilder sb = new StringBuilder();
     sb.append("boost(").append(q.toString(field)).append(',').append(boostVal).append(')');
@@ -189,6 +186,7 @@ public class BoostedQuery extends Query 
     return sb.toString();
   }
 
+  @Override
   public boolean equals(Object o) {
     if (getClass() != o.getClass()) return false;
     BoostedQuery other = (BoostedQuery)o;
@@ -197,6 +195,7 @@ public class BoostedQuery extends Query 
            && this.boostVal.equals(other.boostVal);
   }
 
+  @Override
   public int hashCode() {
     int h = q.hashCode();
     h ^= (h << 17) | (h >>> 16);

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ByteFieldSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ByteFieldSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ByteFieldSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ByteFieldSource.java Wed Feb  9 09:35:27 2011
@@ -16,7 +16,7 @@ package org.apache.solr.search.function;
  * limitations under the License.
  */
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.cache.ByteValuesCreator;
 import org.apache.lucene.search.cache.CachedArray.ByteValues;
 
@@ -37,12 +37,14 @@ public class ByteFieldSource extends Num
     super(creator);
   }
 
+  @Override
   public String description() {
     return "byte(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    final ByteValues vals = cache.getBytes(reader, field, creator);
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    final ByteValues vals = cache.getBytes(readerContext.reader, field, creator);
     final byte[] arr = vals.values;
     
     return new DocValues() {
@@ -56,26 +58,32 @@ public class ByteFieldSource extends Num
         return (short) arr[doc];
       }
 
+      @Override
       public float floatVal(int doc) {
         return (float) arr[doc];
       }
 
+      @Override
       public int intVal(int doc) {
         return (int) arr[doc];
       }
 
+      @Override
       public long longVal(int doc) {
         return (long) arr[doc];
       }
 
+      @Override
       public double doubleVal(int doc) {
         return (double) arr[doc];
       }
 
+      @Override
       public String strVal(int doc) {
         return Byte.toString(arr[doc]);
       }
 
+      @Override
       public String toString(int doc) {
         return description() + '=' + byteVal(doc);
       }