Lucene 一起使用分类法和 DocValues 切面
Lucene use taxonomy and DocValues facets together
有许多基于分类索引和 DocValues 的方面的使用示例。但是我需要将作为层次结构的类别(taxonomy)和范围查询(NumericDocValuesField)一起使用。
例如 DrillSideways :
DrillSideways ds = new DrillSideways (searcher, config, taxoReader);
DrillSideways.DrillSidewaysResult result = ds.search (q, topScoreDocCollector);
ds.search()的第二个参数是TopScoreDocCollector.
FacetsCollector 在 ds.search() 中创建并且无法将此收集器传递给 ds.search()。传递 MultiCollector.wrap (FacetsCollector, TopScoreDocCollector) 作为 ds.search() 中的第二个参数不正确(?)。但是 FacetsCollector 需要构建分类索引中不可用的方面:
Facets facetsTime = new LongRangeFacetCounts (..., FacetsCollector, ...);
facetsTime.getTopChildren (...);
还列出result.facets包含空值,指的是DocValuesfacet.
也许你有一个工作示例如何在 DrillSideways[=35= 中使用 taxonomy 和 DocValues facets ]一起
DrillSideways
假设您只使用 TaxonomyFacets 或 SortedSetDocValuesFacets。如果不是这种情况,您可以将 DrillSideways 子类化并覆盖 buildFacetsResult
方法来构建您喜欢的最终 Facets。您将获得 DrillDownQuery 的 FacetsCollector 和两个带有横向 FacetCollectors 和 dims 的数组,对于您添加到 DrissSideways 的每个暗淡。
这是一个例子:
public class MyDrillSideways extends DrillSideways {
public MyDrillSideways(IndexSearcher searcher, FacetsConfig config, TaxonomyReader taxoReader) {
super(searcher, config, taxoReader);
}
@Override
protected Facets buildFacetsResult(FacetsCollector drillDowns, FacetsCollector[] drillSideways, String[] drillSidewaysDims) throws IOException {
String longRangeFacetDim = "mySpecialLongRangeDim";
Facets drillDownFacets = new FastTaxonomyFacetCounts(taxoReader, config, drillDowns);
boolean foundLongRangeInDrillSideways = false;
Map<String, Facets> drillSidewaysFacets = new HashMap<>();
if (drillSideways != null) {
for (int i = 0; i < drillSideways.length; i++) {
String sidewaysDim = drillSidewaysDims[i];
FacetsCollector drillSideway = drillSideways[i];
Facets sidewaysFacets;
if (sidewaysDim.equals(longRangeFacetDim)) {
foundLongRangeInDrillSideways = true;
sidewaysFacets = new LongRangeFacetCounts(...,drillSideway,...);
} else {
sidewaysFacets = new FastTaxonomyFacetCounts(taxoReader, config, drillSideway);
}
drillSidewaysFacets.put(sidewaysDim, sidewaysFacets);
}
}
if (!foundLongRangeInDrillSideways) {
Facets facetsTime = new LongRangeFacetCounts(..., FacetsCollector, ...);
drillSidewaysFacets.put(longRangeFacetDim, facetsTime);
}
return new MultiFacets(drillSidewaysFacets, drillDownFacets);
}
}
有许多基于分类索引和 DocValues 的方面的使用示例。但是我需要将作为层次结构的类别(taxonomy)和范围查询(NumericDocValuesField)一起使用。 例如 DrillSideways :
DrillSideways ds = new DrillSideways (searcher, config, taxoReader);
DrillSideways.DrillSidewaysResult result = ds.search (q, topScoreDocCollector);
ds.search()的第二个参数是TopScoreDocCollector.
FacetsCollector 在 ds.search() 中创建并且无法将此收集器传递给 ds.search()。传递 MultiCollector.wrap (FacetsCollector, TopScoreDocCollector) 作为 ds.search() 中的第二个参数不正确(?)。但是 FacetsCollector 需要构建分类索引中不可用的方面:
Facets facetsTime = new LongRangeFacetCounts (..., FacetsCollector, ...);
facetsTime.getTopChildren (...);
还列出result.facets包含空值,指的是DocValuesfacet.
也许你有一个工作示例如何在 DrillSideways[=35= 中使用 taxonomy 和 DocValues facets ]一起
DrillSideways
假设您只使用 TaxonomyFacets 或 SortedSetDocValuesFacets。如果不是这种情况,您可以将 DrillSideways 子类化并覆盖 buildFacetsResult
方法来构建您喜欢的最终 Facets。您将获得 DrillDownQuery 的 FacetsCollector 和两个带有横向 FacetCollectors 和 dims 的数组,对于您添加到 DrissSideways 的每个暗淡。
这是一个例子:
public class MyDrillSideways extends DrillSideways {
public MyDrillSideways(IndexSearcher searcher, FacetsConfig config, TaxonomyReader taxoReader) {
super(searcher, config, taxoReader);
}
@Override
protected Facets buildFacetsResult(FacetsCollector drillDowns, FacetsCollector[] drillSideways, String[] drillSidewaysDims) throws IOException {
String longRangeFacetDim = "mySpecialLongRangeDim";
Facets drillDownFacets = new FastTaxonomyFacetCounts(taxoReader, config, drillDowns);
boolean foundLongRangeInDrillSideways = false;
Map<String, Facets> drillSidewaysFacets = new HashMap<>();
if (drillSideways != null) {
for (int i = 0; i < drillSideways.length; i++) {
String sidewaysDim = drillSidewaysDims[i];
FacetsCollector drillSideway = drillSideways[i];
Facets sidewaysFacets;
if (sidewaysDim.equals(longRangeFacetDim)) {
foundLongRangeInDrillSideways = true;
sidewaysFacets = new LongRangeFacetCounts(...,drillSideway,...);
} else {
sidewaysFacets = new FastTaxonomyFacetCounts(taxoReader, config, drillSideway);
}
drillSidewaysFacets.put(sidewaysDim, sidewaysFacets);
}
}
if (!foundLongRangeInDrillSideways) {
Facets facetsTime = new LongRangeFacetCounts(..., FacetsCollector, ...);
drillSidewaysFacets.put(longRangeFacetDim, facetsTime);
}
return new MultiFacets(drillSidewaysFacets, drillDownFacets);
}
}