Пример #1
0
        public override void AddHighlightings(Dictionary <string, Dictionary <string, string[]> > highlightings)
        {
            if (Highlightings == null)
            {
                Highlightings = new Dictionary <string, Dictionary <string, string[]> >();
            }

            foreach (var kvp in highlightings)
            {
                if (Highlightings.TryGetValue(kvp.Key, out var result) == false)
                {
                    Highlightings[kvp.Key] = result = new Dictionary <string, string[]>();
                }

                foreach (var innerKvp in kvp.Value)
                {
                    if (result.TryGetValue(innerKvp.Key, out var innerResult))
                    {
                        Array.Resize(ref innerResult, innerResult.Length + innerKvp.Value.Length);
                        Array.Copy(innerKvp.Value, 0, innerResult, innerResult.Length, innerKvp.Value.Length);
                    }
                    else
                    {
                        result[innerKvp.Key] = innerKvp.Value;
                    }
                }
            }
        }
Пример #2
0
        public IActionResult Resource([FromQuery] Models.ResourceModel.Resource[] resources = null, string search = null)
        {
            using (var session = _store.OpenSession())
            {
                var query = session.Advanced.DocumentQuery <ResourceModel.Resource, ResourceModel.ResourceIndex>();

                query = ResourceModel.QueryByExample(query, resources);
                Highlightings highlightings = null;

                if (!String.IsNullOrWhiteSpace(search))
                {
                    query.Highlight("Search", 128, 1, new HighlightingOptions {
                        PreTags = new[] { "`" }, PostTags = new[] { "`" }
                    }, out highlightings);
                    query.Search("Search", search, @operator: SearchOperator.And);
                    ResourceSearch = search;
                }

                var result = query.ToQueryable().ProjectInto <ResourceModel.Resource>().Take(100).ToList();

                ResourceSearchHighlightings = (highlightings ?? new Highlightings("")).ResultIndents.ToDictionary(r => r, r => highlightings.GetFragments(r));
                ResourceFacet = query.AggregateBy(ResourceModel.Facets).Execute();

                return(View(result));
            }
        }
