How to search multiple doc types in Umbraco using Examine
Have you ever needed to restrict Examine in Umbraco to search a restricted list of doc types? Then this is for you.
By default when searching Umbraco content using Examine you can only provide 1 document type alias to limit which content types are searched which can be limiting if you have lots of different types of content and can be time-consuming constructing a query to add all the different content types to the search query. Below is an example of how you can use built-in features to pass a list of doc types to the search query in one method.
When using the following tutorial as a starter, you can adjust the code to the below to search more than one Umbraco doc type (key areas are in bold):
IEnumerable ids = Array.Empty();
var docTypes = new string[]{
HomePage.ModelTypeAlias,
ContentPage.ModelTypeAlias,
"YOUR_DOC_TYPE_ALIASES_HERE"
};
if (_examineManager.TryGetIndex(Umbraco.Cms.Core.Constants.UmbracoIndexes.ExternalIndexName, out IIndex? index))
{
ids = index
.Searcher
.CreateQuery("content")
.GroupedOr(new string[] { ExamineFieldNames.ItemTypeFieldName }, docTypes)
.And()
.Field("nodeName", query)
.Execute()
.Select(x => x.Id);
}
foreach (var id in ids)
{
yield return _umbracoHelper.Content(id);
}