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]