这是一个棘手的一个。 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)
;