diff options
Diffstat (limited to 'core/src/main/java/org/elasticsearch/common/lucene/search/function/FieldValueFactorFunction.java')
-rw-r--r-- | core/src/main/java/org/elasticsearch/common/lucene/search/function/FieldValueFactorFunction.java | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/core/src/main/java/org/elasticsearch/common/lucene/search/function/FieldValueFactorFunction.java b/core/src/main/java/org/elasticsearch/common/lucene/search/function/FieldValueFactorFunction.java index 3bc5542c2a..e225df040a 100644 --- a/core/src/main/java/org/elasticsearch/common/lucene/search/function/FieldValueFactorFunction.java +++ b/core/src/main/java/org/elasticsearch/common/lucene/search/function/FieldValueFactorFunction.java @@ -62,7 +62,7 @@ public class FieldValueFactorFunction extends ScoreFunction { public LeafScoreFunction getLeafScoreFunction(LeafReaderContext ctx) { final SortedNumericDoubleValues values; if(indexFieldData == null) { - values = FieldData.emptySortedNumericDoubles(ctx.reader().maxDoc()); + values = FieldData.emptySortedNumericDoubles(); } else { values = this.indexFieldData.load(ctx).getDoubleValues(); } @@ -70,16 +70,16 @@ public class FieldValueFactorFunction extends ScoreFunction { return new LeafScoreFunction() { @Override - public double score(int docId, float subQueryScore) { - values.setDocument(docId); - final int numValues = values.count(); + public double score(int docId, float subQueryScore) throws IOException { double value; - if (numValues > 0) { - value = values.valueAt(0); - } else if (missing != null) { - value = missing; + if (values.advanceExact(docId)) { + value = values.nextValue(); } else { - throw new ElasticsearchException("Missing value for field [" + field + "]"); + if (missing != null) { + value = missing; + } else { + throw new ElasticsearchException("Missing value for field [" + field + "]"); + } } double val = value * boostFactor; double result = modifier.apply(val); @@ -91,7 +91,7 @@ public class FieldValueFactorFunction extends ScoreFunction { } @Override - public Explanation explainScore(int docId, Explanation subQueryScore) { + public Explanation explainScore(int docId, Explanation subQueryScore) throws IOException { String modifierStr = modifier != null ? modifier.toString() : ""; String defaultStr = missing != null ? "?:" + missing : ""; double score = score(docId, subQueryScore.getValue()); |