Sitecore内容搜索:是否必须指定语言?

Sitecore内容搜索:是否必须指定语言?,sitecore,sitecore8,Sitecore,Sitecore8,我使用IProviderSearchContext在Sitecore 8.1 Lucene搜索中搜索特定的项目,我得到每个项目的两个版本en,ar。 我的问题是:我是否必须为每个查询指定:item.Language==Sitecore.Context.Language.Name,还是有办法让IProviderSearchContext根据当前Sitecore上下文中的语言获取数据?索引提供程序对索引非常初级。 使用Sitecore.Data.Item进行常规查询时,您的结果会自动按上下文语言和最

我使用IProviderSearchContext在Sitecore 8.1 Lucene搜索中搜索特定的项目,我得到每个项目的两个版本en,ar。
我的问题是:我是否必须为每个查询指定:item.Language==Sitecore.Context.Language.Name,还是有办法让IProviderSearchContext根据当前Sitecore上下文中的语言获取数据?

索引提供程序对索引非常初级。 使用Sitecore.Data.Item进行常规查询时,您的结果会自动按上下文语言和最新的项目版本进行筛选,使用索引时不会进行此类筛选。 除非在Linq查询中指定,否则您将收到所有版本和所有语言

如果要筛选当前语言的结果,则必须使用:item.Language==Sitecore.Context.Language.Name进行索引。 要使用上述筛选,还需要从SearchResultItem继承ResultItem类。否则,ResultItem需要向类中添加一个新的索引字段,如上图所示:

  [IndexField(“_language”)]
  public string Language { get; set; }
您还可以向查询传递CultureExecutionContext,这将按语言限制结果

var culture = Sitecore.Context.Language.CultureInfo;

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

在帖子中有更多关于这方面的信息

谢谢,这很有意义。但是,我不需要添加语言字段,因为它已经存在于SearchResultItem类中。不幸的是,我不认为这是正确的答案,因为它不是实现特定语言搜索的完全正确的方法。我相信以前的开发人员使用过这种逻辑,现在我们在fr-fr上搜索时遇到了问题。使用CultureExecutionContext的答案完全有效。我快速查看了文章和您的代码示例,并将其应用为:var query=context.GetQueryablenewCultureExecutionContextSitecore.Context.Language.CultureInfo.Wherepredicate.ToList;但它返回了两个版本。。。这很奇怪。可能是配置相关的,看看这篇文章,看看它是如何结合在一起的-