lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ehatc...@apache.org
Subject cvs commit: jakarta-lucene/src/java/org/apache/lucene/search Hits.java QueryFilter.java
Date Sat, 13 Sep 2003 10:46:25 GMT
ehatcher    2003/09/13 03:46:25

  Modified:    src/java/org/apache/lucene/search Hits.java QueryFilter.java
  Log:
  Reformatted.  Do we have any style guides special to Lucene different than Jakarta standards?
  
  Revision  Changes    Path
  1.7       +136 -125  jakarta-lucene/src/java/org/apache/lucene/search/Hits.java
  
  Index: Hits.java
  ===================================================================
  RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/Hits.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Hits.java	29 Jan 2003 17:18:54 -0000	1.6
  +++ Hits.java	13 Sep 2003 10:46:25 -0000	1.7
  @@ -61,133 +61,144 @@
   
   /** A ranked list of documents, used to hold search results. */
   public final class Hits {
  -  private Query query;
  -  private Searcher searcher;
  -  private Filter filter = null;
  -
  -  private int length;				  // the total number of hits
  -  private Vector hitDocs = new Vector();	  // cache of hits retrieved
  -
  -  private HitDoc first;				  // head of LRU cache
  -  private HitDoc last;				  // tail of LRU cache
  -  private int numDocs = 0;			  // number cached
  -  private int maxDocs = 200;			  // max to cache
  -
  -  Hits(Searcher s, Query q, Filter f) throws IOException {
  -    query = q;
  -    searcher = s;
  -    filter = f;
  -    getMoreDocs(50);				  // retrieve 100 initially
  -  }
  -
  -  // Tries to add new documents to hitDocs.
  -  // Ensures that the hit numbered <code>min</code> has been retrieved.
  -  private final void getMoreDocs(int min) throws IOException {
  -    if (hitDocs.size() > min)
  -      min = hitDocs.size();
  -
  -    int n = min * 2;				  // double # retrieved
  -    TopDocs topDocs = searcher.search(query, filter, n);
  -    length = topDocs.totalHits;
  -    ScoreDoc[] scoreDocs = topDocs.scoreDocs;
  -
  -    float scoreNorm = 1.0f;
  -    if (length > 0 && scoreDocs[0].score > 1.0f)
  -      scoreNorm = 1.0f / scoreDocs[0].score;
  -
  -    int end = scoreDocs.length < length ? scoreDocs.length : length;
  -    for (int i = hitDocs.size(); i < end; i++)
  -      hitDocs.addElement(new HitDoc(scoreDocs[i].score*scoreNorm,
  -				    scoreDocs[i].doc));
  -  }
  -
  -  /** Returns the total number of hits available in this set. */
  -  public final int length() {
  -    return length;
  -  }
  -
  -  /** Returns the nth document in this set.
  -    <p>Documents are cached, so that repeated requests for the same element may
  -    return the same Document object. */ 
  -  public final Document doc(int n) throws IOException {
  -    HitDoc hitDoc = hitDoc(n);
  -
  -    // Update LRU cache of documents
  -    remove(hitDoc);				  // remove from list, if there
  -    addToFront(hitDoc);				  // add to front of list
  -    if (numDocs > maxDocs) {			  // if cache is full
  -      HitDoc oldLast = last;
  -      remove(last);				  // flush last
  -      oldLast.doc = null;			  // let doc get gc'd
  -    }
  -
  -    if (hitDoc.doc == null)
  -      hitDoc.doc = searcher.doc(hitDoc.id);	  // cache miss: read document
  -      
  -    return hitDoc.doc;
  -  }
  -
  -  /** Returns the score for the nth document in this set. */ 
  -  public final float score(int n) throws IOException {
  -    return hitDoc(n).score;
  -  }
  -  
  - /** Returns the id for the nth document in this set. */ 
  -  public final int id(int n) throws IOException {
  -    return hitDoc(n).id;
  -  }
  -
  -
  -  private final HitDoc hitDoc(int n) throws IOException {
  -    if (n >= length)
  -      throw new IndexOutOfBoundsException("Not a valid hit number: " + n);
  -    if (n >= hitDocs.size())
  -      getMoreDocs(n);
  -
  -    return (HitDoc)hitDocs.elementAt(n);
  -  }
  -
  -  private final void addToFront(HitDoc hitDoc) {  // insert at front of cache
  -    if (first == null)
  -      last = hitDoc;
  -    else
  -      first.prev = hitDoc;
  -    
  -    hitDoc.next = first;
  -    first = hitDoc;
  -    hitDoc.prev = null;
  -
  -    numDocs++;
  -  }
  -
  -  private final void remove(HitDoc hitDoc) {	  // remove from cache
  -    if (hitDoc.doc == null)			  // it's not in the list
  -      return;					  // abort
  -
  -    if (hitDoc.next == null)
  -      last = hitDoc.prev;
  -    else
  -      hitDoc.next.prev = hitDoc.prev;
  -    
  -    if (hitDoc.prev == null)
  -      first = hitDoc.next;
  -    else
  -      hitDoc.prev.next = hitDoc.next;
  +    private Query query;
  +    private Searcher searcher;
  +    private Filter filter = null;
  +
  +    private int length;				  // the total number of hits
  +    private Vector hitDocs = new Vector();	  // cache of hits retrieved
  +
  +    private HitDoc first;				  // head of LRU cache
  +    private HitDoc last;				  // tail of LRU cache
  +    private int numDocs = 0;			  // number cached
  +    private int maxDocs = 200;			  // max to cache
  +
  +    Hits(Searcher s, Query q, Filter f) throws IOException {
  +        query = q;
  +        searcher = s;
  +        filter = f;
  +        getMoreDocs(50);				  // retrieve 100 initially
  +    }
  +
  +    // Tries to add new documents to hitDocs.
  +    // Ensures that the hit numbered <code>min</code> has been retrieved.
  +    private final void getMoreDocs(int min) throws IOException {
  +        if (hitDocs.size() > min) {
  +            min = hitDocs.size();
  +        }
  +
  +        int n = min * 2;				  // double # retrieved
  +        TopDocs topDocs = searcher.search(query, filter, n);
  +        length = topDocs.totalHits;
  +        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
  +
  +        float scoreNorm = 1.0f;
  +        if (length > 0 && scoreDocs[0].score > 1.0f) {
  +            scoreNorm = 1.0f / scoreDocs[0].score;
  +        }
  +
  +        int end = scoreDocs.length < length ? scoreDocs.length : length;
  +        for (int i = hitDocs.size(); i < end; i++) {
  +            hitDocs.addElement(new HitDoc(scoreDocs[i].score * scoreNorm,
  +                                          scoreDocs[i].doc));
  +        }
  +    }
  +
  +    /** Returns the total number of hits available in this set. */
  +    public final int length() {
  +        return length;
  +    }
  +
  +    /** Returns the nth document in this set.
  +     <p>Documents are cached, so that repeated requests for the same element may
  +     return the same Document object. */
  +    public final Document doc(int n) throws IOException {
  +        HitDoc hitDoc = hitDoc(n);
  +
  +        // Update LRU cache of documents
  +        remove(hitDoc);               // remove from list, if there
  +        addToFront(hitDoc);           // add to front of list
  +        if (numDocs > maxDocs) {      // if cache is full
  +            HitDoc oldLast = last;
  +            remove(last);             // flush last
  +            oldLast.doc = null;       // let doc get gc'd
  +        }
  +
  +        if (hitDoc.doc == null) {
  +            hitDoc.doc = searcher.doc(hitDoc.id);  // cache miss: read document
  +        }
  +
  +        return hitDoc.doc;
  +    }
  +
  +    /** Returns the score for the nth document in this set. */
  +    public final float score(int n) throws IOException {
  +        return hitDoc(n).score;
  +    }
  +
  +    /** Returns the id for the nth document in this set. */
  +    public final int id(int n) throws IOException {
  +        return hitDoc(n).id;
  +    }
  +
  +
  +    private final HitDoc hitDoc(int n) throws IOException {
  +        if (n >= length) {
  +            throw new IndexOutOfBoundsException("Not a valid hit number: " + n);
  +        }
  +
  +        if (n >= hitDocs.size()) {
  +            getMoreDocs(n);
  +        }
  +
  +        return (HitDoc) hitDocs.elementAt(n);
  +    }
  +
  +    private final void addToFront(HitDoc hitDoc) {  // insert at front of cache
  +        if (first == null) {
  +            last = hitDoc;
  +        } else {
  +            first.prev = hitDoc;
  +        }
  +
  +        hitDoc.next = first;
  +        first = hitDoc;
  +        hitDoc.prev = null;
   
  -    numDocs--;
  -  }
  +        numDocs++;
  +    }
  +
  +    private final void remove(HitDoc hitDoc) {	  // remove from cache
  +        if (hitDoc.doc == null) {     // it's not in the list
  +            return;					  // abort
  +        }
  +
  +        if (hitDoc.next == null) {
  +            last = hitDoc.prev;
  +        } else {
  +            hitDoc.next.prev = hitDoc.prev;
  +        }
  +
  +        if (hitDoc.prev == null) {
  +            first = hitDoc.next;
  +        } else {
  +            hitDoc.prev.next = hitDoc.next;
  +        }
  +
  +        numDocs--;
  +    }
   }
   
   final class HitDoc {
  -  float score;
  -  int id;
  -  Document doc = null;
  -
  -  HitDoc next;					  // in doubly-linked cache
  -  HitDoc prev;					  // in doubly-linked cache
  -
  -  HitDoc(float s, int i) {
  -    score = s;
  -    id = i;
  -  }
  +    float score;
  +    int id;
  +    Document doc = null;
  +
  +    HitDoc next;  // in doubly-linked cache
  +    HitDoc prev;  // in doubly-linked cache
  +
  +    HitDoc(float s, int i) {
  +        score = s;
  +        id = i;
  +    }
   }
  
  
  
  1.2       +26 -26    jakarta-lucene/src/java/org/apache/lucene/search/QueryFilter.java
  
  Index: QueryFilter.java
  ===================================================================
  RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/QueryFilter.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- QueryFilter.java	5 Aug 2002 18:05:56 -0000	1.1
  +++ QueryFilter.java	13 Sep 2003 10:46:25 -0000	1.2
  @@ -70,37 +70,37 @@
    * once per day.
    */
   public class QueryFilter extends Filter {
  -  private Query query;
  -  private transient WeakHashMap cache = new WeakHashMap();
  +    private Query query;
  +    private transient WeakHashMap cache = new WeakHashMap();
   
  -  /** Constructs a filter which only matches documents matching
  -   * <code>query</code>.
  -   */
  -  public QueryFilter(Query query) {
  -    this.query = query;
  -  }
  -
  -  public BitSet bits(IndexReader reader) throws IOException {
  -
  -    synchronized (cache) {                        // check cache
  -      BitSet cached = (BitSet)cache.get(reader);
  -      if (cached != null)
  -        return cached;
  +    /** Constructs a filter which only matches documents matching
  +     * <code>query</code>.
  +     */
  +    public QueryFilter(Query query) {
  +        this.query = query;
       }
   
  -    final BitSet bits = new BitSet(reader.maxDoc());
  +    public BitSet bits(IndexReader reader) throws IOException {
   
  -    new IndexSearcher(reader).search(query, new HitCollector() {
  -	public final void collect(int doc, float score) {
  -          bits.set(doc);                          // set bit for hit
  +        synchronized (cache) {  // check cache
  +            BitSet cached = (BitSet) cache.get(reader);
  +            if (cached != null)
  +                return cached;
           }
  -      });
  -                                     
   
  -    synchronized (cache) {                        // update cache
  -      cache.put(reader, bits);
  -    }
  +        final BitSet bits = new BitSet(reader.maxDoc());
  +
  +        new IndexSearcher(reader).search(query, new HitCollector() {
  +            public final void collect(int doc, float score) {
  +                bits.set(doc);  // set bit for hit
  +            }
  +        });
  +
   
  -    return bits;
  -  }
  +        synchronized (cache) {  // update cache
  +            cache.put(reader, bits);
  +        }
  +
  +        return bits;
  +    }
   }
  
  
  

Mime
View raw message