Author: tommaso
Date: Thu Nov 22 16:08:14 2018
New Revision: 1847186
URL: http://svn.apache.org/viewvc?rev=1847186&view=rev
Log:
OAK-7824 - make sure binary value is not null in reranking
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/fv/SimSearchUtils.java
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/fv/SimSearchUtils.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/fv/SimSearchUtils.java?rev=1847186&r1=1847185&r2=1847186&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/fv/SimSearchUtils.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/fv/SimSearchUtils.java
Thu Nov 22 16:08:14 2018
@@ -241,19 +241,21 @@ public class SimSearchUtils {
for (PropertyDefinition pd : sp) {
String fieldName =
FieldNames.createBinSimilarityFieldName(pd.name);
BytesRef binaryValue =
indexSearcher.doc(inputDoc.doc).getBinaryValue(fieldName);
- double[] inputVector = toDoubleArray(binaryValue.bytes);
- for (int j = 0; j < docs.scoreDocs.length; j++) {
- double[] currentVector =
toDoubleArray(indexSearcher.doc(docs.scoreDocs[j].doc)
- .getBinaryValue(fieldName).bytes);
- double distance = dist(inputVector, currentVector) + 1e-10; //
constant term to avoid division by zero
+ if (binaryValue != null) {
+ double[] inputVector = toDoubleArray(binaryValue.bytes);
+ for (int j = 0; j < docs.scoreDocs.length; j++) {
+ double[] currentVector =
toDoubleArray(indexSearcher.doc(docs.scoreDocs[j].doc)
+ .getBinaryValue(fieldName).bytes);
+ double distance = dist(inputVector, currentVector) +
1e-10; // constant term to avoid division by zero
- if (distance > farthestDistance) { // a threshold distance
above which current vector is discarded
- toDiscard.add(docs.scoreDocs[j].doc);
+ if (distance > farthestDistance) { // a threshold distance
above which current vector is discarded
+ toDiscard.add(docs.scoreDocs[j].doc);
+ }
+ if (Double.isNaN(distance) || Double.isInfinite(distance))
{
+ toDiscard.add(docs.scoreDocs[j].doc);
+ }
+ docs.scoreDocs[j].score += (float) (1d / distance); //
additive similarity boosting
}
- if (Double.isNaN(distance) || Double.isInfinite(distance)) {
- toDiscard.add(docs.scoreDocs[j].doc);
- }
- docs.scoreDocs[j].score += (float) (1d / distance); //
additive similarity boosting
}
}
if (!toDiscard.isEmpty()) {