每次搜索我都会得到相同的方面(基本上是该属性的任何项目上存在的所有值的完整列表)。我正在处理特征的多列表字段,无论我如何限制搜索,我总是得到所有现有的特征,而不仅仅是这些结果中实际存在的特征。事实上,即使当我修改搜索结果而没有得到任何结果时,我仍然得到每一个特征。为什么它给了我结果中没有的方面?
using (var searchContext = index.CreateSearchContext())
{
var predicate = PredicateBuilder.True<ContentTypeSearchResultItem>();
var contentType = Constants.Taxonomy.Product;
predicate = predicate.And(x => x.ContentType.Contains(contentType));
predicate = predicate.And(x => x.TemplateId.Guid == templateId);
var query = searchContext.GetQueryable<ContentTypeSearchResultItem>().Filter(predicate);
query = query
.FacetOn(x => x.Traits)
var results = query.GetResults();
Sitecore.Diagnostics.Log.Info("Results:", this);
var items = results.Hits.Select(x => x.Document);
foreach (var item in items)
{
Sitecore.Diagnostics.Log.Info($"{item.Path}", this);
}
Sitecore.Diagnostics.Log.Info("Trait Facets:",this);
var traits = results.Facets.Categories.FirstOrDefault(x => x.Name.ToLower().Contains("traits"));
foreach (var trait in traits.Values)
{
Sitecore.Diagnostics.Log.Info($"{trait.Name}", this);
}
return results.Facets.Categories.ToList();
}
我添加了一些日志记录,并使用模板 ID 谓词,实际上我得到了零结果,但仍然获得了完整的方面列表,并为每个作物类型搜索获取了该列表,这是日志记录输出:
44312 15:13:01 信息结果: [未列出结果] 44312 15:13:01 信息特征方面: 44312 15:13:01 信息 26d3faa9d8e04b5da5a3da77d69a2b51 44312 15:13:01 信息 54aa71076cf442dfa37c7c5abf3ef0ad 44312 15:13:01 信息 54c4f97f95c4498e8ca3870687fc6995 44312 15:13:01 信息 5c3db73e0cd4422abf2e58a431530a4e 44312 15:13:01 信息 8d4fe44e1523471da89981207895553c 44312 15:13:01 信息 95f80ed476594995b7878ab4eefa8d98 44312 15:13:01 信息 a2fc835c202e488991005144af7f2bef 44312 15:13:01 信息 c91769f140524b8eac5486423cfdb4f3 44312 15:13:01 信息 d963303d6c284d2db7b1b78a69c38a33
Solr有一个可选的minimumResultCount,它确定显示该方面值需要多少结果。它默认为零,因此如果您只想要结果中的构面(例如,minimumResultCount 为 1),请将其添加到 FacetOn:
query = query.FacetOn(x => x.Traits, 1)