diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-11-02 13:41:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-02 13:41:23 +0100 |
commit | 13a0217c1d9c12ef3294fd9829170ffa5a72e757 (patch) | |
tree | bf44466b0d671533aab48bc12ab8e7ad37fda2c8 | |
parent | 522935f83ecfa8ed6f0e55859ecb9330d012c73b (diff) | |
parent | 64f873722431a8eb666b0df264eabe98e23931ed (diff) |
Merge pull request #24711 from vespa-engine/bratseth/cased-index
Support match:cased on index fields
3 files changed, 52 insertions, 6 deletions
diff --git a/config-model/src/main/java/com/yahoo/schema/derived/IndexInfo.java b/config-model/src/main/java/com/yahoo/schema/derived/IndexInfo.java index 277858bed26..54c503a0bbd 100644 --- a/config-model/src/main/java/com/yahoo/schema/derived/IndexInfo.java +++ b/config-model/src/main/java/com/yahoo/schema/derived/IndexInfo.java @@ -189,9 +189,9 @@ public class IndexInfo extends Derived implements IndexInfoConfig.Producer { } private static boolean needLowerCase(ImmutableSDField field) { - return field.doesIndexing() - || field.doesLowerCasing() - || ((field.doesAttributing() || (field.getAttribute() != null)) + return ( field.doesIndexing() && field.getMatching().getCase() != Case.CASED) + || field.doesLowerCasing() + || ((field.doesAttributing() || (field.getAttribute() != null)) && isAnyChildString(field.getDataType()) && field.getMatching().getCase().equals(Case.UNCASED)); } diff --git a/config-model/src/test/java/com/yahoo/schema/derived/CasedIndexTestCase.java b/config-model/src/test/java/com/yahoo/schema/derived/CasedIndexTestCase.java new file mode 100644 index 00000000000..68a5a7b26db --- /dev/null +++ b/config-model/src/test/java/com/yahoo/schema/derived/CasedIndexTestCase.java @@ -0,0 +1,48 @@ +package com.yahoo.schema.derived; + +import com.yahoo.schema.ApplicationBuilder; +import com.yahoo.search.config.IndexInfoConfig; +import org.junit.jupiter.api.Test; + +import java.util.Set; +import java.util.stream.Collectors; + +import static org.junit.jupiter.api.Assertions.assertFalse; + +/** + * @author bratseth + */ +public class CasedIndexTestCase { + + @Test + public void testCasedIndexDeriving() throws Exception { + var b = new ApplicationBuilder(); + b.addSchema(""" + schema test { + document test { + field a type string { + indexing: summary | index + match: cased + } + } + } + """); + var application = b.build(true); + var config = new DerivedConfiguration(application.schemas().get("test"), b.getRankProfileRegistry()); + var indexInfo = config.getIndexInfo(); + var indexInfoConfigBuilder = new IndexInfoConfig.Builder(); + indexInfo.getConfig(indexInfoConfigBuilder); + assertFalse(commandsOf("test", "a", indexInfoConfigBuilder).contains("lowercase")); + } + + private Set<String> commandsOf(String schema, String field, IndexInfoConfig.Builder indexInfoConfigBuilder) { + var schemaIndexInfo = indexInfoConfigBuilder.build().indexinfo().stream() + .filter(c -> c.name().equals(schema)) + .findAny().get(); + return schemaIndexInfo.command().stream() + .filter(c -> c.indexname().equals(field)) + .map(c -> c.command()) + .collect(Collectors.toSet()); + } + +} diff --git a/container-search/src/main/java/com/yahoo/search/querytransform/VespaLowercasingSearcher.java b/container-search/src/main/java/com/yahoo/search/querytransform/VespaLowercasingSearcher.java index 51d06e74184..d0749630807 100644 --- a/container-search/src/main/java/com/yahoo/search/querytransform/VespaLowercasingSearcher.java +++ b/container-search/src/main/java/com/yahoo/search/querytransform/VespaLowercasingSearcher.java @@ -38,9 +38,7 @@ public class VespaLowercasingSearcher extends LowercasingSearcher { public boolean shouldLowercase(String commonPath, WordItem word, IndexFacts.Session indexFacts) { if (word.isLowercased()) return false; - StringBuilder sb = new StringBuilder(); - sb.append(commonPath).append(".").append(word.getIndexName()); - return indexFacts.getIndex(sb.toString()).isLowercase(); + return indexFacts.getIndex(commonPath + "." + word.getIndexName()).isLowercase(); } } |