我们网站上的内容搜索(使用检查)已损坏。这些问题可以分为三个不同的类别:
搜索正在返回已删除的页面:我不确定如何从搜索结果中删除已删除的内容。有没有办法添加过滤条件来排除已删除的页面?
搜索正在从所有网站返回内容:我们在一个 Umbraco 实例中为两个不同的国家(澳大利亚和新西兰)运行两个网站。问题是搜索结果正在返回两个站点的页面。我们不需要新西兰搜索结果上的 AU 页面,反之亦然。如何创建搜索查询以将其限制为特定的根节点 ID?
在没有模板的情况下打开页面:一些内容节点没有与之关联的模板,并且旨在作为父节点的一部分显示。有没有办法将搜索限制为特定的文档类型?但是,如果在子节点上找到内容,是否会调出具有特定文档类型的父节点?
我可能在一篇文章中问了太多问题,但我想其他用户可能以前也遇到过这样的问题。
我现在使用的代码:
private List<SiteSearchResult> GetSiteResults(string query, out int totalResults)
{
var criteria = ExamineManager.Instance
.SearchProviderCollection["WebSearcher"]
.CreateSearchCriteria(IndexTypes.Content);
var filter =
criteria.GroupedOr(
new[]
{
"nodeName", "heading", "content", "metaKeywords", "title", "umbracoNaviHide", "umbracoUrlName",
"umbracoUrlAlias", "metaCategory", "metaDescription", "metaTags", "heading", "subHeading",
"quote", "author", "socialCopy", "socialTitle", "socialTitle2", "thumbTitle", "thumbTitle2",
"thumbCopy", "thumbQuote", "url", "location"
}, query)
.Compile();
var searchResults =
ExamineManager.Instance.SearchProviderCollection["WebSearcher"].Search(filter)
.OrderByDescending(x => x.Score);
totalResults = searchResults.Count();
var results = new List<SiteSearchResult>();
foreach (var item in searchResults)
{
var heading = "";
var copy = "";
var umbracoHelper = new UmbracoHelper(UmbracoContext.Current);
var url = umbracoHelper.Url(item.Id, UrlProviderMode.Relative);
if (url.Length == 0)
{
continue;
}
if (url.StartsWith("/forms/"))
{
continue;
}
// Do many things here
results.Add(r);
}
return results;
}