Exemplo n.º 1
0
 public SearchSecurityTrimmer(IndexSearcher searcher, SecurityCheckerDelegate securityChecker, LuceneQuery luceneQuery)
 {
     _securityChecker = securityChecker;
     _searcher        = searcher;
     _query           = luceneQuery;
     _hitDocs         = new List <ScoreDoc>(16);
 }
 public SearchSecurityTrimmer(IndexSearcher searcher, SecurityCheckerDelegate securityChecker, LuceneQuery luceneQuery)
 {
     _securityChecker = securityChecker;
     _searcher = searcher;
     _query = luceneQuery;
     _hitDocs = new List<ScoreDoc>(16);
 }
 public SearchSecurityTrimmer(SearchSecurityTrimmerContext searchContext)
 {
     _securityChecker = searchContext.SecurityChecker;
     _searcher = searchContext.Searcher;
     _luceneQuery = searchContext.LuceneQuery;
     _searchQuery = searchContext.SearchQuery;
     _hitDocs = new List<ScoreDoc>(16);
 }
Exemplo n.º 4
0
 public SearchSecurityTrimmer(SearchSecurityTrimmerContext searchContext)
 {
     _securityChecker = searchContext.SecurityChecker;
     _searcher        = searchContext.Searcher;
     _luceneQuery     = searchContext.LuceneQuery;
     _searchQuery     = searchContext.SearchQuery;
     _hitDocs         = new List <ScoreDoc>(16);
 }
Exemplo n.º 5
0
        public IEnumerable <LuceneResult> Search(
            LuceneQuery luceneQuery, out int totalHits, SecurityCheckerDelegate securityChecker = null)
        {
            Requires.NotNull("LuceneQuery", luceneQuery);
            Requires.NotNull("LuceneQuery.Query", luceneQuery.Query);
            Requires.PropertyNotEqualTo("LuceneQuery", "PageSize", luceneQuery.PageSize, 0);
            Requires.PropertyNotEqualTo("LuceneQuery", "PageIndex", luceneQuery.PageIndex, 0);

            //TODO - Explore simple highlighter as it does not give partial words
            var highlighter = FastHighlighter;
            var fieldQuery  = highlighter.GetFieldQuery(luceneQuery.Query);

            var maxResults = luceneQuery.PageIndex * luceneQuery.PageSize;
            var minResults = maxResults - luceneQuery.PageSize + 1;

            var searcher = GetSearcher();
            var topDocs  = new SearchSecurityTrimmer(searcher, securityChecker, luceneQuery);

            searcher.Search(luceneQuery.Query, null, topDocs);
            totalHits = topDocs.TotalHits;

            if (Logger.IsDebugEnabled)
            {
                var sb = GetSearcResultExplanation(luceneQuery, topDocs.ScoreDocs, searcher);
                Logger.Debug(sb);
            }

            //Page doesn't exist
            if (totalHits < minResults)
            {
                return(new List <LuceneResult>());
            }

            return(topDocs.ScoreDocs.Select(match =>
                                            new LuceneResult
            {
                Document = searcher.Doc(match.Doc),
                Score = match.Score,
                DisplayScore = GetDisplayScoreFromMatch(match.ToString()),
                TitleSnippet = GetHighlightedText(highlighter, fieldQuery, searcher, match, Constants.TitleTag, luceneQuery.TitleSnippetLength),
                BodySnippet = GetHighlightedText(highlighter, fieldQuery, searcher, match, Constants.BodyTag, luceneQuery.BodySnippetLength),
                DescriptionSnippet = GetHighlightedText(highlighter, fieldQuery, searcher, match, Constants.DescriptionTag, luceneQuery.TitleSnippetLength),
                TagSnippet = GetHighlightedText(highlighter, fieldQuery, searcher, match, Constants.Tag, luceneQuery.TitleSnippetLength),
                AuthorSnippet = GetHighlightedText(highlighter, fieldQuery, searcher, match, Constants.AuthorNameTag, luceneQuery.TitleSnippetLength),
                ContentSnippet = GetHighlightedText(highlighter, fieldQuery, searcher, match, Constants.ContentTag, luceneQuery.TitleSnippetLength)
            }).ToList());
        }
Exemplo n.º 6
0
        public IEnumerable<LuceneResult> Search(
            LuceneQuery luceneQuery, out int totalHits, SecurityCheckerDelegate securityChecker = null)
        {
            Requires.NotNull("LuceneQuery", luceneQuery);
            Requires.NotNull("LuceneQuery.Query", luceneQuery.Query);
            Requires.PropertyNotEqualTo("LuceneQuery", "PageSize", luceneQuery.PageSize, 0);
            Requires.PropertyNotEqualTo("LuceneQuery", "PageIndex", luceneQuery.PageIndex, 0);

            //TODO - Explore simple highlighter as it does not give partial words
            var highlighter = FastHighlighter;
            var fieldQuery = highlighter.GetFieldQuery(luceneQuery.Query);

            var maxResults = luceneQuery.PageIndex*luceneQuery.PageSize;
            var minResults = maxResults - luceneQuery.PageSize + 1;

            var searcher = GetSearcher();
            var topDocs = new SearchSecurityTrimmer(searcher, securityChecker, luceneQuery);
            searcher.Search(luceneQuery.Query, null, topDocs);
            totalHits = topDocs.TotalHits;

            if (Logger.IsDebugEnabled)
            {
                var sb = GetSearcResultExplanation(luceneQuery, topDocs.ScoreDocs, searcher);
                Logger.Debug(sb);
            }

            //Page doesn't exist
            if (totalHits < minResults)
                return new List<LuceneResult>();

            return topDocs.ScoreDocs.Select(match =>
                new LuceneResult
                    {
                        Document = searcher.Doc(match.Doc),
                        Score = match.Score,
                        DisplayScore = GetDisplayScoreFromMatch(match.ToString()),
                        TitleSnippet = GetHighlightedText(highlighter, fieldQuery, searcher, match, Constants.TitleTag, luceneQuery.TitleSnippetLength),
                        BodySnippet = GetHighlightedText(highlighter, fieldQuery, searcher, match, Constants.BodyTag, luceneQuery.BodySnippetLength),
                        DescriptionSnippet = GetHighlightedText(highlighter, fieldQuery, searcher, match, Constants.DescriptionTag, luceneQuery.TitleSnippetLength),
                        TagSnippet = GetHighlightedText(highlighter, fieldQuery, searcher, match, Constants.Tag, luceneQuery.TitleSnippetLength),
                        AuthorSnippet = GetHighlightedText(highlighter, fieldQuery, searcher, match, Constants.AuthorNameTag, luceneQuery.TitleSnippetLength),
                        ContentSnippet = GetHighlightedText(highlighter, fieldQuery, searcher, match, Constants.ContentTag, luceneQuery.TitleSnippetLength)
                    }).ToList();
        }