You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2010/05/04 00:51:05 UTC

svn commit: r940661 - in /lucene/dev/trunk/solr/src/java/org/apache/solr: request/SimpleFacets.java search/SolrIndexSearcher.java

Author: yonik
Date: Mon May  3 22:51:05 2010
New Revision: 940661

URL: http://svn.apache.org/viewvc?rev=940661&view=rev
Log:
fix faceting's use of flex: term() is undefined after next() returns null

Modified:
    lucene/dev/trunk/solr/src/java/org/apache/solr/request/SimpleFacets.java
    lucene/dev/trunk/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java

Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/request/SimpleFacets.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/request/SimpleFacets.java?rev=940661&r1=940660&r2=940661&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/request/SimpleFacets.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/request/SimpleFacets.java Mon May  3 22:51:05 2010
@@ -516,6 +516,7 @@ public class SimpleFacets {
     Terms terms = fields==null ? null : fields.terms(field);
     TermsEnum termsEnum = null;
 
+    BytesRef term = null;
     if (terms != null) {
       termsEnum = terms.iterator();
 
@@ -525,10 +526,12 @@ public class SimpleFacets {
       if (startTermBytes != null) {
         if (termsEnum.seek(startTermBytes, true) == TermsEnum.SeekStatus.END) {
           termsEnum = null;
+        } else {
+          term = termsEnum.term();
         }
       } else {
         // position termsEnum on first term
-        termsEnum.next();
+        term = termsEnum.next();
       }
     }
 
@@ -536,11 +539,8 @@ public class SimpleFacets {
     DocsEnum docsEnum = null;
 
 
-    if (termsEnum != null && docs.size() >= mincount) {
-      for(;;) {
-        BytesRef term = termsEnum.term();
-        if (term == null)
-          break;
+    if (docs.size() >= mincount) {
+      while (term != null) {
 
         if (startTermBytes != null && !term.startsWith(startTermBytes))
           break;
@@ -597,7 +597,7 @@ public class SimpleFacets {
           }
         }
 
-        termsEnum.next();
+        term = termsEnum.next();
       }
     }
 

Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java?rev=940661&r1=940660&r2=940661&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java Mon May  3 22:51:05 2010
@@ -18,12 +18,11 @@
 package org.apache.solr.search;
 
 import org.apache.lucene.document.*;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.index.TermDocs;
+import org.apache.lucene.index.*;
 import org.apache.lucene.search.*;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.util.BytesRef;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.core.SolrConfig;
@@ -631,21 +630,29 @@ public class SolrIndexSearcher extends I
         Term t = ((TermQuery)query).getTerm();
         SolrIndexReader[] readers = reader.getLeafReaders();
         int[] offsets = reader.getLeafOffsets();
-        int[] arr = new int[256];
-        int[] freq = new int[256];
+
         for (int i=0; i<readers.length; i++) {
           SolrIndexReader sir = readers[i];
           int offset = offsets[i];
           collector.setNextReader(sir, offset);
-          TermDocs tdocs = sir.termDocs(t);
-          for(;;) {
-            int num = tdocs.read(arr, freq);
-            if (num==0) break;
-            for (int j=0; j<num; j++) {
-              collector.collect(arr[j]);
+          
+          Fields fields = sir.fields();
+          Terms terms = fields.terms(t.field());
+          BytesRef termBytes = new BytesRef(t.text());
+          DocsEnum docsEnum = terms==null ? null : terms.docs(null, termBytes, null);
+
+          if (docsEnum != null) {
+            DocsEnum.BulkReadResult readResult = docsEnum.getBulkResult();
+            for (;;) {
+              int n = docsEnum.read();
+              if (n==0) break;
+              int[] arr = readResult.docs.ints;
+              int end = readResult.docs.offset + n;
+              for (int j=readResult.docs.offset; j<end; j++) {
+                collector.collect(arr[j]);
+              }
             }
           }
-          tdocs.close();
         }
       } else {
         super.search(query,null,collector);