com.browseengine.bobo.facets.range.MultiRangeFacetHandler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bobo-browse Show documentation
Show all versions of bobo-browse Show documentation
Bobo is a Faceted Search implementation written purely in Java, an extension of Apache Lucene
The newest version!
package com.browseengine.bobo.facets.range;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.apache.lucene.index.Term;
import com.browseengine.bobo.api.BoboSegmentReader;
import com.browseengine.bobo.api.BoboSegmentReader.WorkArea;
import com.browseengine.bobo.api.BrowseSelection;
import com.browseengine.bobo.api.FacetSpec;
import com.browseengine.bobo.facets.FacetCountCollector;
import com.browseengine.bobo.facets.FacetCountCollectorSource;
import com.browseengine.bobo.facets.data.MultiValueFacetDataCache;
import com.browseengine.bobo.facets.data.TermListFactory;
import com.browseengine.bobo.facets.filter.FacetRangeFilter;
import com.browseengine.bobo.facets.filter.RandomAccessFilter;
import com.browseengine.bobo.facets.impl.MultiValueFacetHandler.MultiValueDocScorer;
import com.browseengine.bobo.facets.impl.RangeFacetCountCollector;
import com.browseengine.bobo.facets.impl.RangeFacetHandler;
import com.browseengine.bobo.query.scoring.BoboDocScorer;
import com.browseengine.bobo.query.scoring.FacetTermScoringFunctionFactory;
import com.browseengine.bobo.sort.DocComparatorSource;
import com.browseengine.bobo.util.BigNestedIntArray;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class MultiRangeFacetHandler extends RangeFacetHandler {
private final Term sizePayloadTerm;
private int maxItems = BigNestedIntArray.MAX_ITEMS;
public MultiRangeFacetHandler(String name, String indexFieldName, Term sizePayloadTerm,
TermListFactory termListFactory, List predefinedRanges) {
super(name, indexFieldName, termListFactory, predefinedRanges);
this.sizePayloadTerm = sizePayloadTerm;
}
@Override
public DocComparatorSource getDocComparatorSource() {
return new MultiValueFacetDataCache.MultiFacetDocComparatorSource(new MultiDataCacheBuilder(
getName(), _indexFieldName));
}
@Override
public String[] getFieldValues(BoboSegmentReader reader, int id) {
MultiValueFacetDataCache dataCache = getFacetData(reader);
if (dataCache != null) {
return dataCache._nestedArray.getTranslatedData(id, dataCache.valArray);
}
return new String[0];
}
@Override
public Object[] getRawFieldValues(BoboSegmentReader reader, int id) {
MultiValueFacetDataCache dataCache = getFacetData(reader);
if (dataCache != null) {
return dataCache._nestedArray.getRawData(id, dataCache.valArray);
}
return new String[0];
}
@Override
public MultiValueFacetDataCache getFacetData(BoboSegmentReader reader) {
return (MultiValueFacetDataCache) reader.getFacetData(_name);
}
@Override
public RandomAccessFilter buildRandomAccessFilter(String value, Properties prop)
throws IOException {
return new FacetRangeFilter(this, value);
}
@Override
public FacetCountCollectorSource getFacetCountCollectorSource(final BrowseSelection sel,
final FacetSpec ospec) {
return new FacetCountCollectorSource() {
@Override
public FacetCountCollector getFacetCountCollector(BoboSegmentReader reader, int docBase) {
MultiValueFacetDataCache dataCache = getFacetData(reader);
final BigNestedIntArray _nestedArray = dataCache._nestedArray;
return new RangeFacetCountCollector(_name, dataCache, docBase, ospec, _predefinedRanges) {
@Override
public void collect(int docid) {
_nestedArray.countNoReturn(docid, _count);
}
};
}
};
}
@Override
public BoboDocScorer getDocScorer(BoboSegmentReader reader,
FacetTermScoringFunctionFactory scoringFunctionFactory, Map boostMap) {
MultiValueFacetDataCache dataCache = getFacetData(reader);
float[] boostList = BoboDocScorer.buildBoostList(dataCache.valArray, boostMap);
return new MultiValueDocScorer(dataCache, scoringFunctionFactory, boostList);
}
@Override
public MultiValueFacetDataCache load(BoboSegmentReader reader) throws IOException {
return load(reader, new WorkArea());
}
@Override
public MultiValueFacetDataCache load(BoboSegmentReader reader, WorkArea workArea)
throws IOException {
MultiValueFacetDataCache dataCache = new MultiValueFacetDataCache();
dataCache.setMaxItems(maxItems);
if (sizePayloadTerm == null) {
dataCache.load(_indexFieldName, reader, _termListFactory, workArea);
} else {
dataCache.load(_indexFieldName, reader, _termListFactory, sizePayloadTerm);
}
return dataCache;
}
public void setMaxItems(int maxItems) {
this.maxItems = maxItems;
}
}