专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

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

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 0:34:55       共计:3577 浏览

SolrNet高级用法(分页、Facet查询、任意分组):如果你在系统中用到了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);


            }

高级查询场景二(任意分组)

上面是车源品牌,价格也一样,你想根据指定价格区间查询车源数据则就要用到任务分组。 任意分组的查询结果在返回值的FacetQueries中,遍历改keyvalue取值。

ISolrOperations<solrquotepricecore> solr = ServiceLocator.Current.GetInstance<isolroperations<solrquotepricecore>>();               ISolrQuery r1 = new SolrQueryByRange<decimal>("price", 0, 3m);             ISolrQuery r2 = new SolrQueryByRange<decimal>("price", 3.01m, 5m);             ISolrQuery r3 = new SolrQueryByRange<decimal>("price", 5.01m, 8m);             ISolrQuery r4 = new SolrQueryByRange<decimal>("price", 8.01m, 10m);             ISolrQuery r5 = new SolrQueryByRange<decimal>("price", 10.01m, 15m);             ISolrQuery r6 = new SolrQueryByRange<decimal>("price", 15.01m, 20m);             ISolrQuery r7 = new SolrQueryByRange<decimal>("price", 20.01m, 30m);             ISolrQuery r8 = new SolrQueryByRange<decimal>("price", 30.01m, 50m);             ISolrQuery r9 = new SolrQueryByRange<decimal>("price", 50.01m, 1000m);               var facet = new FacetParameters()             {                 Queries = new[]                 {                     new SolrFacetQuery(r1),                     new SolrFacetQuery(r2),                     new SolrFacetQuery(r3),                     new SolrFacetQuery(r4),                     new SolrFacetQuery(r5),                     new SolrFacetQuery(r6),                     new SolrFacetQuery(r7),                     new SolrFacetQuery(r8),                     new SolrFacetQuery(r9)                 }             };               ISolrQuery q1 = new SolrQueryByField("provid", "540000");             ISolrQuery q2 = new SolrQueryByField("cityid", "542400");             ISolrQuery q3 = new SolrQueryByField("selled", "1");               IList<isolrquery> filter = new List<isolrquery>();             filter.Add(q1);             filter.Add(q2);             filter.Add(q3);               QueryOptions options=new QueryOptions();             options.Facet = facet;               var qTBO = new SolrMultipleCriteriaQuery(filter, "AND");             SolrQueryResults<solrquotepricecore> results = solr.Query(qTBO, options);                 foreach (var f in results.FacetQueries)             {                 Console.WriteLine("{0}: {1}", f.Key, f.Value);

            }

高级查询场景三(分页)

QueryOptions options = new QueryOptions(); //分页参数 options.Rows = pageNum; //数据条数 options.Start = start;  //开始项    // 拼接相关查询条件  //执行查询  SolrQueryResults<product> results = solr.Query(qTBO, options);   // 得到返回的数据总条数和total和 总页数 用于分页显示, var total = results.NumFound; var pageCount = total / pageNum + 1




版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:Solr 7 部署与使用入门踩坑全记录 | ·下一条:Solr分页与高亮(使用SolrNet实现)

Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有