private static LuceneQuery GetLuceneQuery(this LiteralTerm expression, string fieldName, Analyzer analyzer) { // Parse query string. var parser = new QueryParser(LuceneVersion.LUCENE_29, fieldName, analyzer); LuceneQuery query; try { query = parser.parse(expression.Value); } catch (ParseException) { query = parser.parse(QueryParser.escape(expression.Value)); } // QueryParser may generate empty BooleanQuery when confused. var boolQuery = query as BooleanQuery; if (boolQuery != null && boolQuery.clauses().size() == 0) { return(null); } //var query = new PayloadTermQuery(new Term(fieldName, expression.Value), new MaxPayloadFunction()); return(query); }
private static LuceneQuery GetLuceneBoostQuery(this LiteralTerm expression, string fieldName, Analyzer analyzer) { // Escape QueryParser special characters. var queryString = QueryParser.escape(expression.Value); if (expression.GetRawExpression()[0] == '\"') { queryString = "\"" + queryString + "\""; } // Parse query string. var parser = new QueryParser(LuceneVersion.LUCENE_29, fieldName, analyzer); var parsedQuery = parser.parse(queryString); if (parsedQuery is TermQuery) { return(parsedQuery); } var multiPhraseQuery = parsedQuery as MultiPhraseQuery; if (multiPhraseQuery != null) { multiPhraseQuery.setSlop(100); return(multiPhraseQuery); } var phraseQuery = parsedQuery as PhraseQuery; if (phraseQuery != null) { var query = new BooleanQuery(); foreach (var term in phraseQuery.getTerms()) { query.add(new TermQuery(term), BooleanClause.Occur.SHOULD); } return(query); } return(null); }
public void TestCombine() { // 0 expressions. var combined = Expression.Combine(BinaryOperator.Or); Assert.IsNull(combined); combined = Expression.Combine(BinaryOperator.Or, null); Assert.IsNull(combined); // 1 expression. IExpression one = new LiteralTerm("something"); combined = Expression.Combine(BinaryOperator.Or, one); Assert.AreSame(one, combined); // Multiple expressions. combined = Expression.Combine(BinaryOperator.Or, one, one); Assert.AreEqual(typeof(CommutativeExpression), combined.GetType()); Assert.AreEqual("something OR something", combined.GetUserExpression()); combined = Expression.Combine(BinaryOperator.And, Expression.Parse("one or two"), Expression.Parse("three four five"), Expression.Parse("six or seven or eight")); Assert.AreEqual("(one OR two) three four five (six OR seven OR eight)", combined.GetUserExpression()); // Modifiers. combined = Expression.Combine(BinaryOperator.Or, Expression.Parse("no synonyms", ModificationFlags.AllowShingling)); Assert.AreEqual(typeof(ModifierExpression), combined.GetType()); combined = Expression.Combine(BinaryOperator.Or, Expression.Parse("no"), Expression.Parse("synonyms")); Assert.AreEqual(typeof(CommutativeExpression), combined.GetType()); Assert.AreEqual("no OR synonyms", combined.GetUserExpression()); combined = Expression.Combine(BinaryOperator.And, Expression.Parse("\"no cache\""), Expression.Parse("\"or synonyms\"", ModificationFlags.AllowShingling)); Assert.AreEqual(typeof(CommutativeExpression), combined.GetType()); Assert.AreEqual("\"no cache\" \"or synonyms\"", combined.GetUserExpression()); combined = Expression.Combine(BinaryOperator.And, Expression.Parse("\"no cache\""), Expression.Parse("\"or synonyms\""), Expression.Parse("\"definitely no synonyms\"")); Assert.AreEqual(typeof(CommutativeExpression), combined.GetType()); Assert.AreEqual("\"no cache\" \"or synonyms\" \"definitely no synonyms\"", combined.GetUserExpression()); }