volume_up

A critical vulnerability was discovered in React Server Components (Next.js). Our systems remain protected but we advise to update packages to newest version. Learn More

volume_up

A critical vulnerability was discovered in React Server Components (Next.js). Our systems remain protected but we advise to update packages to newest version. Learn More

Getting wrong data with UnifiedSearch

I'm using CMS 6 r2 with UnifiedSearch. I've declared the property SearchSummary in my basepage (PageType Builder 2.0).

 

public string SearchSummary
{
get
{
var propertyMainIntro = this.Property.ExistsLocally("MainIntro") && this["MainIntro"] != null ? this["MainIntro"].ToString() : String.Empty;
if (!String.IsNullOrWhiteSpace(propertyMainIntro))
{
return propertyMainIntro;
}
return String.Empty;
}
}

 

In some cases the Excerpt field on the UnifiedSearchHit object only gives me the MainIntro field, which is correct. For some of the other pages I get both the MainIntro and MainBody field. Both pagetypes inherit the basepage. There are no differences for the two page types in my indexing convention.

Any tips?

#68351
Mar 20, 2013 14:51

Seems that when the MainIntro field is populated with html tags, both these tags and MainBody is retrieved. Why is MainBody retrieved at all? Is it a default "fallback property"?

#68352
Mar 20, 2013 15:00
Vote:

Hi,

By "default" all properties marked as Searchable in the page definition is included in SearchText that in turn is a "fallback" property. If you only want SearchSummary in the Excerpt you can override the defult Excerpt projection by:

client.Conventions.UnifiedSearchRegistry.ForInstanceOf<MyBasePageType>()
.ProjectExcerptUsing<ISearchContent>(spec =>
x => x.SearchText.AsCropped(spec.ExcerptLength));

If you are using Highlighting you have to override the HighlightExcerpt by:

client.Conventions.UnifiedSearchRegistry.ForInstanceOf<MyBasePageType>()
.ProjectHighlightedExcerptUsing<ISearchContent>(spec =>
x => x.SearchSummary.AsHighlighted(
new HighlightSpec { FragmentSize = spec.ExcerptLength, NumberOfFragments = 1 }));

Regards,
Henrik

#68360
Mar 20, 2013 15:44

How would this work with the singleton?

I don't get intelliSense for the .ProjectExcerptUsing method in my indexing convention class.

#68363
Mar 20, 2013 16:17

Swap client to SearchClient.Instance and add EPiServer.Find.UnifiedSearch to your usings.

#68364
Mar 20, 2013 16:50

I first tried this without any luck:

SearchClient.Instance.Conventions.UnifiedSearchRegistry.ForInstanceOf<PageType_BasePage>()
.ProjectHighlightedExcerptUsing<ISearchContent>(spec => x => x.SearchSummary.AsHighlighted(new HighlightSpec { FragmentSize = spec.ExcerptLength, NumberOfFragments = 1 }));

Here is the result from the search on a specifici test article, using the code above. Properties in order are title, heading, intro, body. As you can see the intro is just an empty <strong> tag. As soon as I populate the tag with something, the intro alone is returned in the result.

Testartikkel Testartikkel <strong></strong> Brødtekst                         

 

Since I haven't actually implement ISearchContent but rather declared the properties with the same name and type I tried the following, also without any luck:

SearchClient.Instance.Conventions.UnifiedSearchRegistry.ForInstanceOf<PageType_BasePage>()
.ProjectHighlightedExcerptUsing<PageType_BasePage>(spec => x => x.SearchSummary.AsHighlighted(new HighlightSpec { FragmentSize = spec.ExcerptLength, NumberOfFragments = 1 }));

 

This is not really a big showstopper though, as I can just filter out the html tags before displaying the result.

#68383
Edited, Mar 21, 2013 10:27
Vote:

As you have edited Highlighting excerpts are you passing the HitsSpecification to GetResult?

.GetResult(new HitSpecification { HighlightExcerpt = true })

and that you are using the .For(querystring) so that it has something to highlight on?

#68388
Mar 21, 2013 11:59

No, I hadn't passed the HitsSpec, but I've done so now and it looks like it works.

Thanks :)

#68391
Mar 21, 2013 12:49
#69118
Mar 22, 2013 10:01
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.