You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Shai Erera (JIRA)" <ji...@apache.org> on 2014/02/09 18:47:19 UTC

[jira] [Commented] (LUCENE-5441) Decouple DocIdSet from OpenBitSet and FixedBitSet

    [ https://issues.apache.org/jira/browse/LUCENE-5441?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13895937#comment-13895937 ] 

Shai Erera commented on LUCENE-5441:
------------------------------------

+1 to make the separation, I was thinking exactly that while working on LUCENE-5440. I wish also that DocIdSet (or some other interface) allowed you to do set operations, e.g. like Solr's DocSet. This then makes optimization-checking {{if (bits instanceof FixedBitSet)}} moot, you just call docs.intersect(otherDocIdSet) and let the implementation decide if it can optimize or not. It should then be pretty easy to implement a DocSet/DocIdSet backed by a FixedBitSet?

> Decouple DocIdSet from OpenBitSet and FixedBitSet
> -------------------------------------------------
>
>                 Key: LUCENE-5441
>                 URL: https://issues.apache.org/jira/browse/LUCENE-5441
>             Project: Lucene - Core
>          Issue Type: Task
>          Components: core/other
>    Affects Versions: 4.6.1
>            Reporter: Uwe Schindler
>             Fix For: 5.0
>
>
> Back from the times of Lucene 2.4 when DocIdSet was introduced, we somehow kept the stupid "filters can return a BitSet directly" in the code. So lots of Filters return just FixedBitSet, because this is the superclass (ideally interface) of FixedBitSet.
> We should decouple that and *not* implement that abstract interface directly by FixedBitSet. This leads to bugs e.g. in BlockJoin, because it used Filters in a wrong way, just because it was always returning Bitsets. But some filters actually don't do this.
> I propose to let FixedBitSet (only in trunk, because that a major backwards break) just have a method {{asDocIdSet()}}, that returns an anonymous instance of DocIdSet: bits() returns the FixedBitSet itsself, iterator() returns a new Iterator (like it always did) and the cost/cacheable methods return static values.
> Filters in trunk would need to be changed like that:
> {code:java}
> FixedBitSet bits = ....
> ...
> return bits;
> {code}
> gets:
> {code:java}
> FixedBitSet bits = ....
> ...
> return bits.asDocIdSet();
> {code}
> As this methods returns an anonymous DocIdSet, calling code can no longer rely or check if the implementation behind is a FixedBitSet.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org