diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-11-21 12:45:28 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-11-21 12:45:28 +0100 |
commit | bb1ecec95a5b0eb2df37a5925550f1bf776c7521 (patch) | |
tree | d74ab46f6e88565ac6e17ad3b99bc68199101a9e | |
parent | c9377b18f70ba1674b1bc257660905142b045028 (diff) |
Avoid producing nan values when hashing, they do not compare well.
-rw-r--r-- | searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/StringValue.java | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/StringValue.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/StringValue.java index be5b4242042..6325d8d0334 100644 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/StringValue.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/StringValue.java @@ -43,7 +43,12 @@ public class StringValue extends Value { public double asDouble() { XXHash64 hasher = XXHashFactory.fastestInstance().hash64(); byte[] data = value.getBytes(StandardCharsets.UTF_8); - return Double.longBitsToDouble(hasher.hash(data, 0, data.length, 0)); + long h = hasher.hash(data, 0, data.length, 0); + if ((h & 0x7ff0000000000000L) == 0x7ff0000000000000L) { + // Avoid nan + h = h & 0xffefffffffffffffL; + } + return Double.longBitsToDouble(h); } @Override |