0

默认情况下,Solr facet 字段的排序是按“计数”而不是“索引”。我有诸如“日期”、“作者”、“地点”等方面的字段。我希望默认排序(按计数/排序 = true 排序)仅适用于“作者”和“地点”方面字段,我想要要更改为“日期”字段的“索引”(排序 = false)排序的排序。这样,日期按年份和作者的顺序排序,地点按计数排序。

我有这段代码可以使用,

  Facet = new FacetParameters
                {
                    Queries = AllFacetFields.Except(SelectedFacetFields(parameters))
                          .Select(f => new SolrFacetFieldQuery(f) { MinCount = 1})
                          .Cast<ISolrFacetQuery>()
                          .ToList(),
                },

如果我在上面的.Select行中包含“ Sort = false ” ,它会影响所有方面字段以更改为按索引排序。我只想将“Sort = false”应用于构面字段“日期”。如何做到这一点?我是 linq 或 solrnet 的初学者。请帮忙

4

1 回答 1

1

为了实现所需的行为,您应该将三个方面查询拆分为单独的查询,您可以在其中单独控制排序行为。

 Facet = new FacetParameters
         {
             Queries = new []
                    {
                       new SolrFacetFieldQuery("author") {MinCount = 1 },
                       new SolrFacetFieldQuery("places") {MinCount = 1 },
                       new SolrFacetFieldQuery("date") {MinCount = 1, Sort = false }
                    }
         }

有关详细信息,请参阅SolrNet Google 代码项目站点上的Facets页面。

更新:由于原始 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;
    }
于 2013-04-15T12:46:46.523 回答