summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/prelude/query
diff options
context:
space:
mode:
authorAlexey Chernyshev <aleksei@spotify.com>2022-04-04 16:23:07 +0200
committerAlexey Chernyshev <aleksei@spotify.com>2022-04-07 14:44:30 +0200
commit7e9b33401201db9a9e22971dd419247e268bbfaa (patch)
treef5032a82e9fa74247b2fdeb3dcde4dc6cf98ce89 /container-search/src/main/java/com/yahoo/prelude/query
parentad7cc1d11f0c19baa2344a643377576c559555f7 (diff)
Propagating annotations for fuzzy query
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.java64
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..fda96aa6ecc 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 DefaultMaxEditDistance = 2;
+ public static int DefaultPrefixLength = 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);
}
}