diff options
author | Jon Bratseth <bratseth@gmail.com> | 2020-08-07 13:13:15 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2020-08-07 13:13:15 +0200 |
commit | 56c637c029a35d3f07d45788cfc764812f4b43d3 (patch) | |
tree | 185c6d82d23e06e0f92fdbee49aed10e02c625a0 /container-search/src/main/java/com/yahoo/search | |
parent | 0a5f59230dbece31964dccc132093e59786899cf (diff) |
Check generality correctly on compaction
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search')
3 files changed, 11 insertions, 10 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java b/container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java index 3812cdaac3c..8638a99172f 100644 --- a/container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java +++ b/container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java @@ -90,12 +90,12 @@ public class Binding implements Comparable<Binding> { * Returns whether this binding is a proper generalization of the given binding: * Meaning it contains a proper subset of the given bindings. */ - public boolean generalizes(Binding binding) { - if ( dimensions.length >= binding.dimensions.length) return false; - for (int i = 0; i < dimensions.length; i++) { - int indexOfDimension = indexOf(dimensions[i], binding.dimensions); - if (indexOfDimension < 0) return false; - if ( ! binding.dimensionValues[i].equals(binding.dimensionValues[indexOfDimension])) return false; + public boolean generalizes(Binding other) { + if ( this.dimensions.length >= other.dimensions.length) return false; + for (int i = 0; i < this.dimensions.length; i++) { + int otherIndexOfDimension = this.indexOf(dimensions[i], other.dimensions); + if (otherIndexOfDimension < 0) return false; + if ( ! this.dimensionValues[i].equals(other.dimensionValues[otherIndexOfDimension])) return false; } return true; } diff --git a/container-search/src/main/java/com/yahoo/search/query/profile/compiled/DimensionalValue.java b/container-search/src/main/java/com/yahoo/search/query/profile/compiled/DimensionalValue.java index a44ce2034fc..fb62cfca7d3 100644 --- a/container-search/src/main/java/com/yahoo/search/query/profile/compiled/DimensionalValue.java +++ b/container-search/src/main/java/com/yahoo/search/query/profile/compiled/DimensionalValue.java @@ -179,12 +179,13 @@ public class DimensionalValue<VALUE> { void compact() { Collections.sort(variants); List<Binding> compacted = new ArrayList<>(); + if (variants.get(variants.size() - 1).dimensions().length == 0) { // Shortcut variants = List.of(variants.get(variants.size() - 1)); } else { for (int i = variants.size() - 1; i >= 0; i--) { - if (!containsGeneralizationOf(variants.get(i), compacted)) + if ( ! containsGeneralizationOf(variants.get(i), compacted)) compacted.add(variants.get(i)); } Collections.reverse(compacted); diff --git a/container-search/src/main/java/com/yahoo/search/query/profile/config/QueryProfileXMLReader.java b/container-search/src/main/java/com/yahoo/search/query/profile/config/QueryProfileXMLReader.java index 1b1cdce5890..db6d0560c5f 100644 --- a/container-search/src/main/java/com/yahoo/search/query/profile/config/QueryProfileXMLReader.java +++ b/container-search/src/main/java/com/yahoo/search/query/profile/config/QueryProfileXMLReader.java @@ -45,17 +45,17 @@ public class QueryProfileXMLReader { for (File file : sortFiles(dir)) { if ( ! file.getName().endsWith(".xml")) continue; - queryProfileReaders.add(new NamedReader(file.getName(),new FileReader(file))); + queryProfileReaders.add(new NamedReader(file.getName(), new FileReader(file))); } File typeDir=new File(dir,"types"); if (typeDir.isDirectory()) { for (File file : sortFiles(typeDir)) { if ( ! file.getName().endsWith(".xml")) continue; - queryProfileTypeReaders.add(new NamedReader(file.getName(),new FileReader(file))); + queryProfileTypeReaders.add(new NamedReader(file.getName(), new FileReader(file))); } } - return read(queryProfileTypeReaders,queryProfileReaders); + return read(queryProfileTypeReaders, queryProfileReaders); } catch (IOException e) { throw new IllegalArgumentException("Could not read query profiles from '" + directory + "'", e); |