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();
            }
        }
  • 相关阅读:
    oracle-DML-2
    Oracle--DML
    jquery 调用asp.net后台代码
    hdu--1505--稍微特别的子矩阵求和<修改第一次发表的错误>--<增加stack写法>
    hdu--2159--二维费用背包<一维错误解法>
    hdu--2571--dp
    hdu--1231&&1003--dp
    hdu--1251--字典树
    hdu--1075--字典树||map
    hdu--1421--dp&&滚动数组
  • 原文地址:https://www.cnblogs.com/wangwenlong8/p/13022025.html
Copyright © 2011-2022 走看看