zoukankan      html  css  js  c++  java
  • SolrNet Group分组 实现

    文中使用的Solr版本是7.2.1 ;SolrNet版本是1.0.8.0 (nuget获取)

    检索语句:

    Solr普通检索:

    domain/select?q=*:*
    

    在Solr中使用分组检索

    domain/select?q=*:*&group=true&group.field=分组字段&group.limit=1&group.ngroups=true
    

    在Solr中看检索结果:

    Solr的普通检索和分组检索结果集合并不相同,一个是集合,一个是字典

    普通检索的结果

    分组检索的结果:

    使用SolrNet方法

    普通检索:

     var result = solr.Query(查询条件组合, 操作组合);
    

    分组检索
    注:只摘出一部分代码

              //分组设置
                GroupingParameters groupingParameters = new GroupingParameters();
                groupingParameters.Limit = 1;  //限制结果每个分组只有一个结果
                groupingParameters.Fields = new List<string>();
                groupingParameters.Fields.Add("分组字段");
                groupingParameters.Ngroups = true; //用于返回得到的分组数,可用于分页
    
               QueryOptions options = new QueryOptions();
               options.Grouping = groupingParameters;
    
                var result = solr.Query(排序集合, 操作组合); //此时得到的result.NumFound值为1
                foreach (var item in result.Grouping)
                {
                    if (string.IsNullOrEmpty(item.Key) == false)
                    {
                        var tmpResult = item.Value.Groups;
                        total = item.Value.Ngroups.ToInt(0);//这个才是得到的分组总数量
                        foreach (var doc in item.Value.Groups)
                        {
                            resultEntity.AddRange(doc.Documents);
                        }
                    }
                }
    

     2.

    public  class SolrNetOperate
        {
            static SolrNetOperate()
            {
                Startup.Init<LogItems>("http://000.000.000.000:8080/solr/logs");
            }
    
            /// <summary>
            /// </summary>
            /// <param name="dictPars">查询参数字典</param>
            /// <param name="start">分页开始标识</param>
            /// <param name="rows">每页数量</param>
            /// <param name="startTime">开始时间</param>
            /// <param name="endTime">结束时间</param>
            /// <param name="count">输出参数 总个数</param>
            /// <returns></returns>
            /// <remarks>oldman 2015年7月23日14:11:43</remarks>
            public static List<int> GroupingSerach(Dictionary<string, string> dictPars, int start, int rows,
                DateTime startTime, DateTime endTime, out int count)
            {
                //定义solr
                var solr = ServiceLocator.Current.GetInstance<ISolrOperations<LogItems>>();
                var queryOptions = new QueryOptions();
                //定义分组
                var groupingParameters = new GroupingParameters();
                groupingParameters.Fields = new Collection<string> { "logs_id" };
                groupingParameters.Ngroups = true; //设置查询分组的总个数为true
                //定义过滤条件
                var timeRange = new SolrQueryByRange<DateTime>("logs_time", startTime, endTime);
                queryOptions.AddFilterQueries(timeRange);
                foreach (string key in dictPars.Keys)
                {
                    queryOptions.AddFilterQueries(new SolrQueryByField(key, dictPars[key]));
                }
                //定义排序
                queryOptions.OrderBy = new Collection<SortOrder> { new SortOrder("logs_id", Order.DESC) };
                queryOptions.Grouping = groupingParameters;
                queryOptions.Start = start;
                queryOptions.Rows = rows;
                SolrQueryResults<LogItems> res = solr.Query(SolrQuery.All, queryOptions);
                GroupedResults<LogItems> items = res.Grouping["logs_id"];
                count = items.Ngroups ?? 0;
                return items.Groups.Select(item => Convert.ToInt32(item.GroupValue)).ToList();
            }
        }
  • 相关阅读:
    mysql 历史版本下载
    mysql 5.7 版本 You must reset your password using ALTER USER statement before executing this statement报错处理
    5.7 zip 版本的安装 以及遇到的坑
    mysql 5.6zip版本的卸载与5.7 zip 版本的安装
    mysql数据库的备份与还原
    本地Navicat连接docker里的mysql
    docker修改数据库密码
    docker 在push镜像到本地registry出现的500 Internal Server Error
    linux 没有界面内容显示不全解决办法
    json与map互相转换
  • 原文地址:https://www.cnblogs.com/wangwenlong8/p/13022025.html
Copyright © 2011-2022 走看看