Skip to main content
net10.0

Search rendered Umbraco pages with Umbraco.Cms.Search.

Published
Sep 10, 2026
1mo ago
Total Downloads
280
280

Install

dotnet add package Umbraco.Community.RazorSearch --version 17.0.0-rc1
ProductVersions
.NET
net10.0

README

RazorSearch

Search rendered Umbraco pages with Umbraco Search. RazorSearch stores HTML snapshots, extracts title, headings and body text, and contributes them to a dedicated search index.

This branch targets Umbraco 17.6.2+ within 17.x, .NET 10 and Umbraco Search Core 17.1.0+. The first releases are beta packages. SQLite is not release-verified in this beta; known concurrency limitations are recorded in the release notes.

Install with Examine

dotnet add package Umbraco.Community.RazorSearch.Examine --version 17.0.0-beta.1

The companion includes the core package and creates its physical Examine index. Enable Search and the provider in the consuming application's Program.cs:

using Umbraco.Cms.Search.Core.DependencyInjection;
using Umbraco.Cms.Search.Provider.Examine.DependencyInjection;

builder.CreateUmbracoBuilder()
    .AddBackOffice()
    .AddWebsite()
    .AddComposers()
    .AddSearchCore()
    .AddExamineSearchProvider()
    .Build();

Keep the application's normal Umbraco boot, middleware and endpoint setup. Start the site, then queue a rebuild of existing published content from the RazorSearch backoffice dashboard.

Core is provider-agnostic. It does not call AddSearchCore(), register a provider or configure the application's published-content index. For a different provider, install Umbraco.Community.RazorSearch directly and configure that provider yourself. Examine is the provider covered by the beta acceptance matrix.

Configuration

{
  "Umbraco": {
    "Community": {
      "RazorSearch": {
        "SnapshotExtraction": {
          "BodySources": [{ "Type": "selector", "Selector": "main" }]
        }
      }
    }
  }
}

Settings live under Umbraco:Community:RazorSearch. The NuGet package includes an appsettings-schema. The first build after installation copies it to the app and registers it in appsettings-schema.json, including when core is installed transitively through the companion.

Search

using Umbraco.Community.RazorSearch;
using Umbraco.Community.RazorSearch.Models;

// Inject IRazorSearchService as searchService.
var request = new RazorSearch("umbraco")
    .InCulture("da-DK")
    .Page(1, 10);
IRazorSearchResult result = await searchService.SearchAsync(request);

A specified culture must match a configured Umbraco culture. The search includes that culture and invariant documents. Without a culture it searches invariant documents only. There is no implicit request-culture fallback.

Operation

Rendering and indexing happen asynchronously after publication. Each document and culture has one current snapshot. A temporary rendering failure preserves the last usable snapshot. Unpublishing, deleting and excluding content remove it from search.

The render queue and its history live in memory. Restarting the app loses pending work. Run a manual rebuild when necessary, including after changes to templates, shared content or extraction rules.

Load balancing targets one dedicated backoffice server and multiple frontends with a shared SQL Server database and separate local Examine indexes. The backoffice owns rendering; Umbraco Search distributes index refreshes. Configure an internal render destination to avoid a stale frontend or CDN response. Multiple active backoffice servers are outside the beta scope.

Documentation

Adoption Assessment

Assess this package against its supported frameworks, license, maintenance signals and dependency graph before making it a project standard.

This version is marked prerelease. Validate its API and upgrade path before production use.Compatibility metadata lists 1 target framework; confirm the exact target used by your application.

Related Guides & Workflows

Learn how to evaluate, integrate, or audit this package in your .NET project.