public void Update <X>(X matchDocument, Action <IModifierExpression <T> > action, bool updateMultiple, bool upsert) { var modifierExpression = new ModifierExpression <T>(); action(modifierExpression); if (matchDocument is ObjectId) { Update(new { _id = matchDocument }, modifierExpression.Expression, updateMultiple, upsert); } else { Update(matchDocument, modifierExpression.Expression, updateMultiple, upsert); } }
private static LuceneQuery GetLuceneQuery(this ModifierExpression expression, string fieldName, Analyzer analyzer) { // treat the expression as a literal when allowing shingling LuceneQuery query; if (expression.Flags.IsFlagSet(ModificationFlags.AllowShingling)) { var parser = new QueryParser(LuceneVersion.LUCENE_29, fieldName, analyzer); parser.setDefaultOperator(QueryParser.Operator.AND); //add quotes to the expression to ensure the whitespaceanalyzer doesn't break into multiple tokens var expressionValue = expression.Expression is LiteralTerm && !expression.Expression.GetUserExpression().Contains(LiteralTerm.Quote) ? LiteralTerm.Quote + expression.Expression.GetUserExpression() + LiteralTerm.Quote : expression.Expression.GetUserExpression(); query = parser.parse(expressionValue); if (query is MultiPhraseQuery) { // by default a MultiPhraseQuery only matches where the term order matches ("chief executive" does not match "executive chief") // add slop to match on non-contiguous terms where the order doesn't match ((MultiPhraseQuery)query).setSlop(100); } // QueryParser may generate empty BooleanQuery when confused. var boolQuery = query as BooleanQuery; if (boolQuery != null && boolQuery.clauses().size() == 0) { query = null; } } else { query = expression.Expression.GetLuceneQuery(fieldName, analyzer); } return(query); }
private static LuceneQuery GetLuceneBoostQuery(this ModifierExpression expression, string fieldName, Analyzer analyzer) { return(expression.Expression.GetLuceneBoostQuery(fieldName, analyzer)); }