站点搜索未根据语言过滤结果
Site search is not filtering results based on Language
例如有一个英文名称为"ABC"的项目及其相应的日文、韩文和中文版本(含翻译内容)。
如果搜索关键字是 "ABC" ,那么在韩语中预计会出现 0 个结果,但即使没有单词 "ABC" 也不会返回韩语版本,但会期望项目名称。
过滤代码如下:
query = query.Filter(item => item.Language == Sitecore.Context.Language.Name);
获取结果:
query = query.Where(x => x.Title.Contains(word) || x.Content.Contains(word));
请提供您对此问题的意见。
Sitecore 版本:8.0
搜索引擎:Lucene
您的 where
子句包括 || x.Content.Contains(word))
SearchResultItem
class 的 Content
属性 是所有标记化字段的串联,包括项目名称。因此,出于这个原因,我认为这种行为是正确的。
我建议使用您要搜索的特定字段,而不是使用 Content
。
您的项目中可能有一个名为 "content"
的字段。如果是这种情况,那么您可以通过简单地将其映射到不同的 属性 来避免 POCO 中 属性 名称的冲突,如下所示:
[IndexField("content")]
public virtual string ContentField { get; set; }
这些博文引用 _content
计算索引字段,Content
属性 从中派生。
例如有一个英文名称为"ABC"的项目及其相应的日文、韩文和中文版本(含翻译内容)。
如果搜索关键字是 "ABC" ,那么在韩语中预计会出现 0 个结果,但即使没有单词 "ABC" 也不会返回韩语版本,但会期望项目名称。
过滤代码如下:
query = query.Filter(item => item.Language == Sitecore.Context.Language.Name);
获取结果:
query = query.Where(x => x.Title.Contains(word) || x.Content.Contains(word));
请提供您对此问题的意见。
Sitecore 版本:8.0 搜索引擎:Lucene
您的 where
子句包括 || x.Content.Contains(word))
SearchResultItem
class 的 Content
属性 是所有标记化字段的串联,包括项目名称。因此,出于这个原因,我认为这种行为是正确的。
我建议使用您要搜索的特定字段,而不是使用 Content
。
您的项目中可能有一个名为 "content"
的字段。如果是这种情况,那么您可以通过简单地将其映射到不同的 属性 来避免 POCO 中 属性 名称的冲突,如下所示:
[IndexField("content")]
public virtual string ContentField { get; set; }
这些博文引用 _content
计算索引字段,Content
属性 从中派生。