Пример #3
0
        public void Fragment_Length_Should_Not_Be_More_Then_128()
        {
            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    session.Store(new TheArticle
                    {
                        Id        = "articles/1",
                        Heading   = "brickpile kicks ass",
                        MainIntro = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In et tortor vulputate, congue felis non, iaculis erat. Maecenas pellentesque, nisl at blandit posuere, velit turpis vulputate tortor, tempor pellentesque nisl enim sit amet mi.",
                        MainBody  = "<p>Knark</p>\r\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In et tortor vulputate, congue felis non, iaculis erat. Maecenas pellentesque, nisl at blandit posuere, velit turpis vulputate tortor, tempor pellentesque nisl enim sit amet mi. Duis scelerisque metus in massa dictum, quis varius libero malesuada. Maecenas semper vitae massa et auctor. Sed tortor est, pharetra et venenatis eu, viverra vel lacus. Quisque iaculis ligula id urna bibendum, efficitur vehicula felis gravida. Quisque nec tempor nisl, nec aliquet libero. In quis ultrices nisi, in fermentum arcu. Aenean vel pretium risus, nec congue dui. Vestibulum viverra maximus tristique. Cras eu nibh a enim vehicula laoreet. Morbi non suscipit mauris, et tincidunt lectus. Suspendisse felis elit, aliquam non vulputate a, sollicitudin vel ante. Cras nec urna ex.</p>\r\n<p>Fusce tincidunt, velit quis condimentum ullamcorper, lorem nulla interdum tellus, nec luctus lectus neque maximus turpis. Vestibulum dapibus est eget rhoncus molestie. Vestibulum ac sem sapien. Donec sodales justo eu diam elementum porttitor. Etiam posuere lorem in ornare molestie. Quisque sagittis eros id rhoncus ornare. Etiam ullamcorper nibh at urna porta, vitae ultricies urna facilisis. Donec semper sapien nec convallis fringilla. Maecenas a vulputate dolor. Donec elementum cursus lorem, sit amet tristique risus euismod et. Phasellus tincidunt quam felis, sit amet pretium lacus dapibus in. Etiam maximus varius dui, eget euismod ante fermentum ac. Aliquam iaculis varius sapien, rutrum aliquam nisi cursus ut. Nulla nec volutpat tellus.</p>\r\n<p>Donec porta, odio id finibus tristique, velit mauris mollis lacus, quis posuere ligula magna sed enim. Cras in fringilla orci. Nunc imperdiet hendrerit felis non fringilla. Vestibulum feugiat odio ac quam congue consectetur. Nunc iaculis mi dui, ut varius lorem gravida in. Fusce ac rhoncus nisl, a luctus magna. Donec et vehicula turpis. Duis consectetur eleifend tellus, in pulvinar arcu viverra at. In quis rhoncus risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam sit amet auctor nunc, nec scelerisque elit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam nec erat tristique, lacinia ipsum porttitor, dictum nibh. Integer ut nulla a mauris scelerisque bibendum sed vitae tellus.</p>\r\n<p>Nullam ultrices dapibus sollicitudin. Nullam placerat, risus non convallis blandit, lacus diam fermentum eros, vel dapibus ex nisi et mi. Interdum et malesuada fames ac ante ipsum primis in faucibus. Duis pellentesque sagittis mattis. Fusce vel vestibulum mi. Sed ac turpis vitae urna imperdiet commodo vel vitae lacus. Maecenas vel semper tellus. Nunc tempus massa elit, ut sollicitudin leo aliquet et. Nulla tristique, tellus ut venenatis varius, arcu ligula luctus magna, id condimentum justo turpis eget nisi. Nullam et justo eget nulla sollicitudin rutrum. Aenean libero felis, hendrerit hendrerit diam nec, commodo bibendum ligula. Suspendisse id velit maximus, tincidunt dui quis, eleifend dolor. In dignissim sem quis leo venenatis, eget laoreet nibh lacinia. In id eros felis. Nullam cursus, ipsum eu semper volutpat, metus quam pulvinar metus, ut commodo lectus est non ipsum. Nullam consectetur turpis vulputate justo sollicitudin, eu tempor velit maximus.</p>\r\n<p>Curabitur lobortis rutrum dolor vitae semper. Praesent congue dolor et nisl commodo rutrum. Vestibulum malesuada sem odio, sed posuere nisl accumsan ac. Vestibulum vehicula, odio vitae placerat tristique, nisi massa rhoncus ante, at porttitor tellus nisl a lorem. Praesent pellentesque, urna sit amet ornare faucibus, risus tortor scelerisque nibh, eu sollicitudin tellus nibh sed nisl. Sed nec ipsum sem. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Etiam a ullamcorper erat. Nulla at porttitor ligula. Suspendisse eget ex bibendum, euismod dolor vel, sodales massa. Donec tempus maximus lacinia. Proin finibus quam vel ullamcorper semper. Duis nunc lectus, laoreet ut condimentum sed, pulvinar lacinia libero.</p>"
                    });
                    session.SaveChanges();
                }

                new The_Search().Execute(store);
                WaitForIndexing(store);

                using (var session = store.OpenSession())
                {
                    string        q    = "brickpile";
                    Highlightings h    = null;
                    var           hits = session.Query <The_Search.Result, The_Search>()
                                         .Customize(x => x.WaitForNonStaleResults())
                                         .Highlight(x => x.Query, 128, 1, out h)
                                         .Search(x => x.Query, q)
                                         .As <TheArticle>()
                                         .ToList();

                    var fragment = h.GetFragments("articles/1").First();
                    Assert.True(fragment.Length < 128);
                }
            }
        }
Пример #4
0
 /// <summary>
 /// Creates a snapshot of the query results
 /// </summary>
 public QueryResult CreateSnapshot()
 {
     return(new QueryResult
     {
         Results = Results,
         Includes = Includes,
         IndexName = IndexName,
         IndexTimestamp = IndexTimestamp,
         IsStale = IsStale,
         SkippedResults = SkippedResults,
         TotalResults = TotalResults,
         Highlightings = Highlightings?.ToDictionary(
             pair => pair.Key,
             x => new Dictionary <string, string[]>(x.Value)),
         ScoreExplanations = ScoreExplanations?.ToDictionary(x => x.Key, x => x.Value),
         TimingsInMilliseconds = TimingsInMilliseconds?.ToDictionary(x => x.Key, x => x.Value),
         LastQueryTime = LastQueryTime,
         DurationMilliseconds = DurationMilliseconds,
         ResultEtag = ResultEtag
     });
 }
