Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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());
        }