2016-01-31 36 views
2

我使用IProviderSearchContext在Sitecore 8.1(Lucene Search)中搜索特定項目,並且我得到每個項目(en,ar)的兩個版本。 我的問題是:是否必須爲每個查詢指定:item.Language == Sitecore.Context.Language.Name還是有辦法使IProviderSearchContext根據當前Sitecore上下文中的語言獲取數據?Sitecore內容搜索:我必須指定語言嗎?

回答

3

索引提供程序對於索引非常基本。 通過使用Sitecore.Data.Item進行常規查詢,您的結果將自動按上下文語言和最新項目版本進行過濾,當您使用索引時不會發生此類過濾。 除非您在Linq查詢中指定,否則您將收到所有版本和所有語言。

如果要過濾當前語言的結果,使用索引是必需的:item.Language == Sitecore.Context.Language.Name。 要使用上面的過濾,還需要繼承SearchResultItem中的ResultItem類。否則,你的ResultItem需要一個新的索引字段添加到您的類像上面一個:

[IndexField(「_language」)] 
    public string Language { get; set; } 
+0

謝謝你,這是有道理的更多信息。但是我不需要添加'Language'字段,因爲它已經存在於'SearchResultItem'類中。 – TamerM

0

您也可以在CultureExecutionContext傳遞到您的查詢將通過語言限制的結果。

var culture = Sitecore.Context.Language.CultureInfo; 

var queryable = context.GetQueryable<SearchResultItem>(new CultureExecutionContext(culture)); 

有關於這在this

+0

我快速瀏覽了文章和代碼示例,並將其應用於此:'var query = context.GetQueryable (new CultureExecutionContext(Sitecore.Context.Language.CultureInfo))。Where(predicate).ToList );'但它返回了兩個版本......這很奇怪。 – TamerM

+1

可能是配置相關的,看看這篇文章,看看它是如何掛在一起 - http://www.sitecore.net/Learn/Blogs/Technical-Blogs/Sitecore-7-Development-Team/Posts/2013/08 /Execution-Contexts-Explained.aspx –

相關問題