Пример #5
0
        public IActionResult Resource(string context, string id, [FromQuery] Models.ResourceModel.Resource[] resources = null)
        {
            using (var session = _store.OpenSession())
            {
                var resource = session
                               .Query <ResourceModel.Resource, ResourceModel.ResourceIndex>()
                               .Include <ResourceModel.Resource>(r => r.Properties.SelectMany(p => p.Resources).SelectMany(re => re.Source))
                               .Where(r => r.Context == context && r.ResourceId == id).ProjectInto <ResourceModel.Resource>().ToList();

                var           query         = session.Advanced.DocumentQuery <ResourceModel.Resource, ResourceModel.ResourceIndex>();
                Highlightings highlightings = null;

                query = ResourceModel.QueryByExample(query, resources);
                query.WhereEquals("@resources", context + "/" + id);
                var result = (resources.Any()) ? query.ToQueryable().ProjectInto <ResourceModel.Resource>().Take(100).ToList() : new List <ResourceModel.Resource>();

                ResourceSearchHighlightings = (highlightings ?? new Highlightings("")).ResultIndents.ToDictionary(r => r, r => highlightings.GetFragments(r));
                ResourceFacet = query.AggregateBy(ResourceModel.Facets).Execute();

                return(View((resources.Any()) ? result : resource));
            }
        }
        public void Highlight(string fieldName, int fragmentLength, int fragmentCount, HighlightingOptions options, out Highlightings highlightings)
        {
            highlightings = QueryHighlightings.Add(fieldName);

            var optionsParameterName = options != null?AddQueryParameter(options) : null;

            HighlightingTokens.AddLast(HighlightingToken.Create(fieldName, fragmentLength, fragmentCount, optionsParameterName));
        }
Пример #7
0
 public IRavenQueryable <T> Highlight(Expression <Func <T, object> > path, int fragmentLength, int fragmentCount, HighlightingOptions options,
                                      out Highlightings highlightings)
 {
     return(Highlight(path.ToPropertyPath(), fragmentLength, fragmentCount, options, out highlightings));
 }
Пример #8
0
 public IRavenQueryable <T> Highlight(string fieldName, int fragmentLength, int fragmentCount, HighlightingOptions options,
                                      out Highlightings highlightings)
 {
     highlightings = _highlightings.Add(fieldName, fragmentLength, fragmentCount, options);
     return(this);
 }
Пример #9
0
 public IRavenQueryable <T> Highlight(string fieldName, int fragmentLength, int fragmentCount, out Highlightings highlightings)
 {
     return(Highlight(fieldName, fragmentLength, fragmentCount, null, out highlightings));
 }
Пример #10
0
 IDocumentQuery <T> IDocumentQueryBase <T, IDocumentQuery <T> > .Highlight(string fieldName, int fragmentLength, int fragmentCount, out Highlightings highlightings)
 {
     Highlight(fieldName, fragmentLength, fragmentCount, null, out highlightings);
     return(this);
 }
Пример #11
0
 IDocumentQuery <T> IDocumentQueryBase <T, IDocumentQuery <T> > .Highlight(Expression <Func <T, object> > path, int fragmentLength, int fragmentCount, HighlightingOptions options, out Highlightings highlightings)
 {
     Highlight(path.ToPropertyPath(), fragmentLength, fragmentCount, null, out highlightings);
     return(this);
 }
Пример #12
0
 IAsyncDocumentQuery <T> IDocumentQueryBase <T, IAsyncDocumentQuery <T> > .Highlight(string fieldName, int fragmentLength, int fragmentCount, HighlightingOptions options, out Highlightings highlightings)
 {
     Highlight(fieldName, fragmentLength, fragmentCount, options, out highlightings);
     return(this);
 }