summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/prelude
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahooinc.com>2022-04-11 11:26:02 +0200
committerGitHub <noreply@github.com>2022-04-11 11:26:02 +0200
commit65dc21685f2286a30c82c7d14c9fe5fe5c42d412 (patch)
treec28d2a5dc1bff4dab1051c163042b84899d2bb2c /container-search/src/main/java/com/yahoo/prelude
parent23841f2517967c1a59cf9826f1de953c5caa7199 (diff)
parent16aaf73dc37c63fa92a3298e6c9f8fa6ed32422a (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')
-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..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);
}
}