Views: 352
Number of votes: 2
Average rating:

Setting Up Search & Navigation in .NET 5.0

UPDATE: The documentation has now been updated and can be found here: https://world.optimizely.com/documentation/developer-guides/search-navigation/getting-started/creating-your-project/

Optimizely CMS for .NET 5.0 is a very exciting thing.  Recently the .NET Core Preview documentation was archived and some of that documentation was merged into the live developer guides. Optimizely have a huge amount of developer documentation and it's going to take a while for this content to be updated for .NET 5.0.  Sadly the current documentation for Optimizely Search and Navigation is still focused on the .NET 4.x world

1. Add the EPiServer.Find.CMS nuget package to your .NET 5.0 solution.

2. Generate a new Search and Navigation index at https://find.episerver.com/

3. Configure the index details in app.config...

When you create the index, you will be shown this snippet to add to your web.config:

<configuration>
    <configSections>
        <section
            name="episerver.find" type="EPiServer.Find.Configuration, EPiServer.Find" requirePermission="false"/>
    </configSections>
    <episerver.find
        serviceUrl="https://demo01.find.episerver.net/RXQGZ5QpXU9cuRSN2181hqA77ZFrUq2e/"
        defaultIndex="yourname_indexname"/>
</configuration> 

You will instead add this to appsettings.json like so:

{
    "EPiServer": {
        "Find": {
            "ServiceUrl": "https://demo01.find.episerver.net/RXQGZ5QpXU9cuRSN2181hqA77ZFrUq2e/",
            "DefaultIndex": "yourname_indexname"
        } 
    } 
}

4. Configure your startup.cs to include the find configuration:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCmsAspNetIdentity<ApplicationUser>();
    services.AddMvc();
    services.AddCms();
    services.AddFind();
 }

You should now have everything you need to write your search queries as normal:

var searchResult = _findClient.Search<SitePageData>()
                              .For(request.SearchText)
                              .UsingSynonyms()
                              .ApplyBestBets()
                              .Skip(skip)
                              .Take(pageSize)
                              .GetContentResult();
Oct 01, 2021

Scott Reed
( By Scott Reed, 10/1/2021 4:41:02 PM)

You can also do it in code (if you so wish) such as if you wanted you local 4th index to be in key vault or something

        public static void SetupSearchAndNavigation(this IServiceCollection services)
        {
            services.Configure<EPiServer.Find.FindOptions>(options =>
            {
                options.DefaultIndex = "INDEX";
                options.ServiceUrl = "URL";
            });

            services.AddCms();
            services.AddFind();
        }

Stotty
( By Stotty, 10/3/2021 4:26:45 PM)

Thank you for the suggestion Scott, it certainly provides alternatives, especially if the client is self hosted like a number of our own clients.  With the DXP platform, none of the index or connection string secrets are actually held anywhere near source code; so I'd expect not to apply this in code but by transforms with empty values again.

Scott Reed
( By Scott Reed, 10/4/2021 7:53:05 AM)

Yes that's why I was mentioned the 4th index which is outside of the DXP and usually used for local development or a test server. The startup.cs file as it support querying is local development can give us options for complex configuration options should be need to use them.

Antti Alasvuo
( By Antti Alasvuo, 10/5/2021 3:13:32 PM)

For future reference, the configuration of CMS 12+ version and Find, is hidden on this page: https://world.optimizely.com/documentation/developer-guides/search-navigation/getting-started/creating-your-project/ and scroll down to title "Configuring Search & Navigation for the website" (at least at the moment ;)).

Stotty
( By Stotty, 10/5/2021 3:56:42 PM)

Thank you for the update Anttl, at the time of writing that page was still only showing the .NET 4.8 CMS 11 version of the guidance :)

Please login to comment.