在Solrnet asp.net mvc中修改facet字段上的排序,从默认的“count”到“index”

时间:2013-04-11 21:34:29

标签: asp.net-mvc asp.net-mvc-3 linq solr solrnet

默认情况下,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的初学者。请帮忙

1 个答案:

答案 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;
    }