diff options
author | Geir Storli <geirst@yahooinc.com> | 2022-04-11 11:26:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-11 11:26:02 +0200 |
commit | 65dc21685f2286a30c82c7d14c9fe5fe5c42d412 (patch) | |
tree | c28d2a5dc1bff4dab1051c163042b84899d2bb2c /container-search/src/main/java/com/yahoo/prelude/query | |
parent | 23841f2517967c1a59cf9826f1de953c5caa7199 (diff) | |
parent | 16aaf73dc37c63fa92a3298e6c9f8fa6ed32422a (diff) |
Merge pull request #21972 from alexeyche/alexeyche/fuzzy-query-annotations
Propagating annotations for fuzzy query [WIP]
Diffstat (limited to 'container-search/src/main/java/com/yahoo/prelude/query')
-rw-r--r-- | container-search/src/main/java/com/yahoo/prelude/query/FuzzyItem.java | 64 |
1 files changed, 48 insertions, 16 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/FuzzyItem.java b/container-search/src/main/java/com/yahoo/prelude/query/FuzzyItem.java index 74c31a5d1f0..b26205b74e9 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/FuzzyItem.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/FuzzyItem.java @@ -1,7 +1,10 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.prelude.query; +import com.yahoo.compress.IntegerCompressor; + import java.nio.ByteBuffer; +import java.util.Objects; /** * Fuzzy search term @@ -11,9 +14,37 @@ import java.nio.ByteBuffer; public class FuzzyItem extends TermItem { private String term; - public FuzzyItem(String indexName, boolean isFromQuery, String term) { + private int maxEditDistance; + private int prefixLength; + + public static int DEFAULT_MAX_EDIT_DISTANCE = 2; + public static int DEFAULT_PREFIX_LENGTH = 0; + + public FuzzyItem(String indexName, boolean isFromQuery, String term, int maxEditDistance, int prefixLength) { super(indexName, isFromQuery, null); setValue(term); + setMaxEditDistance(maxEditDistance); + setPrefixLength(prefixLength); + } + + public void setMaxEditDistance(int maxEditDistance) { + if (maxEditDistance < 0) + throw new IllegalArgumentException("Can not use negative maxEditDistance " + maxEditDistance); + this.maxEditDistance = maxEditDistance; + } + + public void setPrefixLength(int prefixLength) { + if (prefixLength < 0) + throw new IllegalArgumentException("Can not use negative prefixLength " + prefixLength); + this.prefixLength = prefixLength; + } + + public int getPrefixLength() { + return this.prefixLength; + } + + public int getMaxEditDistance() { + return this.maxEditDistance; } @Override @@ -73,35 +104,36 @@ public class FuzzyItem extends TermItem { return false; } FuzzyItem other = (FuzzyItem) obj; - if (term == null) { - if (other.term != null) { - return false; - } - } else if (!term.equals(other.term)) { - return false; - } + if (!this.term.equals(other.term)) return false; + if (this.maxEditDistance != other.maxEditDistance) return false; + if (this.prefixLength != other.prefixLength) return false; return true; } @Override public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + ((term == null) ? 0 : term.hashCode()); - return result; + return Objects.hash(super.hashCode(), term, maxEditDistance, prefixLength); } @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append("FuzzyItem [term=").append(term).append("]"); - return builder.toString(); + protected void appendHeadingString(StringBuilder buffer) { + buffer.append(getName()); + buffer.append("("); + buffer.append(this.term); + buffer.append(","); + buffer.append(this.maxEditDistance); + buffer.append(","); + buffer.append(this.prefixLength); + buffer.append(")"); + buffer.append(" "); } @Override protected void encodeThis(ByteBuffer buffer) { super.encodeThis(buffer); putString(getIndexedString(), buffer); + IntegerCompressor.putCompressedPositiveNumber(this.maxEditDistance, buffer); + IntegerCompressor.putCompressedPositiveNumber(this.prefixLength, buffer); } } |