cutting     2004/10/01 09:10:45

  Modified:    .        Tag: lucene_1_4_2_dev CHANGES.txt
               src/java/org/apache/lucene/search Tag: lucene_1_4_2_dev
                        IndexSearcher.java
  Log:
  In 1.4.2 branch, optimize IndexSearcher to not allocate a ScoreDoc for every 
non-zero hit.
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.96.2.4  +5 -1      jakarta-lucene/CHANGES.txt
  
  Index: CHANGES.txt
  ===================================================================
  RCS file: /home/cvs/jakarta-lucene/CHANGES.txt,v
  retrieving revision 1.96.2.3
  retrieving revision 1.96.2.4
  diff -u -r1.96.2.3 -r1.96.2.4
  --- CHANGES.txt       1 Oct 2004 10:01:48 -0000       1.96.2.3
  +++ CHANGES.txt       1 Oct 2004 16:10:45 -0000       1.96.2.4
  @@ -28,6 +28,10 @@
       to specify a minimum similarity for FuzzyQuery has been added.
       (Christoph Goller)
   
  + 6. IndexSearcher optimization: a new ScoreDoc is no longer allocated
  +    for every non-zero-scoring hit.  This makes 'OR' queries that
  +    contain common terms substantially faster.  (cutting)
  +
   
   1.4.1
   
  
  
  
  No                   revision
  No                   revision
  1.19.2.1  +5 -1      
jakarta-lucene/src/java/org/apache/lucene/search/IndexSearcher.java
  
  Index: IndexSearcher.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/IndexSearcher.java,v
  retrieving revision 1.19
  retrieving revision 1.19.2.1
  diff -u -r1.19 -r1.19.2.1
  --- IndexSearcher.java        19 May 2004 23:05:27 -0000      1.19
  +++ IndexSearcher.java        1 Oct 2004 16:10:45 -0000       1.19.2.1
  @@ -90,11 +90,15 @@
       final HitQueue hq = new HitQueue(nDocs);
       final int[] totalHits = new int[1];
       scorer.score(new HitCollector() {
  +        private float minScore = 0.0f;
        public final void collect(int doc, float score) {
          if (score > 0.0f &&                     // ignore zeroed buckets
              (bits==null || bits.get(doc))) {    // skip docs not in bits
            totalHits[0]++;
  -            hq.insert(new ScoreDoc(doc, score));
  +            if (hq.size() < nDocs || score >= minScore) {
  +              hq.insert(new ScoreDoc(doc, score));
  +              minScore = ((ScoreDoc)hq.top()).score; // maintain minScore
  +            }
          }
        }
         });
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to