コード例 #1
0
        public string Visit_WithValidRangeQuery_ReturnsValidResponse()
        {
            var rangeQuery = new LuceneRangeQuery
            {
                LuceneQuery =
                    new Lucene.Net.Search.TermRangeQuery(
                        "days",
                        "2",
                        "6",
                        true,
                        true),
            };

            var luceneVisitor = new LuceneVisitor();

            rangeQuery.Accept(luceneVisitor);

            var es = rangeQuery.ESQuery;

            Assert.NotNull(es);

            var visitor = VisitorTestsUtils.CreateAndVisitRootVisitor("days", "long");

            visitor.Visit((RangeClause)es);

            return(((RangeClause)es).KustoQL);
        }
コード例 #2
0
        public string Visit_WithValidBoolQuery_ReturnsSuccess()
        {
            var luceneNetBoolQuery = new Lucene.Net.Search.BooleanQuery();

            luceneNetBoolQuery.Clauses.Add(
                new Lucene.Net.Search.BooleanClause(
                    new Lucene.Net.Search.WildcardQuery(
                        new Lucene.Net.Index.Term("*", "Lo*d?n")),
                    Lucene.Net.Search.Occur.MUST_NOT));

            var boolQuery = new LuceneBoolQuery
            {
                LuceneQuery = luceneNetBoolQuery,
            };

            var luceneVisitor = new LuceneVisitor();

            luceneVisitor.Visit(boolQuery);

            var es = boolQuery.ESQuery;

            Assert.NotNull(es);

            var visitor = new ElasticSearchDSLVisitor(SchemaRetrieverMock.CreateMockSchemaRetriever());

            visitor.Visit((BoolQuery)es);

            return(((BoolQuery)es).KustoQL);
        }
コード例 #3
0
        public string Visit_WithValidTermPhraseQuery_ReturnsValidReponse()
        {
            var query = new Lucene.Net.Search.PhraseQuery();

            query.Add(new Lucene.Net.Index.Term("City", "TelAviv"));

            var phraseQuery = new LucenePhraseQuery
            {
                LuceneQuery = query,
            };

            var luceneVisitor = new LuceneVisitor();

            phraseQuery.Accept(luceneVisitor);

            var es = phraseQuery.ESQuery;

            Assert.NotNull(es);

            var visitor = new ElasticSearchDSLVisitor(SchemaRetrieverMock.CreateMockSchemaRetriever());

            visitor.Visit((QueryStringClause)es);

            return(((QueryStringClause)es).KustoQL);
        }
コード例 #4
0
        public string Visit_WithValidRangeQuery_ReturnsValidResponse()
        {
            var rangeQuery = new LuceneRangeQuery
            {
                LuceneQuery =
                    new Lucene.Net.Search.TermRangeQuery(
                        "days",
                        "2",
                        "6",
                        true,
                        true),
            };

            var luceneVisitor = new LuceneVisitor();

            rangeQuery.Accept(luceneVisitor);

            var es = rangeQuery.ESQuery;

            Assert.NotNull(es);

            var visitor = new ElasticSearchDSLVisitor(SchemaRetrieverMock.CreateMockSchemaRetriever());

            visitor.Visit((RangeClause)es);

            return(((RangeClause)es).KustoQL);
        }
コード例 #5
0
        public string Visit_WithValidTermPhraseQuery_ReturnsValidReponse()
        {
            var query = new Lucene.Net.Search.PhraseQuery();

            query.Add(new Lucene.Net.Index.Term("City", "TelAviv"));

            var phraseQuery = new LucenePhraseQuery
            {
                LuceneQuery = query,
            };

            var luceneVisitor = new LuceneVisitor();

            phraseQuery.Accept(luceneVisitor);

            var es = phraseQuery.ESQuery;

            Assert.NotNull(es);

            var visitor = VisitorTestsUtils.CreateAndVisitRootVisitor();

            visitor.Visit((QueryStringClause)es);

            return(((QueryStringClause)es).KustoQL);
        }
コード例 #6
0
        public void Visit_WithNullBoolQuery_ThrowsException()
        {
            var visitor = new LuceneVisitor();

            Assert.That(
                () => visitor.Visit((LuceneBoolQuery)null),
                Throws.TypeOf <ArgumentNullException>());
        }
