当社の Web サイトのコンテンツ検索 (Examine を使用) が壊れています。問題は、次の 3 つのカテゴリに分類できます。
検索で削除されたページが返される:削除されたコンテンツを検索結果から削除する方法がわかりません。削除されたページを除外するフィルター条件を追加する方法はありますか?
検索はすべてのサイトからコンテンツを返します: 1 つの Umbraco インスタンスで 2 つの異なる国 (オーストラリアとニュージーランド) の 2 つの Web サイトを実行しています。問題は、検索結果が両方のサイトからページを返すことです。NZ の検索結果に AU のページは必要ありません。検索クエリを作成して特定のルート ノード ID に制限する方法は?
テンプレートなしでページを表示する:一部のコンテンツ ノードにはテンプレートが関連付けられておらず、親ノードの一部として表示されることを意図しています。検索を特定のドキュメント タイプに制限する方法はありますか? しかし、コンテンツがサブ ノードで見つかった場合、特定のドキュメント タイプで親ノードを表示しますか?
1 回の投稿であまりにも多くの質問をしている可能性がありますが、他のユーザーが以前にそのような問題に直面した可能性があると思います。
私が今まで使用しているコード:
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;
}