Looking at this I feel we should have 2 filters. One for inclusion and the other for exclusion. In other words instead of LuceneQuery.filter let's have LuceneQuery.include and LuceneQuery.exclude