Fixed deletion bug in virtual collections - left two known bugs
Change-Id: Ib975976009ddfa74e9a9f3f07049bdad87a0486f
diff --git a/src/main/java/de/ids_mannheim/korap/KrillCollectionNew.java b/src/main/java/de/ids_mannheim/korap/KrillCollectionNew.java
index 894a747..f94b407 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillCollectionNew.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillCollectionNew.java
@@ -7,11 +7,13 @@
import de.ids_mannheim.korap.response.Notifications;
import org.apache.lucene.search.*;
+import org.apache.lucene.index.AtomicReader;
import org.apache.lucene.index.AtomicReaderContext;
import org.apache.lucene.util.FixedBitSet;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.OpenBitSet;
import org.apache.lucene.util.DocIdBitSet;
+import org.apache.lucene.search.BitsFilteredDocIdSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -58,6 +60,7 @@
return filter.toString();
};
+ /*
public FixedBitSet bits (AtomicReaderContext atomic) throws IOException {
int maxDoc = atomic.reader().maxDoc();
@@ -68,7 +71,7 @@
return null;
// Init vector
- DocIdSet docids = filter.getDocIdSet(atomic, atomic.reader().getLiveDocs());
+ DocIdSet docids = filter.getDocIdSet(atomic, null);
DocIdSetIterator filterIter = (docids == null) ? null : docids.iterator();
if (filterIter == null) {
@@ -87,17 +90,60 @@
};
// Remove deleted docs
- /*
- System.err.println(atomic.reader().getClass());
- FixedBitSet livedocs = (FixedBitSet) atomic.reader().getLiveDocs();
- if (livedocs != null) {
- bitset.and(livedocs);
- };
- */
+ return (FixedBitSet) BitsFilteredDocIdSet.wrap(
+ (DocIdSet) bitset,
+ (Bits) atomic.reader().getLiveDocs()
+ ).iterator();
+ };
+ */
+
+ public FixedBitSet bits (AtomicReaderContext atomic) throws IOException {
+ AtomicReader r = atomic.reader();
+ FixedBitSet bitset = new FixedBitSet(r.maxDoc());
+ DocIdSet docids = this.getDocIdSet(atomic, (Bits) r.getLiveDocs());
+ if (docids == null)
+ return null;
+ bitset.or(docids.iterator());
return bitset;
};
+
+ public DocIdSet getDocIdSet (AtomicReaderContext atomic, Bits acceptDocs) throws IOException {
+
+ int maxDoc = atomic.reader().maxDoc();
+ FixedBitSet bitset = new FixedBitSet(maxDoc);
+
+ Filter filter;
+ if (this.cb == null || (filter = this.cb.toFilter()) == null)
+ return null;
+
+ // Init vector
+ DocIdSet docids = filter.getDocIdSet(atomic, null);
+ DocIdSetIterator filterIter = (docids == null) ? null : docids.iterator();
+
+ if (filterIter == null) {
+ if (!this.cb.isNegative())
+ return null;
+
+ bitset.set(0, maxDoc);
+ }
+ else {
+ // Or bit set
+ bitset.or(filterIter);
+
+ // Revert for negation
+ if (this.cb.isNegative())
+ bitset.flip(0, maxDoc);
+ };
+
+ // Remove deleted docs
+ return (DocIdSet) BitsFilteredDocIdSet.wrap(
+ (DocIdSet) bitset,
+ acceptDocs
+ );
+ };
+
/**
* Search for the number of occurrences of different types,
* e.g. <i>documents</i>, <i>sentences</i> etc. in the virtual
diff --git a/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilderNew.java b/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilderNew.java
index 8b2ff4d..5bb9968 100644
--- a/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilderNew.java
+++ b/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilderNew.java
@@ -73,7 +73,8 @@
return new CollectionBuilderRange(field, begin, end);
};
- return new CollectionBuilderTerm(field, dateDF.toString());
+
+ return new CollectionBuilderRange(field, dateDF.floor(), dateDF.ceil());
};