2015-10-20 66 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應用程序中),然後將結果返回到內部網站。

技術上,只有公共網站將使用查找 - 但結果將提供給內部網站。