コード例 #7
0
        public void Visit_WithInvalidBoolQuery_ThrowsException()
        {
            var boolQuery = new LuceneBoolQuery
            {
                LuceneQuery = null,
            };
            var visitor = new LuceneVisitor();

            Assert.That(
                () => visitor.Visit(boolQuery),
                Throws.TypeOf <IllegalClauseException>());
        }
コード例 #8
0
        public string Visit_WithValidWildcardQuery_ReturnsValidReponse()
        {
            var prefixQuery = new LucenePrefixQuery
            {
                LuceneQuery =
                    new Lucene.Net.Search.PrefixQuery(
                        new Lucene.Net.Index.Term("*", "Kfar-Sa*")),
            };

            var luceneVisitor = new LuceneVisitor();

            luceneVisitor.Visit(prefixQuery);

            var es = prefixQuery.ESQuery;

            Assert.NotNull(es);

            var visitor = new ElasticSearchDSLVisitor(SchemaRetrieverMock.CreateMockSchemaRetriever());

            visitor.Visit((QueryStringClause)es);

            return(((QueryStringClause)es).KustoQL);
        }
コード例 #9
0
        public string Visit_WithValidEscapedWildcardQuery_ReturnsValidResponse()
        {
            var wildcardQuery = new LuceneWildcardQuery
            {
                LuceneQuery =
                    new Lucene.Net.Search.WildcardQuery(
                        new Lucene.Net.Index.Term("*", "L\\o*d?n")),
            };

            var luceneVisitor = new LuceneVisitor();

            luceneVisitor.Visit(wildcardQuery);

            var es = wildcardQuery.ESQuery;

            Assert.NotNull(es);

            var visitor = new ElasticSearchDSLVisitor(SchemaRetrieverMock.CreateMockSchemaRetriever());

            visitor.Visit((QueryStringClause)es);

            return(((QueryStringClause)es).KustoQL);
        }
コード例 #10
0
        public string Visit_WithValidWildcardTermQuery_ReturnsValidResponse()
        {
            var termQuery = new LuceneTermQuery
            {
                LuceneQuery =
                    new Lucene.Net.Search.TermQuery(
                        new Lucene.Net.Index.Term("*", "Kfar-Saba")),
            };

            var luceneVisitor = new LuceneVisitor();

            luceneVisitor.Visit(termQuery);

            var es = termQuery.ESQuery;

            Assert.NotNull(es);

            var visitor = VisitorTestsUtils.CreateAndVisitRootVisitor();

            visitor.Visit((QueryStringClause)es);

            return(((QueryStringClause)es).KustoQL);
        }
コード例 #11
0
        /// <summary>
        /// Given a clause which has a Lucene based phrase, creates a KQL query.
        /// </summary>
        /// <param name="queryStringClause">The given clausse.</param>
        /// <returns>A KQL query string.</returns>
        private string CreateKqlFromLucenePhrase(QueryStringClause queryStringClause)
        {
            // we need to parse the phrase
            using var analyzer = new WhitespaceAnalyzer();
            var queryParser =
                new QueryParser(
                    Lucene.Net.Util.Version.LUCENE_30,
                    queryStringClause.Default,
                    analyzer)
            {
                AllowLeadingWildcard   = queryStringClause.Wildcard,
                LowercaseExpandedTerms = false,
            };

            // escaping special charachters from the pharse before parsing.
            // we would call QueryParser.Escape() method, but it escapes all charachters and
            // in our case we only have to worry about backslash.
            // implementation is based on: https://github.com/apache/lucenenet/blob/0eaf76540b8de326d1aa9ca24f4b5d6425a9ae38/src/Lucene.Net.QueryParser/Classic/QueryParserBase.cs
            var escapedPhrase = queryStringClause.Phrase.Replace(@"\", @"\\\", StringComparison.OrdinalIgnoreCase);

            // we parse and get the Lucene.Net query model
            var query = queryParser.Parse(escapedPhrase);

            // We make our own 'visitable' Lucence.Net query model
            var luceneQuery = VisitableLuceneQueryFactory.Make(query);

            // Visit
            var luceneVisitor = new LuceneVisitor();

            luceneQuery.Accept(luceneVisitor);
            dynamic esQuery = luceneQuery.ESQuery;

            esQuery.Accept(this);

            return(esQuery.KustoQL);
        }