示例#1
0
        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);
            }
        }
示例#2
0
        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);
        }
示例#3
0
 private static LuceneQuery GetLuceneBoostQuery(this ModifierExpression expression, string fieldName, Analyzer analyzer)
 {
     return(expression.Expression.GetLuceneBoostQuery(fieldName, analyzer));
 }