You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by bu...@apache.org on 2011/01/13 20:53:39 UTC

svn commit: r1058718 [15/18] - in /lucene/dev/branches/realtime_search: ./ lucene/ lucene/contrib/ lucene/contrib/ant/src/java/org/apache/lucene/ant/ lucene/contrib/ant/src/test/org/apache/lucene/ant/ lucene/contrib/benchmark/ lucene/contrib/demo/src/j...

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/DebugComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/DebugComponent.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/DebugComponent.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/DebugComponent.java Thu Jan 13 19:53:21 2011
@@ -115,7 +115,7 @@ public class DebugComponent extends Sear
   @Override
   public void finishStage(ResponseBuilder rb) {
     if (rb.isDebug() && rb.stage == ResponseBuilder.STAGE_GET_FIELDS) {
-      NamedList info = null;
+      NamedList<Object> info = null;
       NamedList explain = new SimpleOrderedMap();
 
       Map.Entry<String, Object>[]  arr =  new NamedList.NamedListEntry[rb.resultIds.size()];
@@ -140,11 +140,11 @@ public class DebugComponent extends Sear
       }
 
       if (rb.isDebugResults()) {
-        explain = SolrPluginUtils.removeNulls(new SimpleOrderedMap(arr));
+        explain = SolrPluginUtils.removeNulls(new SimpleOrderedMap<Object>(arr));
       }
 
       if (info == null) {
-        info = new SimpleOrderedMap();
+        info = new SimpleOrderedMap<Object>();
       }
       if (rb.isDebugResults()) {
         int idx = info.indexOf("explain",0);
@@ -196,9 +196,11 @@ public class DebugComponent extends Sear
 
 
     if (source instanceof NamedList && dest instanceof NamedList) {
-      NamedList tmp = new NamedList();
-      NamedList sl = (NamedList)source;
-      NamedList dl = (NamedList)dest;
+      NamedList<Object> tmp = new NamedList<Object>();
+      @SuppressWarnings("unchecked")
+      NamedList<Object> sl = (NamedList<Object>)source;
+      @SuppressWarnings("unchecked")
+      NamedList<Object> dl = (NamedList<Object>)dest;
       for (int i=0; i<sl.size(); i++) {
         String skey = sl.getName(i);
         if (exclude != null && exclude.contains(skey)) continue;
@@ -228,7 +230,7 @@ public class DebugComponent extends Sear
     }
 
     // merge unlike elements in a list
-    List t = new ArrayList();
+    List<Object> t = new ArrayList<Object>();
     t.add(dest);
     t.add(source);
     return t;

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/FacetComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/FacetComponent.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/FacetComponent.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/FacetComponent.java Thu Jan 13 19:53:21 2011
@@ -78,7 +78,7 @@ public class FacetComponent extends Sear
               params,
               rb );
 
-      NamedList counts = f.getFacetCounts();
+      NamedList<Object> counts = f.getFacetCounts();
       String[] pivots = params.getParams( FacetParams.FACET_PIVOT );
       if( pivots != null && pivots.length > 0 ) {
         NamedList v = pivotHelper.process(rb, params, pivots);
@@ -264,7 +264,9 @@ public class FacetComponent extends Sear
       int shardNum = rb.getShardNum(srsp.getShard());
       NamedList facet_counts = (NamedList)srsp.getSolrResponse().getResponse().get("facet_counts");
 
-      fi.addExceptions((List)facet_counts.get("exception"));
+      @SuppressWarnings("unchecked")
+      List<String> excepts = (List<String>)facet_counts.get("exception");
+      fi.addExceptions(excepts);
 
       // handle facet queries
       NamedList facet_queries = (NamedList)facet_counts.get("facet_queries");
@@ -298,7 +300,10 @@ public class FacetComponent extends Sear
       if (dff.limit <= 0) continue; // no need to check these facets for refinement
       if (dff.minCount <= 1 && dff.sort.equals(FacetParams.FACET_SORT_INDEX)) continue;
 
-      dff._toRefine = new List[rb.shards.length];
+      @SuppressWarnings("unchecked") // generic array's are anoying
+      List<String>[] tmp = (List<String>[]) new List[rb.shards.length];
+      dff._toRefine = tmp;
+
       ShardFacetCount[] counts = dff.getCountSorted();
       int ntop = Math.min(counts.length, dff.offset + dff.limit);
       long smallestCount = counts.length == 0 ? 0 : counts[ntop-1].count;
@@ -353,8 +358,10 @@ public class FacetComponent extends Sear
       // int shardNum = rb.getShardNum(srsp.shard);
       NamedList facet_counts = (NamedList)srsp.getSolrResponse().getResponse().get("facet_counts");
       NamedList facet_fields = (NamedList)facet_counts.get("facet_fields");
-
-      fi.addExceptions((List)facet_counts.get("exception"));
+  
+      @SuppressWarnings("unchecked") 
+      List<String> excepts = (List<String>)facet_counts.get("exception");
+      fi.addExceptions(excepts);
 
       if (facet_fields == null) continue; // this can happen when there's an exception      
 
@@ -384,23 +391,23 @@ public class FacetComponent extends Sear
 
     FacetInfo fi = rb._facetInfo;
 
-    NamedList facet_counts = new SimpleOrderedMap();
+    NamedList<Object> facet_counts = new SimpleOrderedMap<Object>();
 
     if (fi.exceptionList != null) {
       facet_counts.add("exception",fi.exceptionList);
     }
 
-    NamedList facet_queries = new SimpleOrderedMap();
+    NamedList<Number> facet_queries = new SimpleOrderedMap<Number>();
     facet_counts.add("facet_queries",facet_queries);
     for (QueryFacet qf : fi.queryFacets.values()) {
       facet_queries.add(qf.getKey(), num(qf.count));
     }
 
-    NamedList facet_fields = new SimpleOrderedMap();
+    NamedList<Object> facet_fields = new SimpleOrderedMap<Object>();
     facet_counts.add("facet_fields", facet_fields);
 
     for (DistribFieldFacet dff : fi.facets.values()) {
-      NamedList fieldCounts = new NamedList(); // order is more important for facets
+      NamedList<Object> fieldCounts = new NamedList<Object>(); // order is more important for facets
       facet_fields.add(dff.getKey(), fieldCounts);
 
       ShardFacetCount[] counts;
@@ -486,7 +493,7 @@ public class FacetComponent extends Sear
   public static class FacetInfo {
     public LinkedHashMap<String,QueryFacet> queryFacets;
     public LinkedHashMap<String,DistribFieldFacet> facets;
-    public List exceptionList;
+    public List<String> exceptionList;
 
     void parse(SolrParams params, ResponseBuilder rb) {
       queryFacets = new LinkedHashMap<String,QueryFacet>();
@@ -510,9 +517,9 @@ public class FacetComponent extends Sear
       }
     }
         
-    public void addExceptions(List exceptions) {
+    public void addExceptions(List<String> exceptions) {
       if (exceptions == null) return;
-      if (exceptionList == null) exceptionList = new ArrayList();
+      if (exceptionList == null) exceptionList = new ArrayList<String>();
       exceptionList.addAll(exceptions);
     }
   }

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/HighlightComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/HighlightComponent.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/HighlightComponent.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/HighlightComponent.java Thu Jan 13 19:53:21 2011
@@ -113,7 +113,7 @@ public class HighlightComponent extends 
       
       if(highlightQuery != null) {
         boolean rewrite = !(Boolean.valueOf(req.getParams().get(HighlightParams.USE_PHRASE_HIGHLIGHTER, "true")) && Boolean.valueOf(req.getParams().get(HighlightParams.HIGHLIGHT_MULTI_TERM, "true")));
-        highlightQuery = rewrite ?  highlightQuery.rewrite(req.getSearcher().getReader()) : highlightQuery;
+        highlightQuery = rewrite ?  highlightQuery.rewrite(req.getSearcher().getIndexReader()) : highlightQuery;
       }
       
       // No highlighting if there is no query -- consider q.alt="*:*

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/QueryComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/QueryComponent.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/QueryComponent.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/QueryComponent.java Thu Jan 13 19:53:21 2011
@@ -18,10 +18,13 @@
 package org.apache.solr.handler.component;
 
 import org.apache.lucene.document.Field;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
+import org.apache.lucene.index.IndexReader.ReaderContext;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.queryParser.ParseException;
 import org.apache.lucene.search.*;
 import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.ReaderUtil;
 import org.apache.solr.cloud.CloudDescriptor;
 import org.apache.solr.cloud.ZkController;
 import org.apache.solr.common.SolrDocument;
@@ -444,23 +447,21 @@ public class QueryComponent extends Sear
       SortField[] sortFields = sort==null ? new SortField[]{SortField.FIELD_SCORE} : sort.getSort();
       NamedList sortVals = new NamedList(); // order is important for the sort fields
       Field field = new Field("dummy", "", Field.Store.YES, Field.Index.NO); // a dummy Field
-
-      SolrIndexReader reader = searcher.getReader();
-      SolrIndexReader[] readers = reader.getLeafReaders();
-      SolrIndexReader subReader = reader;
-      if (readers.length==1) {
+      ReaderContext topReaderContext = searcher.getTopReaderContext();
+      AtomicReaderContext[] leaves = ReaderUtil.leaves(topReaderContext);
+      AtomicReaderContext currentLeaf = null;
+      if (leaves.length==1) {
         // if there is a single segment, use that subReader and avoid looking up each time
-        subReader = readers[0];
-        readers=null;
+        currentLeaf = leaves[0];
+        leaves=null;
       }
-      int[] offsets = reader.getLeafOffsets();
 
       for (SortField sortField: sortFields) {
         int type = sortField.getType();
         if (type==SortField.SCORE || type==SortField.DOC) continue;
 
         FieldComparator comparator = null;
-        FieldComparator comparators[] = (readers==null) ? null : new FieldComparator[readers.length];
+        FieldComparator comparators[] = (leaves==null) ? null : new FieldComparator[leaves.length];
 
         String fieldname = sortField.getField();
         FieldType ft = fieldname==null ? null : req.getSchema().getFieldTypeNoEx(fieldname);
@@ -469,26 +470,24 @@ public class QueryComponent extends Sear
         ArrayList<Object> vals = new ArrayList<Object>(docList.size());
         DocIterator it = rb.getResults().docList.iterator();
 
-        int offset = 0;
         int idx = 0;
 
         while(it.hasNext()) {
           int doc = it.nextDoc();
-          if (readers != null) {
-            idx = SolrIndexReader.readerIndex(doc, offsets);
-            subReader = readers[idx];
-            offset = offsets[idx];
+          if (leaves != null) {
+            idx = ReaderUtil.subIndex(doc, leaves);
+            currentLeaf = leaves[idx];
             comparator = comparators[idx];
           }
 
           if (comparator == null) {
             comparator = sortField.getComparator(1,0);
-            comparator = comparator.setNextReader(subReader, offset);
+            comparator = comparator.setNextReader(currentLeaf);
             if (comparators != null)
               comparators[idx] = comparator;
           }
 
-          doc -= offset;  // adjust for what segment this is in
+          doc -= currentLeaf.docBase;  // adjust for what segment this is in
           comparator.copy(0, doc);
           Object val = comparator.value(0);
 

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/QueryElevationComponent.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/QueryElevationComponent.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/QueryElevationComponent.java Thu Jan 13 19:53:21 2011
@@ -43,6 +43,7 @@ import org.apache.lucene.analysis.Analyz
 import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.*;
 import org.apache.lucene.util.StringHelper;
@@ -199,7 +200,7 @@ public class QueryElevationComponent ext
           RefCounted<SolrIndexSearcher> searchHolder = null;
           try {
             searchHolder = core.getNewestSearcher(false);
-            IndexReader reader = searchHolder.get().getReader();
+            IndexReader reader = searchHolder.get().getIndexReader();
             getElevationMap( reader, core );
           } finally {
             if (searchHolder != null) searchHolder.decref();
@@ -343,7 +344,7 @@ public class QueryElevationComponent ext
     }
 
     qstr = getAnalyzedQuery(qstr);
-    IndexReader reader = req.getSearcher().getReader();
+    IndexReader reader = req.getSearcher().getIndexReader();
     ElevationObj booster = null;
     try {
       booster = getElevationMap( reader, req.getCore() ).get( qstr );
@@ -503,8 +504,8 @@ class ElevationComparatorSource extends 
         values[slot] = docVal(doc);
       }
 
-      public FieldComparator setNextReader(IndexReader reader, int docBase) throws IOException {
-        idIndex = FieldCache.DEFAULT.getTermsIndex(reader, fieldname);
+      public FieldComparator setNextReader(AtomicReaderContext context) throws IOException {
+        idIndex = FieldCache.DEFAULT.getTermsIndex(context.reader, fieldname);
         return this;
       }
 

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/SpellCheckComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/SpellCheckComponent.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/SpellCheckComponent.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/SpellCheckComponent.java Thu Jan 13 19:53:21 2011
@@ -143,7 +143,7 @@ public class SpellCheckComponent extends
         boolean extendedResults = params.getBool(SPELLCHECK_EXTENDED_RESULTS,
             false);
         NamedList response = new SimpleOrderedMap();
-        IndexReader reader = rb.req.getSearcher().getReader();
+        IndexReader reader = rb.req.getSearcher().getIndexReader();
         boolean collate = params.getBool(SPELLCHECK_COLLATE, false);
         float accuracy = params.getFloat(SPELLCHECK_ACCURACY, Float.MIN_VALUE);
         SolrParams customParams = getCustomParams(getDictionaryName(params), params, shardRequest);
@@ -678,7 +678,7 @@ public class SpellCheckComponent extends
         if (buildOnCommit)  {
           buildSpellIndex(newSearcher);
         } else if (buildOnOptimize) {
-          if (newSearcher.getReader().isOptimized())  {
+          if (newSearcher.getIndexReader().isOptimized())  {
             buildSpellIndex(newSearcher);
           } else  {
             LOG.info("Index is not optimized therefore skipping building spell check index for: " + checker.getDictionaryName());

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/StatsComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/StatsComponent.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/StatsComponent.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/StatsComponent.java Thu Jan 13 19:53:21 2011
@@ -124,8 +124,8 @@ public class StatsComponent extends Sear
 
     StatsInfo si = rb._statsInfo;
 
-    NamedList stats = new SimpleOrderedMap();
-    NamedList stats_fields = new SimpleOrderedMap();
+    NamedList<NamedList<Object>> stats = new SimpleOrderedMap<NamedList<Object>>();
+    NamedList<Object> stats_fields = new SimpleOrderedMap<Object>();
     stats.add("stats_fields", stats_fields);
     for (String field : si.statsFields.keySet()) {
       NamedList stv = si.statsFields.get(field).getStatsValues();
@@ -209,8 +209,8 @@ class SimpleStats {
     return res;
   }
 
-  public NamedList getStatsFields() throws IOException {
-    NamedList<NamedList<Number>> res = new SimpleOrderedMap<NamedList<Number>>();
+  public NamedList<Object> getStatsFields() throws IOException {
+    NamedList<Object> res = new SimpleOrderedMap<Object>();
     String[] statsFs = params.getParams(StatsParams.STATS_FIELD);
     boolean isShard = params.getBool(ShardParams.IS_SHARD, false);
     if (null != statsFs) {
@@ -221,7 +221,7 @@ class SimpleStats {
         }
         SchemaField sf = searcher.getSchema().getField(f);
         FieldType ft = sf.getType();
-        NamedList stv;
+        NamedList<?> stv;
 
         // Currently, only UnInvertedField can deal with multi-part trie fields
         String prefix = TrieField.getMainValuePrefix(ft);
@@ -243,12 +243,12 @@ class SimpleStats {
     return res;
   }
   
-  public NamedList getFieldCacheStats(String fieldName, String[] facet ) {
+  public NamedList<?> getFieldCacheStats(String fieldName, String[] facet ) {
     FieldType ft = searcher.getSchema().getFieldType(fieldName);
 
     FieldCache.DocTermsIndex si = null;
     try {
-      si = FieldCache.DEFAULT.getTermsIndex(searcher.getReader(), fieldName);
+      si = FieldCache.DEFAULT.getTermsIndex(searcher.getIndexReader(), fieldName);
     } 
     catch (IOException e) {
       throw new RuntimeException( "failed to open field cache for: "+fieldName, e );
@@ -263,7 +263,7 @@ class SimpleStats {
     for( String f : facet ) {
       ft = searcher.getSchema().getFieldType(f);
       try {
-        si = FieldCache.DEFAULT.getTermsIndex(searcher.getReader(), f);
+        si = FieldCache.DEFAULT.getTermsIndex(searcher.getIndexReader(), f);
       } 
       catch (IOException e) {
         throw new RuntimeException( "failed to open field cache for: "+f, e );

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/TermVectorComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/TermVectorComponent.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/TermVectorComponent.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/TermVectorComponent.java Thu Jan 13 19:53:21 2011
@@ -77,7 +77,7 @@ public class TermVectorComponent extends
       return;
     }
 
-    NamedList termVectors = new NamedList();
+    NamedList<Object> termVectors = new NamedList<Object>();
     rb.rsp.add(TERM_VECTORS, termVectors);
     FieldOptions allFields = new FieldOptions();
     //figure out what options we have, and try to get the appropriate vector
@@ -106,7 +106,7 @@ public class TermVectorComponent extends
     IndexSchema schema = rb.req.getSchema();
     //Build up our per field mapping
     Map<String, FieldOptions> fieldOptions = new HashMap<String, FieldOptions>();
-    NamedList warnings = new NamedList();
+    NamedList<List<String>> warnings = new NamedList<List<String>>();
     List<String>  noTV = new ArrayList<String>();
     List<String>  noPos = new ArrayList<String>();
     List<String>  noOff = new ArrayList<String>();
@@ -174,7 +174,7 @@ public class TermVectorComponent extends
     }
     SolrIndexSearcher searcher = rb.req.getSearcher();
 
-    IndexReader reader = searcher.getReader();
+    IndexReader reader = searcher.getIndexReader();
     //the TVMapper is a TermVectorMapper which can be used to optimize loading of Term Vectors
     SchemaField keyField = schema.getUniqueKeyField();
     String uniqFieldName = null;
@@ -187,7 +187,7 @@ public class TermVectorComponent extends
     mapper.fieldOptions = allFields; //this will only stay set if fieldOptions.isEmpty() (in other words, only if the user didn't set any fields)
     while (iter.hasNext()) {
       Integer docId = iter.next();
-      NamedList docNL = new NamedList();
+      NamedList<Object> docNL = new NamedList<Object>();
       mapper.docNL = docNL;
       termVectors.add("doc-" + docId, docNL);
 
@@ -272,7 +272,7 @@ public class TermVectorComponent extends
 
   private static class TVMapper extends TermVectorMapper {
     private IndexReader reader;
-    private NamedList docNL;
+    private NamedList<Object> docNL;
 
     //needs to be set for each new field
     FieldOptions fieldOptions;
@@ -280,7 +280,7 @@ public class TermVectorComponent extends
     //internal vars not passed in by construction
     private boolean useOffsets, usePositions;
     //private Map<String, Integer> idfCache;
-    private NamedList fieldNL;
+    private NamedList<Object> fieldNL;
     private Term currentTerm;
 
 
@@ -289,34 +289,34 @@ public class TermVectorComponent extends
     }
 
     public void map(BytesRef term, int frequency, TermVectorOffsetInfo[] offsets, int[] positions) {
-      NamedList termInfo = new NamedList();
-        fieldNL.add(term.utf8ToString(), termInfo);
-        if (fieldOptions.termFreq == true) {
-          termInfo.add("tf", frequency);
-        }
-        if (useOffsets == true) {
-          NamedList theOffsets = new NamedList();
-          termInfo.add("offsets", theOffsets);
-          for (int i = 0; i < offsets.length; i++) {
-            TermVectorOffsetInfo offset = offsets[i];
-            theOffsets.add("start", offset.getStartOffset());
-            theOffsets.add("end", offset.getEndOffset());
-          }
-        }
-        if (usePositions == true) {
-          NamedList positionsNL = new NamedList();
-          for (int i = 0; i < positions.length; i++) {
-            positionsNL.add("position", positions[i]);
-          }
-          termInfo.add("positions", positionsNL);
-        }
-        if (fieldOptions.docFreq == true) {
-          termInfo.add("df", getDocFreq(term));
+      NamedList<Object> termInfo = new NamedList<Object>();
+      fieldNL.add(term.utf8ToString(), termInfo);
+      if (fieldOptions.termFreq == true) {
+        termInfo.add("tf", frequency);
+      }
+      if (useOffsets == true) {
+        NamedList<Number> theOffsets = new NamedList<Number>();
+        termInfo.add("offsets", theOffsets);
+        for (int i = 0; i < offsets.length; i++) {
+          TermVectorOffsetInfo offset = offsets[i];
+          theOffsets.add("start", offset.getStartOffset());
+          theOffsets.add("end", offset.getEndOffset());
         }
-        if (fieldOptions.tfIdf == true) {
-          double tfIdfVal = ((double) frequency) / getDocFreq(term);
-          termInfo.add("tf-idf", tfIdfVal);
+      }
+      if (usePositions == true) {
+        NamedList<Integer> positionsNL = new NamedList<Integer>();
+        for (int i = 0; i < positions.length; i++) {
+          positionsNL.add("position", positions[i]);
         }
+        termInfo.add("positions", positionsNL);
+      }
+      if (fieldOptions.docFreq == true) {
+        termInfo.add("df", getDocFreq(term));
+      }
+      if (fieldOptions.tfIdf == true) {
+        double tfIdfVal = ((double) frequency) / getDocFreq(term);
+        termInfo.add("tf-idf", tfIdfVal);
+      }
     }
 
     private int getDocFreq(BytesRef term) {
@@ -343,7 +343,7 @@ public class TermVectorComponent extends
       }
       useOffsets = storeOffsets && fieldOptions.offsets;
       usePositions = storePositions && fieldOptions.positions;
-      fieldNL = new NamedList();
+      fieldNL = new NamedList<Object>();
       docNL.add(field, fieldNL);
     }
 
@@ -394,4 +394,4 @@ public class TermVectorComponent extends
 class FieldOptions {
   String fieldName;
   boolean termFreq, positions, offsets, docFreq, tfIdf;
-}
\ No newline at end of file
+}

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/TermsComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/TermsComponent.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/TermsComponent.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/handler/component/TermsComponent.java Thu Jan 13 19:53:21 2011
@@ -27,7 +27,6 @@ import org.apache.solr.common.util.StrUt
 import org.apache.solr.schema.FieldType;
 import org.apache.solr.schema.StrField;
 import org.apache.solr.request.SimpleFacets.CountPair;
-import org.apache.solr.search.SolrIndexReader;
 import org.apache.solr.util.BoundedTreeSet;
 
 import org.apache.solr.client.solrj.response.TermsResponse;
@@ -75,7 +74,7 @@ public class TermsComponent extends Sear
 
     String[] fields = params.getParams(TermsParams.TERMS_FIELD);
 
-    NamedList termsResult = new SimpleOrderedMap();
+    NamedList<Object> termsResult = new SimpleOrderedMap<Object>();
     rb.rsp.add("terms", termsResult);
 
     if (fields == null || fields.length==0) return;
@@ -103,11 +102,11 @@ public class TermsComponent extends Sear
     boolean raw = params.getBool(TermsParams.TERMS_RAW, false);
 
 
-    SolrIndexReader sr = rb.req.getSearcher().getReader();
-    Fields lfields = MultiFields.getFields(sr);
+    final IndexReader indexReader = rb.req.getSearcher().getTopReaderContext().reader;
+    Fields lfields = MultiFields.getFields(indexReader);
 
     for (String field : fields) {
-      NamedList fieldTerms = new NamedList();
+      NamedList<Integer> fieldTerms = new NamedList<Integer>();
       termsResult.add(field, fieldTerms);
 
       Terms terms = lfields == null ? null : lfields.terms(field);
@@ -273,7 +272,9 @@ public class TermsComponent extends Sear
     TermsHelper th = rb._termsHelper;
     if (th != null) {
       for (ShardResponse srsp : sreq.responses) {
-        th.parse((NamedList) srsp.getSolrResponse().getResponse().get("terms"));
+        @SuppressWarnings("unchecked")
+        NamedList<NamedList<Number>> terms = (NamedList<NamedList<Number>>) srsp.getSolrResponse().getResponse().get("terms");
+        th.parse(terms);
       }
     }
   }
@@ -331,7 +332,7 @@ public class TermsComponent extends Sear
       }
     }
 
-    public void parse(NamedList terms) {
+    public void parse(NamedList<NamedList<Number>> terms) {
       // exit if there is no terms
       if (terms == null) {
         return;
@@ -364,7 +365,7 @@ public class TermsComponent extends Sear
     }
 
     public NamedList buildResponse() {
-      NamedList response = new SimpleOrderedMap();
+      NamedList<Object> response = new SimpleOrderedMap<Object>();
 
       // determine if we are going index or count sort
       boolean sort = !TermsParams.TERMS_SORT_INDEX.equals(params.get(
@@ -393,7 +394,7 @@ public class TermsComponent extends Sear
 
       // loop though each field we want terms from
       for (String key : fieldmap.keySet()) {
-        NamedList fieldterms = new SimpleOrderedMap();
+        NamedList<Number> fieldterms = new SimpleOrderedMap<Number>();
         TermsResponse.Term[] data = null;
         if (sort) {
           data = getCountSorted(fieldmap.get(key));

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java Thu Jan 13 19:53:21 2011
@@ -216,7 +216,7 @@ public class DefaultSolrHighlighter exte
   private Scorer getQueryScorer(Query query, String fieldName, SolrQueryRequest request) {
      boolean reqFieldMatch = request.getParams().getFieldBool(fieldName, HighlightParams.FIELD_MATCH, false);
      if (reqFieldMatch) {
-        return new QueryTermScorer(query, request.getSearcher().getReader(), fieldName);
+        return new QueryTermScorer(query, request.getSearcher().getIndexReader(), fieldName);
      }
      else {
         return new QueryTermScorer(query);
@@ -415,7 +415,7 @@ public class DefaultSolrHighlighter exte
 
     TermOffsetsTokenStream tots = null; // to be non-null iff we're using TermOffsets optimization
     try {
-        TokenStream tvStream = TokenSources.getTokenStream(searcher.getReader(), docId, fieldName);
+        TokenStream tvStream = TokenSources.getTokenStream(searcher.getIndexReader(), docId, fieldName);
         if (tvStream != null) {
           tots = new TermOffsetsTokenStream(tvStream);
         }
@@ -503,7 +503,7 @@ public class DefaultSolrHighlighter exte
       String fieldName ) throws IOException {
     SolrParams params = req.getParams(); 
     SolrFragmentsBuilder solrFb = getSolrFragmentsBuilder( fieldName, params );
-    String[] snippets = highlighter.getBestFragments( fieldQuery, req.getSearcher().getReader(), docId, fieldName,
+    String[] snippets = highlighter.getBestFragments( fieldQuery, req.getSearcher().getIndexReader(), docId, fieldName,
         params.getFieldInt( fieldName, HighlightParams.FRAGSIZE, 100 ),
         params.getFieldInt( fieldName, HighlightParams.SNIPPETS, 1 ),
         getFragListBuilder( fieldName, params ),

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java Thu Jan 13 19:53:21 2011
@@ -1,5 +1,6 @@
 package org.apache.solr.request;
 
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.index.TermsEnum;
 import org.apache.lucene.search.DocIdSet;
 import org.apache.lucene.search.DocIdSetIterator;
@@ -7,6 +8,7 @@ import org.apache.lucene.search.FieldCac
 import org.apache.lucene.search.Filter;
 import org.apache.lucene.util.PriorityQueue;
 import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.ReaderUtil;
 import org.apache.lucene.util.packed.Direct16;
 import org.apache.lucene.util.packed.Direct32;
 import org.apache.lucene.util.packed.Direct8;
@@ -16,7 +18,6 @@ import org.apache.solr.common.params.Fac
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.schema.FieldType;
 import org.apache.solr.search.DocSet;
-import org.apache.solr.search.SolrIndexReader;
 import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.util.BoundedTreeSet;
 import org.apache.solr.util.ByteUtils;
@@ -60,17 +61,14 @@ class PerSegmentSingleValuedFaceting {
   }
 
 
-  NamedList getFacetCounts(Executor executor) throws IOException {
+  NamedList<Integer> getFacetCounts(Executor executor) throws IOException {
 
     CompletionService<SegFacet> completionService = new ExecutorCompletionService<SegFacet>(executor);
 
     // reuse the translation logic to go from top level set to per-segment set
     baseSet = docs.getTopFilter();
 
-    SolrIndexReader topReader = searcher.getReader();
-    final SolrIndexReader[] leafReaders = topReader.getLeafReaders();
-    int[] offsets = topReader.getLeafOffsets();
-
+    final AtomicReaderContext[] leaves = ReaderUtil.leaves(searcher.getTopReaderContext());
     // The list of pending tasks that aren't immediately submitted
     // TODO: Is there a completion service, or a delegating executor that can
     // limit the number of concurrent tasks submitted to a bigger executor?
@@ -78,8 +76,8 @@ class PerSegmentSingleValuedFaceting {
 
     int threads = nThreads <= 0 ? Integer.MAX_VALUE : nThreads;
 
-    for (int i=0; i<leafReaders.length; i++) {
-      final SegFacet segFacet = new SegFacet(leafReaders[i], offsets[i]);
+    for (int i=0; i<leaves.length; i++) {
+      final SegFacet segFacet = new SegFacet(leaves[i]);
 
       Callable<SegFacet> task = new Callable<SegFacet>() {
         public SegFacet call() throws Exception {
@@ -101,7 +99,7 @@ class PerSegmentSingleValuedFaceting {
     // now merge the per-segment results
     PriorityQueue<SegFacet> queue = new PriorityQueue<SegFacet>() {
       {
-        initialize(leafReaders.length);
+        initialize(leaves.length);
       }
       @Override
       protected boolean lessThan(SegFacet a, SegFacet b) {
@@ -112,7 +110,7 @@ class PerSegmentSingleValuedFaceting {
 
     boolean hasMissingCount=false;
     int missingCount=0;
-    for (int i=0; i<leafReaders.length; i++) {
+    for (int i=0; i<leaves.length; i++) {
       SegFacet seg = null;
 
       try {
@@ -189,7 +187,7 @@ class PerSegmentSingleValuedFaceting {
       if (stop) break;
     }
 
-    NamedList res = collector.getFacetCounts();
+    NamedList<Integer> res = collector.getFacetCounts();
 
     // convert labels to readable form    
     FieldType ft = searcher.getSchema().getFieldType(fieldName);
@@ -209,12 +207,9 @@ class PerSegmentSingleValuedFaceting {
   }
 
   class SegFacet {
-    SolrIndexReader reader;
-    int readerOffset;
-
-    SegFacet(SolrIndexReader reader, int readerOffset) {
-      this.reader = reader;
-      this.readerOffset = readerOffset;
+    AtomicReaderContext context;
+    SegFacet(AtomicReaderContext context) {
+      this.context = context;
     }
     
     FieldCache.DocTermsIndex si;
@@ -228,7 +223,7 @@ class PerSegmentSingleValuedFaceting {
     BytesRef tempBR = new BytesRef();
 
     void countTerms() throws IOException {
-      si = FieldCache.DEFAULT.getTermsIndex(reader, fieldName);
+      si = FieldCache.DEFAULT.getTermsIndex(context.reader, fieldName);
       // SolrCore.log.info("reader= " + reader + "  FC=" + System.identityHashCode(si));
 
       if (prefix!=null) {
@@ -250,7 +245,7 @@ class PerSegmentSingleValuedFaceting {
         // count collection array only needs to be as big as the number of terms we are
         // going to collect counts for.
         final int[] counts = this.counts = new int[nTerms];
-        DocIdSet idSet = baseSet.getDocIdSet(reader);
+        DocIdSet idSet = baseSet.getDocIdSet(context);
         DocIdSetIterator iter = idSet.iterator();
 
 
@@ -324,7 +319,7 @@ class PerSegmentSingleValuedFaceting {
 abstract class FacetCollector {
   /*** return true to stop collection */
   public abstract boolean collect(BytesRef term, int count);
-  public abstract NamedList getFacetCounts();
+  public abstract NamedList<Integer> getFacetCounts();
 }
 
 
@@ -358,8 +353,8 @@ class CountSortedFacetCollector extends 
   }
 
   @Override
-  public NamedList getFacetCounts() {
-    NamedList res = new NamedList();
+  public NamedList<Integer> getFacetCounts() {
+    NamedList<Integer> res = new NamedList<Integer>();
     int off=offset;
     int lim=limit>=0 ? limit : Integer.MAX_VALUE;
      // now select the right page from the results
@@ -377,7 +372,7 @@ class IndexSortedFacetCollector extends 
   int offset;
   int limit;
   final int mincount;
-  final NamedList res = new NamedList();
+  final NamedList<Integer> res = new NamedList<Integer>();
 
 
   public IndexSortedFacetCollector(int offset, int limit, int mincount) {
@@ -406,7 +401,7 @@ class IndexSortedFacetCollector extends 
   }
 
   @Override
-  public NamedList getFacetCounts() {
+  public NamedList<Integer> getFacetCounts() {
     return res;
   }
 }

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/request/SimpleFacets.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/request/SimpleFacets.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/request/SimpleFacets.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/request/SimpleFacets.java Thu Jan 13 19:53:21 2011
@@ -70,7 +70,7 @@ public class SimpleFacets {
   protected SolrQueryRequest req;
   protected ResponseBuilder rb;
 
-  protected SimpleOrderedMap facetResponse;
+  protected SimpleOrderedMap<Object> facetResponse;
 
   // per-facet values
   SolrParams localParams; // localParams on this particular facet command
@@ -175,13 +175,13 @@ public class SimpleFacets {
    * @see FacetParams#FACET
    * @return a NamedList of Facet Count info or null
    */
-  public NamedList getFacetCounts() {
+  public NamedList<Object> getFacetCounts() {
 
     // if someone called this method, benefit of the doubt: assume true
     if (!params.getBool(FacetParams.FACET,true))
       return null;
 
-    facetResponse = new SimpleOrderedMap();
+    facetResponse = new SimpleOrderedMap<Object>();
     try {
       facetResponse.add("facet_queries", getFacetQueryCounts());
       facetResponse.add("facet_fields", getFacetFieldCounts());
@@ -196,9 +196,11 @@ public class SimpleFacets {
   }
 
   public void addException(String msg, Exception e) {
-    List exceptions = (List)facetResponse.get("exception");
+    @SuppressWarnings("unchecked") 
+      List<String> exceptions = (List<String>)facetResponse.get("exception");
+
     if (exceptions == null) {
-      exceptions = new ArrayList();
+      exceptions = new ArrayList<String>();
       facetResponse.add("exception", exceptions);
     }
 
@@ -212,9 +214,9 @@ public class SimpleFacets {
    *
    * @see FacetParams#FACET_QUERY
    */
-  public NamedList getFacetQueryCounts() throws IOException,ParseException {
+  public NamedList<Integer> getFacetQueryCounts() throws IOException,ParseException {
 
-    NamedList res = new SimpleOrderedMap();
+    NamedList<Integer> res = new SimpleOrderedMap<Integer>();
 
     /* Ignore CommonParams.DF - could have init param facet.query assuming
      * the schema default with query param DF intented to only affect Q.
@@ -246,10 +248,10 @@ public class SimpleFacets {
   }
 
 
-  public NamedList getTermCounts(String field) throws IOException {
+  public NamedList<Integer> getTermCounts(String field) throws IOException {
     int offset = params.getFieldInt(field, FacetParams.FACET_OFFSET, 0);
     int limit = params.getFieldInt(field, FacetParams.FACET_LIMIT, 100);
-    if (limit == 0) return new NamedList();
+    if (limit == 0) return new NamedList<Integer>();
     Integer mincount = params.getFieldInt(field, FacetParams.FACET_MINCOUNT);
     if (mincount==null) {
       Boolean zeros = params.getFieldBool(field, FacetParams.FACET_ZEROS);
@@ -263,7 +265,7 @@ public class SimpleFacets {
     String prefix = params.getFieldParam(field,FacetParams.FACET_PREFIX);
 
 
-    NamedList counts;
+    NamedList<Integer> counts;
     SchemaField sf = searcher.getSchema().getField(field);
     FieldType ft = sf.getType();
 
@@ -335,10 +337,10 @@ public class SimpleFacets {
    * @see #getFieldMissingCount
    * @see #getFacetTermEnumCounts
    */
-  public NamedList getFacetFieldCounts()
+  public NamedList<Object> getFacetFieldCounts()
           throws IOException, ParseException {
 
-    NamedList res = new SimpleOrderedMap();
+    NamedList<Object> res = new SimpleOrderedMap<Object>();
     String[] facetFs = params.getParams(FacetParams.FACET_FIELD);
     if (null != facetFs) {
       for (String f : facetFs) {
@@ -361,10 +363,10 @@ public class SimpleFacets {
   }
 
 
-  private NamedList getListedTermCounts(String field, String termList) throws IOException {
+  private NamedList<Integer> getListedTermCounts(String field, String termList) throws IOException {
     FieldType ft = searcher.getSchema().getFieldType(field);
     List<String> terms = StrUtils.splitSmart(termList, ",", true);
-    NamedList res = new NamedList();
+    NamedList<Integer> res = new NamedList<Integer>();
     Term t = new Term(field);
     for (String term : terms) {
       String internal = ft.toInternal(term);
@@ -394,7 +396,7 @@ public class SimpleFacets {
    * Use the Lucene FieldCache to get counts for each unique field value in <code>docs</code>.
    * The field must have at most one indexed token per document.
    */
-  public static NamedList getFieldCacheCounts(SolrIndexSearcher searcher, DocSet docs, String fieldName, int offset, int limit, int mincount, boolean missing, String sort, String prefix) throws IOException {
+  public static NamedList<Integer> getFieldCacheCounts(SolrIndexSearcher searcher, DocSet docs, String fieldName, int offset, int limit, int mincount, boolean missing, String sort, String prefix) throws IOException {
     // TODO: If the number of terms is high compared to docs.size(), and zeros==false,
     //  we should use an alternate strategy to avoid
     //  1) creating another huge int[] for the counts
@@ -409,9 +411,9 @@ public class SimpleFacets {
     // trying to pass all the various params around.
 
     FieldType ft = searcher.getSchema().getFieldType(fieldName);
-    NamedList res = new NamedList();
+    NamedList<Integer> res = new NamedList<Integer>();
 
-    FieldCache.DocTermsIndex si = FieldCache.DEFAULT.getTermsIndex(searcher.getReader(), fieldName);
+    FieldCache.DocTermsIndex si = FieldCache.DEFAULT.getTermsIndex(searcher.getIndexReader(), fieldName);
 
     final BytesRef prefixRef;
     if (prefix == null) {
@@ -589,7 +591,7 @@ public class SimpleFacets {
    * @see FacetParams#FACET_ZEROS
    * @see FacetParams#FACET_MISSING
    */
-  public NamedList getFacetTermEnumCounts(SolrIndexSearcher searcher, DocSet docs, String field, int offset, int limit, int mincount, boolean missing, String sort, String prefix)
+  public NamedList<Integer> getFacetTermEnumCounts(SolrIndexSearcher searcher, DocSet docs, String field, int offset, int limit, int mincount, boolean missing, String sort, String prefix)
     throws IOException {
 
     /* :TODO: potential optimization...
@@ -609,13 +611,13 @@ public class SimpleFacets {
 
 
     IndexSchema schema = searcher.getSchema();
-    IndexReader r = searcher.getReader();
+    IndexReader r = searcher.getIndexReader();
     FieldType ft = schema.getFieldType(field);
 
     boolean sortByCount = sort.equals("count") || sort.equals("true");
     final int maxsize = limit>=0 ? offset+limit : Integer.MAX_VALUE-1;
     final BoundedTreeSet<CountPair<BytesRef,Integer>> queue = sortByCount ? new BoundedTreeSet<CountPair<BytesRef,Integer>>(maxsize) : null;
-    final NamedList res = new NamedList();
+    final NamedList<Integer> res = new NamedList<Integer>();
 
     int min=mincount-1;  // the smallest value in the top 'N' values    
     int off=offset;
@@ -776,10 +778,10 @@ public class SimpleFacets {
    * @see FacetParams#FACET_DATE
    */
 
-  public NamedList getFacetDateCounts()
+  public NamedList<Object> getFacetDateCounts()
     throws IOException, ParseException {
 
-    final NamedList resOuter = new SimpleOrderedMap();
+    final NamedList<Object> resOuter = new SimpleOrderedMap<Object>();
     final String[] fields = params.getParams(FacetParams.FACET_DATE);
 
     if (null == fields || 0 == fields.length) return resOuter;
@@ -797,7 +799,7 @@ public class SimpleFacets {
     return resOuter;
   }
 
-  public void getFacetDateCounts(String dateFacet, NamedList resOuter)
+  public void getFacetDateCounts(String dateFacet, NamedList<Object> resOuter)
       throws IOException, ParseException {
 
     final IndexSchema schema = searcher.getSchema();
@@ -806,7 +808,7 @@ public class SimpleFacets {
     String f = facetValue;
 
 
-    final NamedList resInner = new SimpleOrderedMap();
+    final NamedList<Object> resInner = new SimpleOrderedMap<Object>();
     resOuter.add(key, resInner);
     final SchemaField sf = schema.getField(f);
     if (! (sf.getType() instanceof DateField)) {
@@ -948,8 +950,8 @@ public class SimpleFacets {
    * @see FacetParams#FACET_RANGE
    */
 
-  public NamedList getFacetRangeCounts() {
-    final NamedList resOuter = new SimpleOrderedMap();
+  public NamedList<Object> getFacetRangeCounts() {
+    final NamedList<Object> resOuter = new SimpleOrderedMap<Object>();
     final String[] fields = params.getParams(FacetParams.FACET_RANGE);
 
     if (null == fields || 0 == fields.length) return resOuter;
@@ -967,7 +969,7 @@ public class SimpleFacets {
     return resOuter;
   }
 
-  void getFacetRangeCounts(String facetRange, NamedList resOuter)
+  void getFacetRangeCounts(String facetRange, NamedList<Object> resOuter)
       throws IOException, ParseException {
 
     final IndexSchema schema = searcher.getSchema();
@@ -978,7 +980,7 @@ public class SimpleFacets {
     final SchemaField sf = schema.getField(f);
     final FieldType ft = sf.getType();
 
-    RangeEndpointCalculator calc = null;
+    RangeEndpointCalculator<?> calc = null;
 
     if (ft instanceof TrieField) {
       final TrieField trie = (TrieField)ft;
@@ -1025,8 +1027,8 @@ public class SimpleFacets {
      final RangeEndpointCalculator<T> calc) throws IOException {
     
     final String f = sf.getName();
-    final NamedList res = new SimpleOrderedMap();
-    final NamedList counts = new SimpleOrderedMap();
+    final NamedList<Object> res = new SimpleOrderedMap<Object>();
+    final NamedList<Integer> counts = new SimpleOrderedMap<Integer>();
     res.add("counts", counts);
 
     final T start = calc.getValue(required.getFieldParam(f,FacetParams.FACET_RANGE_START));
@@ -1176,8 +1178,9 @@ public class SimpleFacets {
       return key.hashCode() ^ val.hashCode();
     }
     public boolean equals(Object o) {
-      return (o instanceof CountPair)
-        && (0 == this.compareTo((CountPair<K,V>) o));
+      if (! (o instanceof CountPair)) return false;
+      CountPair<?,?> that = (CountPair<?,?>) o;
+      return (this.key.equals(that.key) && this.val.equals(that.val));
     }
     public int compareTo(CountPair<K,V> o) {
       int vc = o.val.compareTo(val);

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/request/UnInvertedField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/request/UnInvertedField.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/request/UnInvertedField.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/request/UnInvertedField.java Thu Jan 13 19:53:21 2011
@@ -192,7 +192,7 @@ public class UnInvertedField {
   private void uninvert(SolrIndexSearcher searcher) throws IOException {
     long startTime = System.currentTimeMillis();
 
-    IndexReader reader = searcher.getReader();
+    IndexReader reader = searcher.getIndexReader();
     int maxDoc = reader.maxDoc();
 
     int[] index = new int[maxDoc];       // immediate term numbers, or the index into the byte[] representing the last number
@@ -457,12 +457,12 @@ public class UnInvertedField {
 
 
 
-  public NamedList getCounts(SolrIndexSearcher searcher, DocSet baseDocs, int offset, int limit, Integer mincount, boolean missing, String sort, String prefix) throws IOException {
+  public NamedList<Integer> getCounts(SolrIndexSearcher searcher, DocSet baseDocs, int offset, int limit, Integer mincount, boolean missing, String sort, String prefix) throws IOException {
     use.incrementAndGet();
 
     FieldType ft = searcher.getSchema().getFieldType(field);
 
-    NamedList res = new NamedList();  // order is important
+    NamedList<Integer> res = new NamedList<Integer>();  // order is important
 
     DocSet docs = baseDocs;
     int baseSize = docs.size();
@@ -481,7 +481,7 @@ public class UnInvertedField {
       int startTerm = 0;
       int endTerm = numTermsInField;  // one past the end
 
-      NumberedTermsEnum te = ti.getEnumerator(searcher.getReader());
+      NumberedTermsEnum te = ti.getEnumerator(searcher.getIndexReader());
       if (prefix != null && prefix.length() > 0) {
         BytesRef prefixBr = new BytesRef(prefix);
         te.skipTo(prefixBr);
@@ -719,7 +719,7 @@ public class UnInvertedField {
     for (String f : facet) {
       FieldType facet_ft = searcher.getSchema().getFieldType(f);
       try {
-        si = FieldCache.DEFAULT.getTermsIndex(searcher.getReader(), f);
+        si = FieldCache.DEFAULT.getTermsIndex(searcher.getIndexReader(), f);
       }
       catch (IOException e) {
         throw new RuntimeException("failed to open field cache for: " + f, e);
@@ -731,7 +731,7 @@ public class UnInvertedField {
     final int[] index = this.index;
     final int[] counts = new int[numTermsInField];//keep track of the number of times we see each word in the field for all the documents in the docset
 
-    NumberedTermsEnum te = ti.getEnumerator(searcher.getReader());
+    NumberedTermsEnum te = ti.getEnumerator(searcher.getIndexReader());
 
 
     boolean doNegative = false;
@@ -900,15 +900,15 @@ public class UnInvertedField {
   //////////////////////////// caching /////////////////////////////
   //////////////////////////////////////////////////////////////////
   public static UnInvertedField getUnInvertedField(String field, SolrIndexSearcher searcher) throws IOException {
-    SolrCache cache = searcher.getFieldValueCache();
+    SolrCache<String,UnInvertedField> cache = searcher.getFieldValueCache();
     if (cache == null) {
       return new UnInvertedField(field, searcher);
     }
 
-    UnInvertedField uif = (UnInvertedField)cache.get(field);
+    UnInvertedField uif = cache.get(field);
     if (uif == null) {
       synchronized (cache) {
-        uif = (UnInvertedField)cache.get(field);
+        uif = cache.get(field);
         if (uif == null) {
           uif = new UnInvertedField(field, searcher);
           cache.put(field, uif);
@@ -918,7 +918,6 @@ public class UnInvertedField {
 
     return uif;
   }
-
 }
 
 
@@ -1001,10 +1000,6 @@ class NumberedTermsEnum extends TermsEnu
     return tenum.docFreq();
   }
 
-  @Override
-  public void cacheCurrentTerm() {
-    throw new UnsupportedOperationException();
-  }
 
   public BytesRef skipTo(BytesRef target) throws IOException {
 

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/response/SolrQueryResponse.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/response/SolrQueryResponse.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/response/SolrQueryResponse.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/response/SolrQueryResponse.java Thu Jan 13 19:53:21 2011
@@ -66,12 +66,12 @@ public class SolrQueryResponse {
    * @see #setAllValues
    * @see <a href="#returnable_data">Note on Returnable Data</a>
    */
-  protected NamedList values = new SimpleOrderedMap();
+  protected NamedList<Object> values = new SimpleOrderedMap<Object>();
 
   /**
    * Container for storing information that should be logged by Solr before returning.
    */
-  protected NamedList toLog = new SimpleOrderedMap();
+  protected NamedList<Object> toLog = new SimpleOrderedMap<Object>();
 
   protected Set<String> defaultReturnFields;
 
@@ -103,7 +103,7 @@ public class SolrQueryResponse {
    * Sets data to be returned in this response
    * @see <a href="#returnable_data">Note on Returnable Data</a>
    */
-  public void setAllValues(NamedList nameValuePairs) {
+  public void setAllValues(NamedList<Object> nameValuePairs) {
     values=nameValuePairs;
   }
 
@@ -189,7 +189,8 @@ public class SolrQueryResponse {
   }
   
   /** Repsonse header to be logged */ 
-  public NamedList getResponseHeader() {
+  public NamedList<Object> getResponseHeader() {
+    @SuppressWarnings("unchecked")
 	  SimpleOrderedMap<Object> header = (SimpleOrderedMap<Object>) values.get("responseHeader");
 	  return header;
   }
@@ -207,7 +208,7 @@ public class SolrQueryResponse {
    * 
    * @return things to log
    */
-  public NamedList getToLog() {
+  public NamedList<Object> getToLog() {
 	  return toLog;
   }
   

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/BinaryField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/BinaryField.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/BinaryField.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/BinaryField.java Thu Jan 13 19:53:21 2011
@@ -50,7 +50,7 @@ public class BinaryField extends FieldTy
     return  ByteBuffer.wrap(f.getBinaryValue(), f.getBinaryOffset(), f.getBinaryLength() ) ;
   }
 
-  public Field createField(SchemaField field, Object val, float boost) {
+  public Fieldable createField(SchemaField field, Object val, float boost) {
     if (val == null) return null;
     if (!field.stored()) {
       log.trace("Ignoring unstored binary field: " + field);

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/DateField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/DateField.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/DateField.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/DateField.java Thu Jan 13 19:53:21 2011
@@ -18,7 +18,7 @@
 package org.apache.solr.schema;
 
 import org.apache.lucene.document.Fieldable;
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.SortField;
 import org.apache.lucene.search.TermRangeQuery;
@@ -427,8 +427,8 @@ class DateFieldSource extends FieldCache
     return "date(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    return new StringIndexDocValues(this, reader, field) {
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    return new StringIndexDocValues(this, readerContext, field) {
       protected String toTerm(String readableValue) {
         // needed for frange queries to work properly
         return ft.toInternal(readableValue);

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/FieldType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/FieldType.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/FieldType.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/FieldType.java Thu Jan 13 19:53:21 2011
@@ -221,7 +221,7 @@ public abstract class FieldType extends 
    *
    *
    */
-  public Field createField(SchemaField field, String externalVal, float boost) {
+  public Fieldable createField(SchemaField field, String externalVal, float boost) {
     if (!field.indexed() && !field.stored()) {
       if (log.isTraceEnabled())
         log.trace("Ignoring unindexed/unstored field: " + field);
@@ -252,9 +252,9 @@ public abstract class FieldType extends 
    * @param omitNorms true if norms should be omitted
    * @param omitTFPos true if term freq and position should be omitted.
    * @param boost The boost value
-   * @return the {@link org.apache.lucene.document.Field}.
+   * @return the {@link org.apache.lucene.document.Fieldable}.
    */
-  protected Field createField(String name, String val, Field.Store storage, Field.Index index,
+  protected Fieldable createField(String name, String val, Field.Store storage, Field.Index index,
                                     Field.TermVector vec, boolean omitNorms, boolean omitTFPos, float boost){
     Field f = new Field(name,
                         val,
@@ -278,7 +278,7 @@ public abstract class FieldType extends 
    * @see #isPolyField()
    */
   public Fieldable[] createFields(SchemaField field, String externalVal, float boost) {
-    Field f = createField( field, externalVal, boost);
+    Fieldable f = createField( field, externalVal, boost);
     return f==null ? new Fieldable[]{} : new Fieldable[]{f};
   }
 
@@ -341,7 +341,7 @@ public abstract class FieldType extends 
   public Object toObject(SchemaField sf, BytesRef term) {
     CharArr ext = new CharArr(term.length);
     indexedToReadable(term, ext);
-    Field f = createField(sf, ext.toString(), 1.0f);
+    Fieldable f = createField(sf, ext.toString(), 1.0f);
     return toObject(f);
   }
 
@@ -511,7 +511,6 @@ public abstract class FieldType extends 
    * @param maxInclusive whether the maximum of the range is inclusive or not
    *  @return a Query instance to perform range search according to given parameters
    *
-   * @see org.apache.solr.search.SolrQueryParser#getRangeQuery(String, String, String, boolean)
    */
   public Query getRangeQuery(QParser parser, SchemaField field, String part1, String part2, boolean minInclusive, boolean maxInclusive) {
     // constant score mode is now enabled per default

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/LatLonType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/LatLonType.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/LatLonType.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/LatLonType.java Thu Jan 13 19:53:21 2011
@@ -19,7 +19,7 @@ package org.apache.solr.schema;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.Fieldable;
 import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.MultiFields;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.*;
 import org.apache.lucene.spatial.DistanceUtils;
 import org.apache.lucene.spatial.tier.InvalidGeoException;
@@ -27,7 +27,6 @@ import org.apache.lucene.util.Bits;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.response.TextResponseWriter;
 import org.apache.solr.search.QParser;
-import org.apache.solr.search.SolrIndexReader;
 import org.apache.solr.search.SpatialOptions;
 import org.apache.solr.search.function.DocValues;
 import org.apache.solr.search.function.ValueSource;
@@ -281,7 +280,7 @@ public class LatLonType extends Abstract
   //It never makes sense to create a single field, so make it impossible to happen
 
   @Override
-  public Field createField(SchemaField field, String externalVal, float boost) {
+  public Fieldable createField(SchemaField field, String externalVal, float boost) {
     throw new UnsupportedOperationException("LatLonType uses multiple fields.  field=" + field.getName());
   }
 
@@ -334,16 +333,16 @@ class SpatialDistanceQuery extends Query
   public void extractTerms(Set terms) {}
 
   protected class SpatialWeight extends Weight {
-    protected Searcher searcher;
+    protected IndexSearcher searcher;
     protected float queryNorm;
     protected float queryWeight;
     protected Map latContext;
     protected Map lonContext;
 
-    public SpatialWeight(Searcher searcher) throws IOException {
+    public SpatialWeight(IndexSearcher searcher) throws IOException {
       this.searcher = searcher;
-      this.latContext = latSource.newContext();
-      this.lonContext = lonSource.newContext();
+      this.latContext = latSource.newContext(searcher);
+      this.lonContext = lonSource.newContext(searcher);
       latSource.createWeight(latContext, searcher);
       lonSource.createWeight(lonContext, searcher);
     }
@@ -371,18 +370,13 @@ class SpatialDistanceQuery extends Query
     }
 
     @Override
-    public Scorer scorer(IndexReader reader, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
-      return new SpatialScorer(getSimilarity(searcher), reader, this);
+    public Scorer scorer(AtomicReaderContext context, ScorerContext scorerContext) throws IOException {
+      return new SpatialScorer(getSimilarity(searcher), context, this);
     }
 
     @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];
-      return ((SpatialScorer)scorer(subReaders[readerPos], true, true)).explain(doc-readerBase);
+    public Explanation explain(AtomicReaderContext context, int doc) throws IOException {
+      return ((SpatialScorer)scorer(context, ScorerContext.def().scoreDocsInOrder(true).topScorer(true))).explain(doc);
     }
   }
 
@@ -410,15 +404,15 @@ class SpatialDistanceQuery extends Query
     int lastDistDoc;
     double lastDist;
 
-    public SpatialScorer(Similarity similarity, IndexReader reader, SpatialWeight w) throws IOException {
+    public SpatialScorer(Similarity similarity, AtomicReaderContext readerContext, SpatialWeight w) throws IOException {
       super(similarity);
       this.weight = w;
       this.qWeight = w.getValue();
-      this.reader = reader;
+      this.reader = readerContext.reader;
       this.maxDoc = reader.maxDoc();
-      this.delDocs = reader.hasDeletions() ? MultiFields.getDeletedDocs(reader) : null;
-      latVals = latSource.getValues(weight.latContext, reader);
-      lonVals = lonSource.getValues(weight.lonContext, reader);
+      this.delDocs = reader.getDeletedDocs();
+      latVals = latSource.getValues(weight.latContext, readerContext);
+      lonVals = lonSource.getValues(weight.lonContext, readerContext);
 
       this.lonMin = SpatialDistanceQuery.this.lonMin;
       this.lonMax = SpatialDistanceQuery.this.lonMax;
@@ -535,7 +529,7 @@ class SpatialDistanceQuery extends Query
 
 
   @Override
-  public Weight createWeight(Searcher searcher) throws IOException {
+  public Weight createWeight(IndexSearcher searcher) throws IOException {
     return new SpatialWeight(searcher);
   }
 

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/PointType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/PointType.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/PointType.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/PointType.java Thu Jan 13 19:53:21 2011
@@ -112,7 +112,7 @@ public class PointType extends Coordinat
    *
    */
   @Override
-  public Field createField(SchemaField field, String externalVal, float boost) {
+  public Fieldable createField(SchemaField field, String externalVal, float boost) {
     throw new UnsupportedOperationException("PointType uses multiple fields.  field=" + field.getName());
   }
 

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/RandomSortField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/RandomSortField.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/RandomSortField.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/RandomSortField.java Thu Jan 13 19:53:21 2011
@@ -22,12 +22,13 @@ import java.util.Map;
 
 import org.apache.lucene.document.Fieldable;
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.*;
+import org.apache.lucene.util.ReaderUtil;
 import org.apache.solr.response.TextResponseWriter;
 import org.apache.solr.search.QParser;
 import org.apache.solr.search.function.DocValues;
 import org.apache.solr.search.function.ValueSource;
-import org.apache.solr.search.SolrIndexReader;
 
 /**
  * Utility Field used for random sorting.  It should not be passed a value.
@@ -77,19 +78,13 @@ public class RandomSortField extends Fie
    * Given a field name and an IndexReader, get a random hash seed.  
    * Using dynamic fields, you can force the random order to change 
    */
-  private static int getSeed(String fieldName, IndexReader r) {
-    SolrIndexReader top = (SolrIndexReader)r;
-    int base=0;
-    while (top.getParent() != null) {
-      base += top.getBase();
-      top = top.getParent();
-    }
-
+  private static int getSeed(String fieldName, AtomicReaderContext context) {
+    final IndexReader top = ReaderUtil.getTopLevelContext(context).reader;
     // calling getVersion() on a segment will currently give you a null pointer exception, so
     // we use the top-level reader.
-    return fieldName.hashCode() + base + (int)top.getVersion();
+    return fieldName.hashCode() + context.docBase + (int)top.getVersion();
   }
-
+  
   @Override
   public SortField getSortField(SchemaField field, boolean reverse) {
     return new SortField(field.getName(), randomComparatorSource, reverse);
@@ -127,8 +122,8 @@ public class RandomSortField extends Fie
           values[slot] = hash(doc+seed);
         }
 
-        public FieldComparator setNextReader(IndexReader reader, int docBase) throws IOException {
-          seed = getSeed(fieldname, reader);
+        public FieldComparator setNextReader(AtomicReaderContext context) throws IOException {
+          seed = getSeed(fieldname, context);
           return this;
         }
 
@@ -154,9 +149,9 @@ public class RandomSortField extends Fie
     }
 
     @Override
-    public DocValues getValues(Map context, final IndexReader reader) throws IOException {
+    public DocValues getValues(Map context, final AtomicReaderContext readerContext) throws IOException {
       return new DocValues() {
-          private final int seed = getSeed(field, reader);
+          private final int seed = getSeed(field, readerContext);
           @Override
           public float floatVal(int doc) {
             return (float)hash(doc+seed);

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SchemaField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SchemaField.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SchemaField.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SchemaField.java Thu Jan 13 19:53:21 2011
@@ -89,7 +89,7 @@ public final class SchemaField extends F
   boolean isBinary() { return (properties & BINARY)!=0; }
 
 
-  public Field createField(String val, float boost) {
+  public Fieldable createField(String val, float boost) {
     return type.createField(this,val,boost);
   }
   

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SortableDoubleField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SortableDoubleField.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SortableDoubleField.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SortableDoubleField.java Thu Jan 13 19:53:21 2011
@@ -28,7 +28,7 @@ import org.apache.solr.search.function.F
 import org.apache.solr.search.function.DocValues;
 import org.apache.solr.search.function.StringIndexDocValues;
 import org.apache.lucene.document.Fieldable;
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.solr.util.ByteUtils;
 import org.apache.solr.util.NumberUtils;
 import org.apache.solr.response.TextResponseWriter;
@@ -99,10 +99,10 @@ class SortableDoubleFieldSource extends 
     return "sdouble(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     final double def = defVal;
 
-    return new StringIndexDocValues(this, reader, field) {
+    return new StringIndexDocValues(this, readerContext, field) {
       private final BytesRef spare = new BytesRef();
 
       protected String toTerm(String readableValue) {

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SortableFloatField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SortableFloatField.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SortableFloatField.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SortableFloatField.java Thu Jan 13 19:53:21 2011
@@ -28,7 +28,7 @@ import org.apache.solr.search.function.F
 import org.apache.solr.search.function.DocValues;
 import org.apache.solr.search.function.StringIndexDocValues;
 import org.apache.lucene.document.Fieldable;
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.solr.util.ByteUtils;
 import org.apache.solr.util.NumberUtils;
 import org.apache.solr.response.TextResponseWriter;
@@ -99,10 +99,10 @@ class SortableFloatFieldSource extends F
     return "sfloat(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     final float def = defVal;
 
-    return new StringIndexDocValues(this, reader, field) {
+    return new StringIndexDocValues(this, readerContext, field) {
       private final BytesRef spare = new BytesRef();
 
       protected String toTerm(String readableValue) {

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SortableIntField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SortableIntField.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SortableIntField.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SortableIntField.java Thu Jan 13 19:53:21 2011
@@ -28,7 +28,7 @@ import org.apache.solr.search.function.F
 import org.apache.solr.search.function.DocValues;
 import org.apache.solr.search.function.StringIndexDocValues;
 import org.apache.lucene.document.Fieldable;
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.solr.util.ByteUtils;
 import org.apache.solr.util.NumberUtils;
 import org.apache.solr.response.TextResponseWriter;
@@ -101,10 +101,10 @@ class SortableIntFieldSource extends Fie
     return "sint(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     final int def = defVal;
 
-    return new StringIndexDocValues(this, reader, field) {
+    return new StringIndexDocValues(this, readerContext, field) {
       private final BytesRef spare = new BytesRef();
 
       protected String toTerm(String readableValue) {

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SortableLongField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SortableLongField.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SortableLongField.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/SortableLongField.java Thu Jan 13 19:53:21 2011
@@ -28,7 +28,7 @@ import org.apache.solr.search.function.F
 import org.apache.solr.search.function.DocValues;
 import org.apache.solr.search.function.StringIndexDocValues;
 import org.apache.lucene.document.Fieldable;
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.solr.util.ByteUtils;
 import org.apache.solr.util.NumberUtils;
 import org.apache.solr.response.TextResponseWriter;
@@ -100,10 +100,10 @@ class SortableLongFieldSource extends Fi
     return "slong(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     final long def = defVal;
 
-    return new StringIndexDocValues(this, reader, field) {
+    return new StringIndexDocValues(this, readerContext, field) {
       private final BytesRef spare = new BytesRef();
 
       protected String toTerm(String readableValue) {

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/StrFieldSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/StrFieldSource.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/StrFieldSource.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/StrFieldSource.java Thu Jan 13 19:53:21 2011
@@ -17,7 +17,7 @@
 
 package org.apache.solr.schema;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.util.BytesRef;
 import org.apache.solr.search.function.DocValues;
 import org.apache.solr.search.function.FieldCacheSource;
@@ -36,8 +36,8 @@ public class StrFieldSource extends Fiel
     return "str(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    return new StringIndexDocValues(this, reader, field) {
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    return new StringIndexDocValues(this, readerContext, field) {
       protected String toTerm(String readableValue) {
         return readableValue;
       }

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/TrieDateField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/TrieDateField.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/TrieDateField.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/TrieDateField.java Thu Jan 13 19:53:21 2011
@@ -160,7 +160,7 @@ public class TrieDateField extends DateF
   }
 
   @Override
-  public Field createField(SchemaField field, String externalVal, float boost) {
+  public Fieldable createField(SchemaField field, String externalVal, float boost) {
     boolean indexed = field.indexed();
     boolean stored = field.stored();
 

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/TrieField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/TrieField.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/TrieField.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/schema/TrieField.java Thu Jan 13 19:53:21 2011
@@ -477,7 +477,7 @@ public class TrieField extends FieldType
   }
 
   @Override
-  public Field createField(SchemaField field, String externalVal, float boost) {
+  public Fieldable createField(SchemaField field, String externalVal, float boost) {
     boolean indexed = field.indexed();
     boolean stored = field.stored();
 

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/DocSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/DocSet.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/DocSet.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/DocSet.java Thu Jan 13 19:53:21 2011
@@ -23,6 +23,7 @@ import org.apache.lucene.search.DocIdSet
 import org.apache.lucene.search.Filter;
 import org.apache.lucene.search.DocIdSetIterator;
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 
 import java.io.IOException;
 
@@ -246,17 +247,15 @@ abstract class DocSetBase implements Doc
 
     return new Filter() {
       @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();
-        }
+      public DocIdSet getDocIdSet(AtomicReaderContext ctx) throws IOException {
+        IndexReader.AtomicReaderContext context = (IndexReader.AtomicReaderContext)ctx;  // TODO: remove after lucene migration
+        IndexReader reader = ctx.reader;
 
-        if (r==reader) return bs;
+        if (context.isTopLevel) {
+          return bs;
+        }
 
-        final int base = offset;
+        final int base = context.docBase;
         final int maxDoc = reader.maxDoc();
         final int max = base + maxDoc;   // one past the max doc in this segment.
 

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/DocSetHitCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/DocSetHitCollector.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/DocSetHitCollector.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/DocSetHitCollector.java Thu Jan 13 19:53:21 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;
 
@@ -80,8 +80,8 @@ class DocSetCollector extends Collector 
   public void setScorer(Scorer scorer) throws IOException {
   }
 
-  public void setNextReader(IndexReader reader, int docBase) throws IOException {
-    this.base = docBase;
+  public void setNextReader(AtomicReaderContext context) throws IOException {
+    this.base = context.docBase;
   }
 
   public boolean acceptsDocsOutOfOrder() {
@@ -135,8 +135,8 @@ class DocSetDelegateCollector extends Do
     collector.setScorer(scorer);
   }
 
-  public void setNextReader(IndexReader reader, int docBase) throws IOException {
-    collector.setNextReader(reader, docBase);
-    this.base = docBase;
+  public void setNextReader(AtomicReaderContext context) throws IOException {
+    collector.setNextReader(context);
+    this.base = context.docBase;
   }
 }

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/Grouping.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/Grouping.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/Grouping.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/Grouping.java Thu Jan 13 19:53:21 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;
@@ -151,7 +151,7 @@ public class Grouping {
     
     @Override
     void prepare() throws IOException {
-        Map context = ValueSource.newContext();
+        Map context = ValueSource.newContext(searcher);
         groupBy.createWeight(context, searcher);
     }
 
@@ -457,14 +457,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
@@ -685,13 +686,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
@@ -759,13 +760,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
@@ -812,8 +813,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/realtime_search/solr/src/java/org/apache/solr/search/LuceneQueryOptimizer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/LuceneQueryOptimizer.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/LuceneQueryOptimizer.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/LuceneQueryOptimizer.java Thu Jan 13 19:53:21 2011
@@ -54,7 +54,7 @@ class LuceneQueryOptimizer {
   }
 
   public TopDocs optimize(BooleanQuery original,
-                          Searcher searcher,
+                          IndexSearcher searcher,
                           int numHits,
                           Query[] queryOut,
                           Filter[] filterOut

Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/MissingStringLastComparatorSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/MissingStringLastComparatorSource.java?rev=1058718&r1=1058717&r2=1058718&view=diff
==============================================================================
--- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/MissingStringLastComparatorSource.java (original)
+++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/MissingStringLastComparatorSource.java Thu Jan 13 19:53:21 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;
@@ -101,8 +102,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 +143,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