'
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;
});
}
'
下面是我目前的分组代码,但是存在性能问题,每次调用的时间等于一次查询的时间,如果我同时对多个字段进行分组,非常耗时,有没有办法提高速度?
筛选项目多,耗时太长
希望有快速分组结果,或者同时分组
1条答案
按热度按时间vaqhlq811#
1.你必须添加缓存组的值通常不会经常改变。所以最好在执行搜索请求之前预先缓存数据。然后在每次查询相同的信息时使用这些信息。要开发这个,你必须定制lucene引擎(搜索器)。
1.在我的情况下,我使用多面过滤器,而不是组。不同的是,组显示子内容作为树状视图(以上组),过滤器-所有数据显示为一个集合,但可以easely和快速过滤器截图x1c 0d1x
过滤器不是所有问题的答案。没有关于任务的信息,你要解决的分组-所以我不能回答更准确。
因此,尽可能多地缓存-是99%此类问题的答案。可能改变策略以使用方面过滤器-另一种改善问题/情况的方法。