Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more

Freetext search over multiple types... best practice?

Vote:
 

I have a search page from which i want to search indexed objects of types PageData, VersioningFile, BlogItem and PersonWrapper

BlogItem and PersonWrapper are custom objects and I want each search result to look different on the search page. For example: The pagedata results are going to show some basic data such as PageName, MainBody and breadcrumbs and the PersonWrapper result will show a picture of the person and his/hers contact information.

What's the best practice way to do this? At the moment I've been trying to do a unified search but I'm having trouble retrieving the original object from the UnifiedSearchHit.OriginalObjectGetter.Invoke() method since the OriginalObjectGetter property is null.
I read somewhere that this method only works  for pagedata objects and versioningfile object and if you use a custom object then you need to project a getter method to the UnifiedSearchRegistrys' ProjectOriginalObjectGetterFrom method. This wouldn't be very good for performance though since I don't have a method to get just one person. I would have to fetch all persons again and find the one i need. I find it abit odd that this is even needed since if you're debugging and checking the base class of the UnifiedSearchHit.Document then you can see the original object but if i simple try to do "UnifiedSearchHit.Document as PersonWrapper" then I get "Cannot convert type 'EPiServer.Find.UnifiedSearch.UnifiedSearchHit' to 'PersonWrapper' via built-in convention"

So that leaves me with doing a normal search over multiple types but then i would have to create a common class and parse the result to this class and that can't really be the prefered way to do it I would guess.

Would really appreachiate some guideance here. I'm new to EPiServer Find...

#81450
Feb 17, 2014 16:27
Vote:
 

We have used this approach to getting a "live" PageData object from a UnifiedSearchHit:

GetPageFromHit(UnifiedSearchHit hit)
        {
            if (typeof(PageData).IsAssignableFrom(hit.OriginalObjectType))
            {
                object internalObject;

                if (Global.UrlRewriteProvider.ConvertToInternal(new EPiServer.UrlBuilder(hit.Url), out internalObject))
                {
                    var pageReference = internalObject as PageReference;

    

#85706
May 02, 2014 12:09
* 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.