private static QueryBuilder CreateBuilderFromExpression(string expression, out ClauseOccurrence occurrence) { // FirstName# = 'Tim // +(LastName+ = 'James', Type+ = '0') occurrence = ClauseOccurrence.Default; if (string.IsNullOrEmpty(expression)) return new QueryBuilder(); QueryBuilder builder = new QueryBuilder(); if (expression.StartsWith("+")) { occurrence = ClauseOccurrence.MustOccur; expression = expression.Substring(1); } else if (expression.StartsWith("#")) { occurrence = ClauseOccurrence.ShouldOccur; expression = expression.Substring(1); } else if (expression.StartsWith("-")) { occurrence = ClauseOccurrence.MustNotOccur; expression = expression.Substring(1); } if (expression.StartsWith("(")) expression = expression.Substring(1); if (expression.EndsWith(")")) expression = expression.Substring(0, expression.Length - 1); string[] parts = expression.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (var part in parts) { string searchTerm; string boolOperator; string searchValue; ClauseOccurrence co = ClauseOccurrence.Default; string[] words = part.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (words.Length < 3) throw new ArgumentNullException("expression", "Malformed expression"); searchTerm = words[0]; boolOperator = words[1]; searchValue = string.Join(" ", words, 2, words.Length - 2).Replace("\'", ""); if (searchTerm.EndsWith("+")) { co = ClauseOccurrence.MustOccur; searchTerm = searchTerm.Substring(0, searchTerm.Length - 1); } else if (searchTerm.EndsWith("#")) { co = ClauseOccurrence.ShouldOccur; searchTerm = searchTerm.Substring(0, searchTerm.Length - 1); } else if (searchTerm.EndsWith("-")) { co = ClauseOccurrence.MustNotOccur; searchTerm = searchTerm.Substring(0, searchTerm.Length - 1); } if (boolOperator.Equals("=")) { builder.AddBooleanClause(new SearchTerm(searchTerm, searchValue, StaticValues.DefaultBoost, true), co); } else if (boolOperator.Equals(">")) { throw new NotSupportedException("Boolean operator not yet supported"); } else if (boolOperator.Equals(">=")) { throw new NotSupportedException("Boolean operator not yet supported"); } else if (boolOperator.Equals("<")) { throw new NotSupportedException("Boolean operator not yet supported"); } else if (boolOperator.Equals("<=")) { throw new NotSupportedException("Boolean operator not yet supported"); } else if (boolOperator.Equals("!=") || boolOperator.Equals("<>")) { if (co == ClauseOccurrence.MustNotOccur) co = ClauseOccurrence.MustOccur; else if (co == ClauseOccurrence.MustOccur) co = ClauseOccurrence.MustNotOccur; builder.AddBooleanClause(new SearchTerm(searchTerm, searchValue, StaticValues.DefaultBoost, true), co); } else { throw new ArgumentException("Malformed boolean operator in expression"); } } return builder; }
private static QueryBuilder CreateBuilderFromExpression(string expression, out ClauseOccurrence occurrence) { // FirstName# = 'Tim // +(LastName+ = 'James', Type+ = '0') occurrence = ClauseOccurrence.Default; if (string.IsNullOrEmpty(expression)) { return(new QueryBuilder()); } QueryBuilder builder = new QueryBuilder(); if (expression.StartsWith("+")) { occurrence = ClauseOccurrence.MustOccur; expression = expression.Substring(1); } else if (expression.StartsWith("#")) { occurrence = ClauseOccurrence.ShouldOccur; expression = expression.Substring(1); } else if (expression.StartsWith("-")) { occurrence = ClauseOccurrence.MustNotOccur; expression = expression.Substring(1); } if (expression.StartsWith("(")) { expression = expression.Substring(1); } if (expression.EndsWith(")")) { expression = expression.Substring(0, expression.Length - 1); } string[] parts = expression.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (var part in parts) { string searchTerm; string boolOperator; string searchValue; ClauseOccurrence co = ClauseOccurrence.Default; string[] words = part.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (words.Length < 3) { throw new ArgumentNullException("expression", "Malformed expression"); } searchTerm = words[0]; boolOperator = words[1]; searchValue = string.Join(" ", words, 2, words.Length - 2).Replace("\'", ""); if (searchTerm.EndsWith("+")) { co = ClauseOccurrence.MustOccur; searchTerm = searchTerm.Substring(0, searchTerm.Length - 1); } else if (searchTerm.EndsWith("#")) { co = ClauseOccurrence.ShouldOccur; searchTerm = searchTerm.Substring(0, searchTerm.Length - 1); } else if (searchTerm.EndsWith("-")) { co = ClauseOccurrence.MustNotOccur; searchTerm = searchTerm.Substring(0, searchTerm.Length - 1); } if (boolOperator.Equals("=")) { builder.AddBooleanClause(new SearchTerm(searchTerm, searchValue, StaticValues.DefaultBoost, true), co); } else if (boolOperator.Equals(">")) { throw new NotSupportedException("Boolean operator not yet supported"); } else if (boolOperator.Equals(">=")) { throw new NotSupportedException("Boolean operator not yet supported"); } else if (boolOperator.Equals("<")) { throw new NotSupportedException("Boolean operator not yet supported"); } else if (boolOperator.Equals("<=")) { throw new NotSupportedException("Boolean operator not yet supported"); } else if (boolOperator.Equals("!=") || boolOperator.Equals("<>")) { if (co == ClauseOccurrence.MustNotOccur) { co = ClauseOccurrence.MustOccur; } else if (co == ClauseOccurrence.MustOccur) { co = ClauseOccurrence.MustNotOccur; } builder.AddBooleanClause(new SearchTerm(searchTerm, searchValue, StaticValues.DefaultBoost, true), co); } else { throw new ArgumentException("Malformed boolean operator in expression"); } } return(builder); }