默认情况下,Solr facet字段的排序是“count”而不是“index”。我有facet字段,如“date”,“author”,“places”等。我希望默认排序(按count / sort = true排序)仅适用于“author”和“places”facet字段,我想要要更改的排序,以“日期”字段的“index”(sort = false)排序。这样,日期按照年份和作者的顺序排序,地点按计数排序。
我有这段代码可以使用,
Facet = new FacetParameters
{
Queries = AllFacetFields.Except(SelectedFacetFields(parameters))
.Select(f => new SolrFacetFieldQuery(f) { MinCount = 1})
.Cast<ISolrFacetQuery>()
.ToList(),
},
如果我在上面的 .Select 行中包含“排序=错误”,则会影响要更改为按索引排序的所有构面字段。我想仅对facet字段“date”应用“Sort = false”。怎么做到这一点?我是linq或solrnet的初学者。请帮忙
答案 0 :(得分:0)
为了实现所需的行为,您应该将三个facet查询拆分为单独的查询,您可以在其中单独控制排序行为。
Facet = new FacetParameters
{
Queries = new []
{
new SolrFacetFieldQuery("author") {MinCount = 1 },
new SolrFacetFieldQuery("places") {MinCount = 1 },
new SolrFacetFieldQuery("date") {MinCount = 1, Sort = false }
}
}
有关详细信息,请参阅Facets上的SolrNet Google Code Project Site页。
更新:由于原始LINQ查询中有一些额外的逻辑,您可以执行以下操作以实现两者的组合:
Facet = new FacetParameters
{
Queries = AllFacetFields.Except(SelectedFacetFields(parameters))
.Select(f => BuildFacetQuery(f))
.Cast<ISolrFacetQuery>()
.ToList(),
},
private SolrFacetFieldQuery BuildFacetQuery(string fieldName)
{
var query = new SolrFacetFieldQuery(fieldName) { MinCount = 1 };
if(string.Compare(fieldName, "date", StringComparison.OrdinalIgnoreCase) == 0)
query.Sort = false;
return query;
}