internal static SnQueryPredicate OptimizeBooleans(SnQueryPredicate predicate) { var v = new OptimizeBooleansVisitor(); var optimizedPredicate = v.Visit(predicate); if (!(optimizedPredicate is LogicalPredicate logicalPredicate)) { return(optimizedPredicate); } var clauses = logicalPredicate.Clauses; if (clauses.Count != 1) { return(logicalPredicate); } if (clauses[0].Occur != Occurence.MustNot) { return(logicalPredicate); } logicalPredicate.Clauses.Add(new LogicalClause(SnQuery.FullSetPredicate, Occurence.Must)); return(logicalPredicate); }
internal static Query OptimizeBooleans(Query q) { var v = new OptimizeBooleansVisitor(); var q1 = v.Visit(q); var bq = q1 as BooleanQuery; if (bq == null) { return(q1); } var clauses = bq.GetClauses(); if (clauses.Length != 1) { return(bq); } if (clauses[0].GetOccur() != BooleanClause.Occur.MUST_NOT) { return(bq); } bq.Add(LucQuery.FullSetQuery, BooleanClause.Occur.MUST); return(bq); }