summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-11-02 13:41:23 +0100
committerGitHub <noreply@github.com>2022-11-02 13:41:23 +0100
commit13a0217c1d9c12ef3294fd9829170ffa5a72e757 (patch)
treebf44466b0d671533aab48bc12ab8e7ad37fda2c8
parent522935f83ecfa8ed6f0e55859ecb9330d012c73b (diff)
parent64f873722431a8eb666b0df264eabe98e23931ed (diff)
Merge pull request #24711 from vespa-engine/bratseth/cased-index
Support match:cased on index fields
-rw-r--r--config-model/src/main/java/com/yahoo/schema/derived/IndexInfo.java6
-rw-r--r--config-model/src/test/java/com/yahoo/schema/derived/CasedIndexTestCase.java48
-rw-r--r--container-search/src/main/java/com/yahoo/search/querytransform/VespaLowercasingSearcher.java4
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();
}
}