2015-10-20 68 views
2

问候EPiServer大师。EPiServer - 如何在不同的EPiServer网站上搜索内容?

图片这样的场景:

一位顾客得到了两个不同的EPiServer站点。 一个内部网站和一个外部网站。 外部正在使用EPiServer Find的REST API进行搜索。 内部目前正在使用基于Lucene索引器的简单搜索页面。

客户希望能够同时搜索外部内部网站的内容INSIDE内部站点。他们并不热衷于购买另一个EPiServer查找许可证来申请内部。所以基本上他们希望能够在内部搜索外部网站的内容。

什么是为了做到这一点,正确的方法呢? 任何建议表示赞赏。

/ChrisRun

回答

1

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

关闭我的头顶,我可以看到参与增加公众查找索引到内部网站多重风险 - 特别是如果你不希望它的双向(即指数内部网站在相同的查找索引中)。

一种方法可能是将搜索端点添加到公共网站,内部网站调用该搜索端点来执行搜索。

基本上端点(例如控制器操作方法)将执行使用搜索查找(这会发生在公共Web应用程序中),然后将结果返回到内部网站。

技术上,只有公共网站将使用查找 - 但结果将提供给内部网站。