Esempio n. 1
0
    protected override Query GetFieldQuery(string field, string queryText, int slop)
    {
        if (field == "released_inthelast" && CustomQueryParser.ParseStart(queryText, out DateTime start))
        {
            var todayString = DateTime.Today.ToString("yyyyMMdd");
            var dateString  = start.ToString("yyyyMMdd");

            return(base.GetRangeQuery("release_date", dateString, todayString, true, true));
        }

        if (field == "released_notinthelast" && CustomQueryParser.ParseStart(queryText, out DateTime finish))
        {
            var dateString = finish.ToString("yyyyMMdd");

            return(base.GetRangeQuery("release_date", "00000000", dateString, false, false));
        }

        if (field == "added_inthelast" && CustomQueryParser.ParseStart(queryText, out DateTime addedStart))
        {
            var todayString = DateTime.Today.ToString("yyyyMMdd");
            var dateString  = addedStart.ToString("yyyyMMdd");

            return(base.GetRangeQuery("added_date", dateString, todayString, true, true));
        }

        if (field == "added_notinthelast" && CustomQueryParser.ParseStart(queryText, out DateTime addedFinish))
        {
            var dateString = addedFinish.ToString("yyyyMMdd");

            return(base.GetRangeQuery("added_date", "00000000", dateString, false, false));
        }

        return(base.GetFieldQuery(field, queryText, slop));
    }
            public IEnumerable <LogEntry> Filter(string queryString, ViewFilter view, int count, Direction direction, ulong?referenceId, out int totalCount)
            {
                var context = new IncermentalSearchContext(count, direction, referenceId);

                var parser = new CustomQueryParser(LuceneNet.Util.Version.LUCENE_30, MessageFieldName, analyzer);
                var sortBy = new Sort(new SortField(IdFieldName, SortField.LONG, direction == Direction.Backward));

                while (true)
                {
                    var combinedQueryString = Searcher.CombineQuery(queryString, view, context.Range);
                    if (combinedQueryString.Length == 0)
                    {
                        totalCount = 0;
                        return(new LogEntry[0]);
                    }

                    var query = parser.Parse(combinedQueryString);

                    lock (searcherLock)
                    {
                        var searchResults = searcher.Search(query, null, count, sortBy);

                        totalCount = searchResults.TotalHits;
                        var result = searchResults.ScoreDocs.Take(count).Select(d => searcher.Doc(d.Doc)).Select(x => converter.ToLogEntry(x));

                        context.UpdateResult(result);
                        if (context.IsFinished)
                        {
                            return((direction == Direction.Backward) ? context.Result.Reverse() : context.Result);
                        }

                        context.UpdateRange();
                    }
                }
            }
            private ulong?FindFirstId(string queryString, ViewFilter view, Direction direction, ulong?referenceId, out int totalCount)
            {
                if (direction == Direction.Backward)
                {
                    if (referenceId.HasValue && referenceId.Value > 0)
                    {
                        referenceId--;
                    }
                }
                else
                {
                    if (referenceId.HasValue && referenceId.Value < ulong.MaxValue)
                    {
                        referenceId++;
                    }
                }

                var context = new IncermentalSearchContext(1, direction, referenceId);

                while (true)
                {
                    var combinedQueryString = Searcher.CombineQuery(queryString, view, context.Range);
                    if (combinedQueryString.Length == 0)
                    {
                        totalCount = 0;
                        return(null);
                    }

                    var parser = new CustomQueryParser(LuceneNet.Util.Version.LUCENE_30, MessageFieldName, analyzer);
                    var query  = parser.Parse(combinedQueryString);
                    var sortBy = new Sort(new SortField(IdFieldName, SortField.LONG, direction == Direction.Backward));

                    lock (searcherLock)
                    {
                        var searchResults = searcher.Search(query, null, 1, sortBy);
                        var firstResult   = searchResults.ScoreDocs.FirstOrDefault();

                        totalCount = searchResults.TotalHits;
                        if (firstResult != null)
                        {
                            return(converter.ToLogEntry(searcher.Doc(firstResult.Doc)).Id);
                        }
                        if (context.IsFinished)
                        {
                            return(null);
                        }

                        context.UpdateRange();
                    }
                }
            }
Esempio n. 4
0
 private static Queryable <T> GenerateContext <T>(NullQueryableDataSource nullQueryableDataSource)
 {
     return(new Queryable <T>(new Executor(nullQueryableDataSource, null), CustomQueryParser.CreateDefault()));
 }
Esempio n. 5
0
            private ulong? FindFirstId(string queryString, ViewFilter view, Direction direction, ulong? referenceId, out int totalCount)
            {
                if(direction == Direction.Backward)
                {
                    if(referenceId.HasValue && referenceId.Value > 0)
                    {
                        referenceId--;
                    }
                }
                else
                {
                    if(referenceId.HasValue && referenceId.Value < ulong.MaxValue)
                    {
                        referenceId++;
                    }
                }

                var context = new IncermentalSearchContext(1, direction, referenceId);
                while(true)
                {
                    var combinedQueryString = Searcher.CombineQuery(queryString, view, context.Range);
                    if(combinedQueryString.Length == 0)
                    {
                        totalCount = 0;
                        return null;
                    }

                    var parser = new CustomQueryParser(LuceneNet.Util.Version.LUCENE_30, MessageFieldName, analyzer);
                    var query = parser.Parse(combinedQueryString);
                    var sortBy = new Sort(new SortField(IdFieldName, SortField.LONG, direction == Direction.Backward));

                    lock(searcherLock)
                    {
                        var searchResults = searcher.Search(query, null, 1, sortBy);
                        var firstResult = searchResults.ScoreDocs.FirstOrDefault();

                        totalCount = searchResults.TotalHits;
                        if(firstResult != null)
                        {
                            return converter.ToLogEntry(searcher.Doc(firstResult.Doc)).Id;
                        }
                        if(context.IsFinished)
                        {
                            return null;
                        }

                        context.UpdateRange();
                    }
                }
            }
Esempio n. 6
0
            public IEnumerable<LogEntry> Filter(string queryString, ViewFilter view, int count, Direction direction, ulong? referenceId, out int totalCount)
            {
                var context = new IncermentalSearchContext(count, direction, referenceId);

                var parser = new CustomQueryParser(LuceneNet.Util.Version.LUCENE_30, MessageFieldName, analyzer);
                var sortBy = new Sort(new SortField(IdFieldName, SortField.LONG, direction == Direction.Backward));
                while(true)
                {
                    var combinedQueryString = Searcher.CombineQuery(queryString, view, context.Range);
                    if(combinedQueryString.Length == 0)
                    {
                        totalCount = 0;
                        return new LogEntry[0];
                    }

                    var query = parser.Parse(combinedQueryString);

                    lock(searcherLock)
                    {
                        var searchResults = searcher.Search(query, null, count, sortBy);

                        totalCount = searchResults.TotalHits;
                        var result = searchResults.ScoreDocs.Take(count).Select(d => searcher.Doc(d.Doc)).Select(x => converter.ToLogEntry(x)); 

                        context.UpdateResult(result);
                        if(context.IsFinished)
                        {
                            return (direction == Direction.Backward) ? context.Result.Reverse() : context.Result;
                        }

                        context.UpdateRange();
                    }
                }
            }
Esempio n. 7
0
 public Queryable(IQueryExecutor executor)
     : this(executor, CustomQueryParser.CreateDefault())
 {
 }