你的位置:首页 > 软件开发 > ASP.net > SolrNet高级用法(分页、Facet查询、任意分组)

SolrNet高级用法(分页、Facet查询、任意分组)

发布时间:2016-07-12 18:00:11
前言 如果你在系统中用到了Solr的话,那么肯定会碰到从Solr中反推数据的需求,基于数据库数据生产索引后,那么Solr索引的数据相对准确,在电商需求中经常会碰到菜单、导航分类(比如电脑、PC的话会有很多品牌)、新车二手车导航会有车的品牌。还会根据价格 ...

前言

       如果你在系统中用到了Solr的话,那么肯定会碰到从Solr中反推数据的需求,基于数据库数据生产索引后,那么Solr索引的数据相对准确,在电商需求中经常会碰到菜单、导航分类(比如电脑、PC的话会有很多品牌)、新车二手车导航会有车的品牌。还会根据价格区间自由组合组成自定义查询条件。常用高级用法如下:

       1、根据基础数据反推数据分类用于导航(电脑品牌、手机品牌、车的品牌)。

       2、数据量大的要分页

       3、自定义价格区间。

       4、时间段分组。

       5、高亮。

       以下我罗列三个我遇到的实际问题用来演示下SolrNet的实际用法。

     

高级查询场景一(Facet 查询)

       在卖车类电商网站中,你选择了指定城市,那么你肯定只想在查询条件中查询出该城市已有车源的品牌,这样用户选择的查询条件就是有效的。这里用到Solr的Facet语法,Facet我理解为分片或者分类查询。用Facet Field查询的结果则在返回值的FacetFields字段中,他会把所有品牌的id都罗列出来,返回一个KeyValue,结果中是返回所有的品牌和对应的车源数量。车源数量大于0的则是该地区对应的品牌数据。

ISolrOperations<SolrQuotePriceCore> solr = ServiceLocator.Current.GetInstance<ISolrOperations<SolrQuotePriceCore>>();      //查找城市      ISolrQuery q1 = new SolrQueryByField("provid", "540000"); //省份ID      ISolrQuery q2 = new SolrQueryByField("cityid", "542400"); //市ID      ISolrQuery q3 = new SolrQueryByField("selled", "1"); //在售状态      IList<ISolrQuery> filter=new List<ISolrQuery>();      filter.Add(q1);      filter.Add(q2);      filter.Add(q3);      //分组      var facet = new FacetParameters()      {        Queries = new[]        {          new SolrFacetFieldQuery("brandid"),          }      };      QueryOptions options=new QueryOptions();      options.Facet = facet;      SolrMultipleCriteriaQuery qtbo = new SolrMultipleCriteriaQuery(filter,"AND");      SolrQueryResults<SolrQuotePriceCore> results = solr.Query(qtbo,options);      foreach (var f in results.FacetFields["brandId"])      {        if (f.Value > 0)          Console.WriteLine("{0}: {1}", f.Key, f.Value);      }

原标题:SolrNet高级用法(分页、Facet查询、任意分组)

关键词:net

net
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。