Ok, I've found the problem. The migration guide of lucene helped me:
http://lucene.apache.org/core/4_10_3/MIGRATE.html
It writes: "Deleted docs are no longer implicitly filtered from docs/positions enums. Instead, you pass a Bits skipDocs (set bits are skipped) when obtaining the enums. Also, you can now ask a reader for its deleted docs."
So I've decided to apply a filter to exclude deleted documents.
Code:
public class DeletedDocFilter extends Filter {
@Override
public DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) throws IOException {
OpenBitSet obs = new OpenBitSet(context.reader().maxDoc());
Bits liveDocs = MultiFields.getLiveDocs(context.reader());
for (int i = 0; i < context.reader().maxDoc(); i++) {
if (liveDocs != null && !liveDocs.get(i)) {
// document deleted
}
else
obs.set(i);
}
return obs;
}
}
Code:
...
CachingWrapperFilter deletedDocsFilter = new CachingWrapperFilter(new DeletedDocFilter());
FilteredQuery filteredQuery = new FilteredQuery(this.myLuceneQuery, deletedDocsFilter);
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(filteredQuery, filteredClasses);
...