@Override
public FunctionValues getValues(Map map, final LeafReaderContext leafReaderContext) throws IOException {
final FunctionValues y=this.valueSources.get(0).getValues(map,leafReaderContext);
final FunctionValues m=this.valueSources.get(1).getValues(map,leafReaderContext);
return new FloatDocValues(this) {
@Override
public float floatVal(int i) {
long year = y.longVal(i);
double money=m.doubleVal(i);
float year_score = ScoreTools.getYearScore(year,maxYears);
float money_socre = ScoreTools.getMoneyScore(money,money_maxTimes,money_base);
// log.info("得分详情:year:{} money:{} year_score:{} money_score:{} total:{}"
// ,year
// ,money,year_score,money_socre
// ,year_score*money_socre);
return year_score*money_socre;
}
};
}
@Override
public FunctionValues getValues(Map<Object, Object> context, LeafReaderContext readerContext) throws IOException {
IndexSearcher searcher = (IndexSearcher)context.get("searcher");
final TFIDFSimilarity similarity = IDFValueSource.asTFIDF(searcher.getSimilarity(), field);
if (similarity == null) {
throw new UnsupportedOperationException("requires a TFIDFSimilarity (such as ClassicSimilarity)");
}
// Only works if the contribution of the tf is 1 when the freq is 1 and contribution of the idf
// is 1 when docCount == docFreq == 1
final SimScorer simScorer = similarity.scorer(1f,
new CollectionStatistics(field, 1, 1, 1, 1),
new TermStatistics(new BytesRef("bogus"), 1, 1));
final LeafSimScorer leafSimScorer = new LeafSimScorer(simScorer, readerContext.reader(), field, true);
return new FloatDocValues(this) {
int lastDocID = -1;
@Override
public float floatVal(int docID) throws IOException {
if (docID < lastDocID) {
throw new AssertionError("docs out of order: lastDocID=" + lastDocID + " docID=" + docID);
}
lastDocID = docID;
return leafSimScorer.score(docID, 1f);
}
};
}