在www.example.com上分组Lucene.net

x8diyxa7  于 2022-12-14  发布在  .NET
关注(0)|答案(1)|浏览(131)

'

public static async Task<List<string>> SearchGroup(string filedName, Query bq, Filter fil, IndexSearcher searcher)
        {
            //分组的最大数量
            int groupNum = 100;
            return await Task.Run(() =>
            {
                GroupingSearch groupingSearch = new GroupingSearch(filedName);
                groupingSearch.SetCachingInMB(8192, cacheScores: true);
                //不做排序,浪费性能
                //groupingSearch.SetGroupSort(new Sort(new SortField("name", SortFieldType.STRING)));
                groupingSearch.SetGroupDocsLimit(groupNum);
                ITopGroups<BytesRef> topGroups = groupingSearch.SearchByField(searcher, fil, bq, groupOffset: 0, groupNum);
                List<string> groups = new List<string>();
                foreach (var groupDocs in topGroups.Groups.Take(groupNum))
                {
                    if (groupDocs.GroupValue != null)
                    {
                        groups.Add(groupDocs.GroupValue.Utf8ToString());
                    }
                }
                return groups;
            });
        }

'
下面是我目前的分组代码,但是存在性能问题,每次调用的时间等于一次查询的时间,如果我同时对多个字段进行分组,非常耗时,有没有办法提高速度?

筛选项目多,耗时太长
希望有快速分组结果,或者同时分组

vaqhlq81

vaqhlq811#

1.你必须添加缓存组的值通常不会经常改变。所以最好在执行搜索请求之前预先缓存数据。然后在每次查询相同的信息时使用这些信息。要开发这个,你必须定制lucene引擎(搜索器)。
1.在我的情况下,我使用多面过滤器,而不是组。不同的是,组显示子内容作为树状视图(以上组),过滤器-所有数据显示为一个集合,但可以easely和快速过滤器截图x1c 0d1x
过滤器不是所有问题的答案。没有关于任务的信息,你要解决的分组-所以我不能回答更准确。
因此,尽可能多地缓存-是99%此类问题的答案。可能改变策略以使用方面过滤器-另一种改善问题/情况的方法。

相关问题