public EventStackFilter() { var stackOnlyFields = _stackOnlyFields.Union(_stackOnlySpecialFields); var stackFields = stackOnlyFields.Union(_stackAndEventFields); _parser = new LuceneQueryParser(); _eventQueryVisitor = new ChainedQueryVisitor(); _eventQueryVisitor.AddVisitor(new RemoveFieldsQueryVisitor(stackOnlyFields)); _eventQueryVisitor.AddVisitor(new CleanupQueryVisitor()); _stackQueryVisitor = new ChainedQueryVisitor(); // remove everything not in the stack fields list _stackQueryVisitor.AddVisitor(new RemoveFieldsQueryVisitor(f => !stackFields.Contains(f))); _stackQueryVisitor.AddVisitor(new CleanupQueryVisitor()); // handles stack special fields and changing event field names to their stack equivalent _stackQueryVisitor.AddVisitor(new StackFilterQueryVisitor()); _stackQueryVisitor.AddVisitor(new CleanupQueryVisitor()); _invertedStackQueryVisitor = new ChainedQueryVisitor(); // remove everything not in the stack fields list _invertedStackQueryVisitor.AddVisitor(new RemoveFieldsQueryVisitor(f => !stackFields.Contains(f))); _invertedStackQueryVisitor.AddVisitor(new CleanupQueryVisitor()); // handles stack special fields and changing event field names to their stack equivalent _invertedStackQueryVisitor.AddVisitor(new StackFilterQueryVisitor()); _invertedStackQueryVisitor.AddVisitor(new CleanupQueryVisitor()); // inverts the filter _invertedStackQueryVisitor.AddVisitor(new InvertQueryVisitor(_stackNonInvertedFields)); _invertedStackQueryVisitor.AddVisitor(new CleanupQueryVisitor()); }