summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-10-13 13:40:00 +0200
committerJon Bratseth <bratseth@gmail.com>2022-10-13 13:40:00 +0200
commit05b5c4ea50a0a7b63925a94a5f9eddbc116068c2 (patch)
treefaec074a39a6e0e7901ea619f565cbb49b6fd44e /container-search
parentfdd9b30418bfde52377a4589adfa32aa8deba0ee (diff)
Cleanup, and throw better exceptions
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java8
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/SortDataHitSorter.java15
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/Sorting.java40
-rw-r--r--container-search/src/main/java/com/yahoo/search/result/FieldComparator.java47
4 files changed, 46 insertions, 64 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java
index 68ca8385b8a..730e2393b7f 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java
@@ -31,18 +31,18 @@ import java.util.function.BiConsumer;
*/
public class FastHit extends Hit {
- private static final byte [] emptyGID = new byte[GlobalId.LENGTH];
+ private static final byte[] emptyGID = new byte[GlobalId.LENGTH];
/** The index of the content node this hit originated at */
- private int distributionKey = 0;
+ private int distributionKey;
/** The local identifier of the content store for this hit on the node it originated at */
private int partId;
/** The global id of this document in the backend node which produced it */
- private byte [] globalId;
+ private byte[] globalId;
private transient byte[] sortData = null;
- // TODO I suspect this one can be dropped.
+ // TODO: I suspect this one can be dropped.
private transient Sorting sortDataSorting = null;
/**
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/SortDataHitSorter.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/SortDataHitSorter.java
index 6067f85df9b..546a5d724a8 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/SortDataHitSorter.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/SortDataHitSorter.java
@@ -18,15 +18,14 @@ public class SortDataHitSorter {
return;
}
var fallbackComparator = fallbackOrderer.getComparator();
- Collections.sort(hits, getComparator(sorting, fallbackComparator));
+ hits.sort(getComparator(sorting, fallbackComparator));
}
public static boolean isSortable(Hit hit, Sorting sorting) {
if (sorting == null) {
return false;
}
- if (hit instanceof FastHit) {
- var fhit = (FastHit) hit;
+ if (hit instanceof FastHit fhit) {
return fhit.hasSortData(sorting);
} else {
return false;
@@ -42,20 +41,14 @@ public class SortDataHitSorter {
}
private static int compareTwo(Hit left, Hit right, Sorting sorting) {
- if (left == null || right == null || !(left instanceof FastHit) || !(right instanceof FastHit)) {
- return 0;
- }
- FastHit fl = (FastHit) left;
- FastHit fr = (FastHit) right;
+ if (!(left instanceof FastHit fl) || !(right instanceof FastHit fr)) return 0;
return FastHit.compareSortData(fl, fr, sorting);
}
private static int compareWithFallback(Hit left, Hit right, Sorting sorting, Comparator<Hit> fallback) {
- if (left == null || right == null || !(left instanceof FastHit) || !(right instanceof FastHit)) {
+ if (!(left instanceof FastHit fl) || !(right instanceof FastHit fr)) {
return fallback.compare(left, right);
}
- FastHit fl = (FastHit) left;
- FastHit fr = (FastHit) right;
if (fl.hasSortData(sorting) && fr.hasSortData(sorting)) {
return FastHit.compareSortData(fl, fr, sorting);
} else {
diff --git a/container-search/src/main/java/com/yahoo/search/query/Sorting.java b/container-search/src/main/java/com/yahoo/search/query/Sorting.java
index 6b07b5ef1d5..ffaadebc443 100644
--- a/container-search/src/main/java/com/yahoo/search/query/Sorting.java
+++ b/container-search/src/main/java/com/yahoo/search/query/Sorting.java
@@ -161,6 +161,7 @@ public class Sorting implements Cloneable {
*/
public List<FieldOrder> fieldOrders() { return fieldOrders; }
+ @Override
public Sorting clone() {
return new Sorting(this.fieldOrders);
}
@@ -173,9 +174,7 @@ public class Sorting implements Cloneable {
@Override
public boolean equals(Object o) {
if (o == this) return true;
- if( ! (o instanceof Sorting)) return false;
-
- Sorting ss = (Sorting) o;
+ if( ! (o instanceof Sorting ss)) return false;
return fieldOrders.equals(ss.fieldOrders);
}
@@ -305,15 +304,14 @@ public class Sorting implements Cloneable {
public UcaSorter(String fieldName) { super(fieldName); }
static private int strength2Collator(Strength strength) {
- switch (strength) {
- case PRIMARY: return Collator.PRIMARY;
- case SECONDARY: return Collator.SECONDARY;
- case TERTIARY: return Collator.TERTIARY;
- case QUATERNARY: return Collator.QUATERNARY;
- case IDENTICAL: return Collator.IDENTICAL;
- case UNDEFINED: return Collator.PRIMARY;
- }
- return Collator.PRIMARY;
+ return switch (strength) {
+ case PRIMARY -> Collator.PRIMARY;
+ case SECONDARY -> Collator.SECONDARY;
+ case TERTIARY -> Collator.TERTIARY;
+ case QUATERNARY -> Collator.QUATERNARY;
+ case IDENTICAL -> Collator.IDENTICAL;
+ case UNDEFINED -> Collator.PRIMARY;
+ };
}
public void setLocale(String locale, Strength strength) {
@@ -323,15 +321,15 @@ public class Sorting implements Cloneable {
try {
uloc = new ULocale(locale);
} catch (Throwable e) {
- throw new RuntimeException("ULocale("+locale+") failed with exception " + e.toString());
+ throw new IllegalArgumentException("ULocale '" + locale + "' failed", e);
}
try {
collator = Collator.getInstance(uloc);
if (collator == null) {
- throw new RuntimeException("No collator available for: " + locale);
+ throw new IllegalArgumentException("No collator available for locale '" + locale + "'");
}
} catch (Throwable e) {
- throw new RuntimeException("Collator.getInstance(ULocale("+locale+")) failed with exception " + e.toString());
+ throw new RuntimeException("Collator.getInstance(ULocale(" + locale + ")) failed", e);
}
collator.setStrength(strength2Collator(strength));
// collator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);
@@ -343,19 +341,22 @@ public class Sorting implements Cloneable {
public String getDecomposition() { return (collator.getDecomposition() == Collator.CANONICAL_DECOMPOSITION) ? "CANONICAL_DECOMPOSITION" : "NO_DECOMPOSITION"; }
@Override
- public String toSerialForm() { return "uca(" + getName() + ',' + locale + ',' + ((strength != Strength.UNDEFINED) ? strength.toString() : "PRIMARY") + ')'; }
+ public String toSerialForm() {
+ return "uca(" + getName() + ',' + locale + ',' +
+ ((strength != Strength.UNDEFINED) ? strength.toString() : "PRIMARY") + ')';
+ }
@Override
public int hashCode() { return 1 + 3*locale.hashCode() + 5*strength.hashCode() + 7*super.hashCode(); }
@Override
public boolean equals(Object other) {
- if (!(other instanceof UcaSorter)) {
- return false;
- }
+ if (this == other) return true;
+ if (!(other instanceof UcaSorter)) return false;
return super.equals(other) && locale.equals(((UcaSorter)other).locale) && (strength == ((UcaSorter)other).strength);
}
+ @Override
public UcaSorter clone() {
UcaSorter clone = (UcaSorter)super.clone();
if (locale != null) {
@@ -365,6 +366,7 @@ public class Sorting implements Cloneable {
}
@SuppressWarnings({ "rawtypes", "unchecked" })
+ @Override
public int compare(Comparable a, Comparable b) {
if ((a instanceof String) && (b instanceof String)) {
return collator.compare((String)a, (String) b);
diff --git a/container-search/src/main/java/com/yahoo/search/result/FieldComparator.java b/container-search/src/main/java/com/yahoo/search/result/FieldComparator.java
index 0259dd66dbe..7f392d43753 100644
--- a/container-search/src/main/java/com/yahoo/search/result/FieldComparator.java
+++ b/container-search/src/main/java/com/yahoo/search/result/FieldComparator.java
@@ -17,7 +17,7 @@ import java.util.Comparator;
public class FieldComparator extends ChainableComparator {
/** The definition of sorting order */
- private Sorting sorting;
+ private final Sorting sorting;
/** Creates a field comparator using a sort order and having no chained comparator */
public FieldComparator(Sorting sorting) {
@@ -32,7 +32,7 @@ public class FieldComparator extends ChainableComparator {
/** Creates a comparator given a sorting, or returns null if the given sorting is null */
public static FieldComparator create(Sorting sorting) {
- if (sorting==null) return null;
+ if (sorting == null) return null;
return new FieldComparator(sorting);
}
@@ -41,7 +41,7 @@ public class FieldComparator extends ChainableComparator {
* stored in hit fields.0
* <p>
* When one of the hits has the requested property and the other
- * has not, the the hit containing the property precedes the one
+ * has not, the hit containing the property precedes the one
* that does not.
* <p>
* There is no locale based sorting here, as the backend does
@@ -78,19 +78,14 @@ public class FieldComparator extends ChainableComparator {
}
Inspector sub = top.field(key);
if (sub.valid()) {
- switch (sub.type()) {
- case EMPTY:
- return null;
- case BOOL:
- return (sub.asBool() ? Boolean.TRUE : Boolean.FALSE);
- case LONG:
- return sub.asLong();
- case DOUBLE:
- return sub.asDouble();
- case STRING:
- return sub.asString();
- }
- return sub.toString();
+ return switch (sub.type()) {
+ case EMPTY -> null;
+ case BOOL -> (sub.asBool() ? Boolean.TRUE : Boolean.FALSE);
+ case LONG -> sub.asLong();
+ case DOUBLE -> sub.asDouble();
+ case STRING -> sub.asString();
+ default -> sub.toString();
+ };
}
}
// fallback value
@@ -115,15 +110,14 @@ public class FieldComparator extends ChainableComparator {
@SuppressWarnings("rawtypes")
private int compareValues(Object first, Object second, Sorting.AttributeSorter s) {
- if (first == null) {
- if (second == null) return 0;
- return -1;
- } else if (second == null) {
+ if (first == null)
+ return second == null ? 0 : -1;
+ else if (second == null)
return 1;
- }
+
if (first.getClass().isInstance(second) && first instanceof Comparable) {
// We now know:
- // second is of a type which is a subclass of first's type
+ // Second is of a type which is a subclass of first's type
// They both implement Comparable
return s.compare((Comparable)first, (Comparable)second);
} else {
@@ -133,14 +127,7 @@ public class FieldComparator extends ChainableComparator {
@Override
public String toString() {
- StringBuilder b = new StringBuilder();
- b.append("FieldComparator:");
- if (sorting == null) {
- b.append(" null");
- } else {
- b.append(sorting.toString());
- }
- return b.toString();
+ return "FieldComparator:" + (sorting == null ? " null" : sorting.toString());
}
}