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);