tjones 2004/03/29 10:55:30
Modified: src/java/org/apache/lucene/search FloatSortedHitQueue.java
IntegerSortedHitQueue.java
StringSortedHitQueue.java
Log:
streamlined by removing duplicated code
Revision Changes Path
1.4 +3 -62
jakarta-lucene/src/java/org/apache/lucene/search/FloatSortedHitQueue.java
Index: FloatSortedHitQueue.java
===================================================================
RCS file:
/home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/FloatSortedHitQueue.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- FloatSortedHitQueue.java 24 Mar 2004 19:23:11 -0000 1.3
+++ FloatSortedHitQueue.java 29 Mar 2004 18:55:30 -0000 1.4
@@ -72,67 +72,8 @@
*/
static ScoreDocLookupComparator comparator (final IndexReader reader, final
String fieldname)
throws IOException {
- final String field = fieldname.intern();
- return new ScoreDocLookupComparator () {
-
- protected final float[] fieldOrder = generateSortIndex();
-
- protected final float[] generateSortIndex()
- throws IOException {
-
- float[] retArray = new float[reader.maxDoc()];
- if (retArray.length > 0) {
- TermEnum enumerator = reader.terms (new Term
(field, ""));
- TermDocs termDocs = reader.termDocs();
- try {
- if (enumerator.term() == null) {
- throw new RuntimeException
("no terms in field " + field);
- }
- do {
- Term term = enumerator.term();
- if (term.field() != field)
break;
- float termval =
Float.parseFloat (term.text());
- termDocs.seek (enumerator);
- while (termDocs.next()) {
-
retArray[termDocs.doc()] = termval;
- }
- } while (enumerator.next());
- } finally {
- enumerator.close();
- termDocs.close();
- }
- }
- return retArray;
- }
-
- public final int compare (final ScoreDoc i, final ScoreDoc j) {
- final float fi = fieldOrder[i.doc];
- final float fj = fieldOrder[j.doc];
- if (fi < fj) return -1;
- if (fi > fj) return 1;
- return 0;
- }
-
- public final int compareReverse (final ScoreDoc i, final
ScoreDoc j) {
- final float fi = fieldOrder[i.doc];
- final float fj = fieldOrder[j.doc];
- if (fi > fj) return -1;
- if (fi < fj) return 1;
- return 0;
- }
-
- public final boolean sizeMatches (final int n) {
- return fieldOrder.length == n;
- }
-
- public Object sortValue (final ScoreDoc i) {
- return new Float (fieldOrder[i.doc]);
- }
-
- public int sortType() {
- return SortField.FLOAT;
- }
- };
+ TermEnum enumerator = reader.terms (new Term (fieldname, ""));
+ return comparator (reader, enumerator, fieldname);
}
1.4 +3 -63
jakarta-lucene/src/java/org/apache/lucene/search/IntegerSortedHitQueue.java
Index: IntegerSortedHitQueue.java
===================================================================
RCS file:
/home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/IntegerSortedHitQueue.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- IntegerSortedHitQueue.java 24 Mar 2004 19:23:11 -0000 1.3
+++ IntegerSortedHitQueue.java 29 Mar 2004 18:55:30 -0000 1.4
@@ -73,68 +73,8 @@
*/
static ScoreDocLookupComparator comparator (final IndexReader reader, final
String fieldname)
throws IOException {
- final String field = fieldname.intern();
- return new ScoreDocLookupComparator() {
-
- /** The sort information being used by this instance */
- protected final int[] fieldOrder = generateSortIndex();
-
- private final int[] generateSortIndex()
- throws IOException {
-
- final int[] retArray = new int[reader.maxDoc()];
- if (retArray.length > 0) {
- TermEnum enumerator = reader.terms (new Term
(field, ""));
- TermDocs termDocs = reader.termDocs();
- try {
- if (enumerator.term() == null) {
- throw new RuntimeException
("no terms in field "+field);
- }
- do {
- Term term = enumerator.term();
- if (term.field() != field)
break;
- int termval = Integer.parseInt
(term.text());
- termDocs.seek (enumerator);
- while (termDocs.next()) {
-
retArray[termDocs.doc()] = termval;
- }
- } while (enumerator.next());
- } finally {
- enumerator.close();
- termDocs.close();
- }
- }
- return retArray;
- }
-
- public final int compare (final ScoreDoc i, final ScoreDoc j) {
- final int fi = fieldOrder[i.doc];
- final int fj = fieldOrder[j.doc];
- if (fi < fj) return -1;
- if (fi > fj) return 1;
- return 0;
- }
-
- public final int compareReverse (final ScoreDoc i, final
ScoreDoc j) {
- final int fi = fieldOrder[i.doc];
- final int fj = fieldOrder[j.doc];
- if (fi > fj) return -1;
- if (fi < fj) return 1;
- return 0;
- }
-
- public final boolean sizeMatches (final int n) {
- return fieldOrder.length == n;
- }
-
- public Object sortValue (final ScoreDoc i) {
- return new Integer (fieldOrder[i.doc]);
- }
-
- public int sortType() {
- return SortField.INT;
- }
- };
+ TermEnum enumerator = reader.terms (new Term (fieldname, ""));
+ return comparator (reader, enumerator, fieldname);
}
1.5 +3 -97
jakarta-lucene/src/java/org/apache/lucene/search/StringSortedHitQueue.java
Index: StringSortedHitQueue.java
===================================================================
RCS file:
/home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/StringSortedHitQueue.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- StringSortedHitQueue.java 24 Mar 2004 19:23:11 -0000 1.4
+++ StringSortedHitQueue.java 29 Mar 2004 18:55:30 -0000 1.5
@@ -75,102 +75,8 @@
*/
static ScoreDocLookupComparator comparator (final IndexReader reader, final
String fieldname)
throws IOException {
- final String field = fieldname.intern();
- return new ScoreDocLookupComparator() {
-
- /** The sort information being used by this instance */
- protected final int[] fieldOrder = generateSortIndex();
- protected String[] terms;
-
- private final int[] generateSortIndex()
- throws IOException {
-
- final int[] retArray = new int[reader.maxDoc()];
- final String[] mterms = new String[reader.maxDoc()];
// guess length
- if (retArray.length > 0) {
- TermEnum enumerator = reader.terms (new Term
(field, ""));
- TermDocs termDocs = reader.termDocs();
-
- int t = 0; // current term number
- try {
- if (enumerator.term() == null) {
- throw new RuntimeException
("no terms in field " + field);
- }
-
- // NOTE: the contract for TermEnum
says the
- // terms will be in natural order
(which is
- // ordering by field name, term text).
The
- // contract for TermDocs says the docs
will
- // be ordered by document number. So
the
- // following loop will automatically
sort the
- // terms in the correct order.
-
- // if a given document has more than
one term
- // in the field, only the last one
will be used.
-
- do {
- Term term = enumerator.term();
- if (term.field() != field)
break;
-
- // store term text
- // we expect that there is at
most one term per document
- if (t >= mterms.length) throw
new RuntimeException ("there are more terms than documents in field \""+field+"\"");
- mterms[t] = term.text();
-
- // store which documents use
this term
- termDocs.seek (enumerator);
- while (termDocs.next()) {
-
retArray[termDocs.doc()] = t;
- }
-
- t++;
- } while (enumerator.next());
-
- } finally {
- enumerator.close();
- termDocs.close();
- }
-
- // if there are less terms than documents,
- // trim off the dead array space
- if (t < mterms.length) {
- terms = new String[t];
- System.arraycopy (mterms, 0, terms, 0,
t);
- } else {
- terms = mterms;
- }
- }
- return retArray;
- }
-
- public final int compare (final ScoreDoc i, final ScoreDoc j) {
- final int fi = fieldOrder[i.doc];
- final int fj = fieldOrder[j.doc];
- if (fi < fj) return -1;
- if (fi > fj) return 1;
- return 0;
- }
-
- public final int compareReverse (final ScoreDoc i, final
ScoreDoc j) {
- final int fi = fieldOrder[i.doc];
- final int fj = fieldOrder[j.doc];
- if (fi > fj) return -1;
- if (fi < fj) return 1;
- return 0;
- }
-
- public final boolean sizeMatches (final int n) {
- return fieldOrder.length == n;
- }
-
- public Object sortValue (final ScoreDoc i) {
- return terms[fieldOrder[i.doc]];
- }
-
- public int sortType() {
- return SortField.STRING;
- }
- };
+ TermEnum enumerator = reader.terms (new Term (fieldname, ""));
+ return comparator (reader, enumerator, fieldname);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]