[
http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-610?pag...
]
Hardy Ferentschik commented on HSEARCH-610:
-------------------------------------------
The problem is that the {{DocIdSetIterator}} returned by {{SortedVIntList}} behaves
differently when {{advance(int target)}} compared to the iterators returned by
{{DocIdBitSet}} and {{OpenBitSet}}. Lets take the example from test test. Assume the
following doc id are in the set 0, 5, 6 and 10. We get the {{DocIdSetIterator}} from the
{{DocIdBitSet}} and we call {{next()}} until we point to the third element
({{iterator.docID() == 6}}. Now we call {{iterator.advance(6)}}.
The algorithm in {{AndDocIdSet}} assumes that the advance call will return 6, basically
not moving to another element. This is also how {{DocIdBitSet}} and {{OpenBitSet}} behave.
{{DocIdSetIterator}}, however, returns 10.
The question is who is right. The {{DocIdSetIterator.advance}} javadoc says:
{quote}
Advances to the first beyond the current whose document number is greater than or equal to
_target_
{quote}
It also shows some pseudo code:
{code}
int advance(int target) {
int doc;
while ((doc = nextDoc()) < target) {
}
return doc;
}
{code}
Reading this documentation I would think {{SortedVIntList}} behaves correctly, but I think
{{OpenBitSet}} is the more commonly used. I am surprised that no one has noticed this
before.
On our {{AndDocIdSet}} side we can actually cater for this problem by comparing
{{iterator.docID() == targetPosition}} before we call {{advance}}. If they match we
don't have to call advance at all, because the iterator is already at the right
position.
Need to follow up with the Lucene guys as well.
AndDocIdSet makeDocIdSetOnAgreedBits() returns wrong values
-----------------------------------------------------------
Key: HSEARCH-610
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-610
Project: Hibernate Search
Issue Type: Bug
Components: engine
Affects Versions: 3.2.1, 3.3.0.Beta1
Reporter: Christian Mader
Assignee: Hardy Ferentschik
Fix For: 3.3.0.CR1
Attachments: AndDocIdSetTest.java
Depending on the DocIdSets list, AndDocIdSet fails to compute correct values in
makeDocIdSetOnAgreedBits(). Please see the attached test cases, test_middle() fails and in
my opinion it shouldn't.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira