Daniel found a bug today and therefore I reviewed skipTo once again.
Thanks!
Here are some further things to consider:
*) MultiTermDocs.skipTo could easily be optimized too, couldn\x{00B4}t it?
Yes, I think so. I think I forgot to look at that .
*) SegmentTermDocs: skipStream never closed
You're right, it should be.
*) SegmentTermPositions: seek(Terminfo): probably should always make proxCount = 0;
Right again.
I can't think why I ever did it that way... It was done as a fix for:
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6292
http://cvs.apache.org/viewcvs.cgi/jakarta-lucene/src/java/org/apache/lucene/index/SegmentTermPositions.java?r1=1.2&r2=1.3
*) I think due to your last changes SegmentTermDocs makes one skip less than is required? However, I havenīt tested this.
while (target > skipDoc && skipCount < numSkips) { lastSkipDoc = skipDoc; lastFreqPointer = freqPointer; lastProxPointer = proxPointer;
if (skipDoc != 0 && skipDoc >= doc) numSkipped += skipInterval;
skipDoc += skipStream.readVInt(); freqPointer += skipStream.readVInt(); proxPointer += skipStream.readVInt();
skipCount++; }
// if we found something to skip, then skip it if (lastFreqPointer > freqStream.getFilePointer()) { freqStream.seek(lastFreqPointer); skipProx(lastProxPointer);
doc = lastSkipDoc; count += numSkipped; }
Consider exit of while because of skipCount == numSkips. Then doc becomes lastSkipDoc not skipDoc!
That sounds reasonable. I'm sure having trouble getting this method right! So do you think this loop should be changed to something like:
while (target > skipDoc) { lastSkipDoc = skipDoc; ...
if (skipCount > numSkips) break;
skipDoc += skipStream.readVInt(); ... }
That looks better to me... What do you think?
*) PhraseScorer.skipTo jumps one doc too far because of call to sort() which calls next for each PhrasePosition. Here is Daniels test that demonstrates this: [ ... ]
Instead of 1 hit, 0 hits are found with 1.4rc2, while 1.3 finds the hit. I
committed the necessary change to PhraseScorer already and it fixes the problem.
Thanks! If you have a chance, please add this as a unit test too.
Unfortunately, I havenīt found the time to restructure the IndexReaders so far.
Thanks again for all your work. You're helping to make Lucene much more reliable!
Cheers,
Doug
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]