Lucene:facet范围取决于返回的结果

Lucene:facet范围取决于返回的结果,lucene,lucene.net,facet,Lucene,Lucene.net,Facet,我设置了一个工作搜索,在那里我给出了刻面范围,并得到了正确的结果。 问题是,对于价格方面,我需要依赖于返回的结果,所以我无法事先知道范围 示例1:搜索发现4种产品的价格如下:20、30、40、55。因此,我希望这些方面是这样的: 0 - 20 (1) 21 - 40 (2) 41 - 60 (1) 100 - 200 (1) 300 - 400 (1) 示例2:搜索发现了两种产品,价格如下:200400,所以我希望这些方面是这样的: 0 - 20 (1) 21 - 40 (2) 41 - 6

我设置了一个工作搜索,在那里我给出了刻面范围,并得到了正确的结果。 问题是,对于价格方面,我需要依赖于返回的结果,所以我无法事先知道范围

示例1:搜索发现4种产品的价格如下:20、30、40、55。因此,我希望这些方面是这样的:

0 - 20 (1)
21 - 40 (2)
41 - 60 (1)
100 - 200 (1)
300 - 400 (1)
示例2:搜索发现了两种产品,价格如下:200400,所以我希望这些方面是这样的:

0 - 20 (1)
21 - 40 (2)
41 - 60 (1)
100 - 200 (1)
300 - 400 (1)
在Lucene的某个地方,我可以指定我希望范围基于搜索结果中的字段吗


谢谢

经过多次搜索,我没有找到现成的方法。 这样做的方法是横向扩展
drillways
,在
BuildFacetsResult
方法的开头,我们提取具有必要值的字段。大概是这样的:

公共级侧钻搁置器:侧钻
{
私有TopFieldCollector\u localCollector;
私人价目表;
受保护的覆盖LuceneFacets BuildFacetsResult(FacetsCollector drillDownCollector,FacetsCollector[]DrillSideways Collectors,
管柱[]侧钻面)
{
ExtractResults();//这里我们从_localCollector中提取方法并填充_prices
……在这里,我们可以根据_价格生成刻面范围
}
公共FaceResultSet OurSearch(DrillDownQuery DrillDownQuery,排序)
{
int limit=m_searcher.IndexReader.MaxDoc;
_localCollector=TopFieldCollector.Create(排序、限制、空、真、真、假、真);
var drillSidewaysResult=Search(drillDownQuery,_localCollector);
变量面=提取面(钻侧结果面);
返回新的FacetResultSet(_results,(uint)_localCollector.TotalHits,facets);
}
}
使用方法:

var drillSideways=新的DrillSidewaysHelper(搜索者、facetsConfig、taxonomyReader);
返回drillSideways.OurSearch(drillDownQuery,sort);