versionFrom | versionTo | meta.Title | meta.Description |
---|---|---|---|
9.0.0 |
10.0.0 |
Backoffice Search |
A guide to customization of Backoffice Search |
The search facility of the Umbraco Backoffice allows the searching 'across sections' of different types of Umbraco entities, eg Content, Media, Members. However 'by default' only a small subset of standard fields are searched:
Node Type | Propagated Fields |
---|---|
All Nodes | Id, NodeId and Key |
Media Nodes | UmbracoFileFieldName |
Member Nodes | email, loginName |
An Umbraco implementation might have additional custom properties that it would be useful to include in a Backoffice Search. For example: an 'Organisation Name' property on a Member Type, or a 'Product Code' field for a 'Product' content item.
To add custom properties, it is required to register a custom implementation of IUmbracoTreeSearcherFields
. We recommend to override the existing UmbracoTreeSearcherFields
.
Your custom implementation needs to be registered in the container. E.g. in the Startup.ConfigureServices
method or in a composer, as an alternative.
public void ConfigureServices(IServiceCollection services)
{
services.AddUmbraco(_env, _config)
...
services.AddUnique<IUmbracoTreeSearcherFields, CustomUmbracoTreeSearcherFields>();
}
or
using Umbraco.Cms.Core.Composing;
using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Infrastructure.Examine;
using Umbraco.Extensions;
namespace Umbraco.Docs.Samples.Web.BackofficeSearch
{
public class BackofficeSearchComposer : IComposer
{
public void Compose(IUmbracoBuilder builder)
{
builder.Services.AddUnique<IUmbracoTreeSearcherFields, CustomUmbracoTreeSearcherFields>();
}
}
}
using System.Collections.Generic;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Infrastructure.Examine;
using Umbraco.Cms.Infrastructure.Search;
//https://our.umbraco.com/documentation/Extending/Backoffice-Search/
namespace Umbraco.Docs.Samples.Web.BackofficeSearch
{
public class CustomUmbracoTreeSearcherFields : UmbracoTreeSearcherFields, IUmbracoTreeSearcherFields
{
public CustomUmbracoTreeSearcherFields(ILocalizationService localizationService) : base(localizationService)
{
}
//Adding custom field to search in all nodes
public new IEnumerable<string> GetBackOfficeFields()
{
return new List<string>(base.GetBackOfficeFields()) { "nodeType" };
}
//Adding custom field to search in document types
public new IEnumerable<string> GetBackOfficeDocumentFields()
{
return new List<string>(base.GetBackOfficeDocumentFields()) { "nodeType" };
}
//Adding custom field to search in media
public new IEnumerable<string> GetBackOfficeMediaFields()
{
return new List<string>(base.GetBackOfficeMediaFields()) { "nodeType" };
}
//Adding custom field to search in members
public new IEnumerable<string> GetBackOfficeMembersFields()
{
return new List<string>(base.GetBackOfficeMembersFields()) { "nodeType" };
}
}
}
:::warning
You cannot use this to search on integer types in the index, as an example parentID
does not work.
:::
For further extensibility of the Umbraco Backoffice search implementation check ISearchableTree