這是一個棘手的一個。 EPiServer查找支持多站點設置,但需要將它們託管在相同的解決方案中。 EPiServer建造,它清除整個查找指數這樣的方式索引工作,這意味着如果你有兩個不同的機器同樣的查找索引,他們會刪除對方的指標,有效地你只有從最結果最近索引的網站。
我們已經在EPiServer上討論了這個問題,改變這種模式只允許索引器刪除siteId's
可用於運行索引作業的解決方案。然而,到目前爲止沒有運氣,而是我們依靠hackish的解決方案:)
所以,你問的是有可能與一些編碼,反映內置索引器,並確保ReindexTarget
範圍正確(代碼是容易明白)。完成此索引作業需要在內部和外部環境中使用,並且需要刪除原始作業。
沒有必要在你的內部環境過濾,但在外部環境中,你就必須確保只有外部的結果公佈。如果您的結果中包含除頁面之外的其他內容,則不能在siteId
上過濾,因爲全局項目(如文件和圖像)沒有任何siteId。我們已經用下面的URL過濾器解決了這個問題。
private static FilterBuilder<ISearchContent> SiteFilterBuilder
{
get
{
var filter = SearchClient.Instance.BuildFilter<ISearchContent>();
filter = filter.Or(x => x.SearchHitUrl.Prefix(EPiServer.Web.SiteDefinition.Current.SiteUrl.AbsoluteUri));
return filter;
}
}
實施
var query = SearchClient.Instance.UnifiedSearch(Language.Swedish)
.For(searchQuery.Query)
.AndInField(x => x.SearchCategories)
.UsingSynonyms()
.OrFilter(SiteFilterBuilder) // will scope to this site
.ApplyBestBets()
.Track()
.TermsFacetFor(x => x.SearchSection)
;