summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/querytransform/AllLowercasingSearcher.java5
-rw-r--r--container-search/src/main/java/com/yahoo/search/querytransform/LowercasingSearcher.java19
-rw-r--r--container-search/src/main/java/com/yahoo/search/querytransform/VespaLowercasingSearcher.java9
3 files changed, 33 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/querytransform/AllLowercasingSearcher.java b/container-search/src/main/java/com/yahoo/search/querytransform/AllLowercasingSearcher.java
index 0d3eaff7fca..a1574368bc6 100644
--- a/container-search/src/main/java/com/yahoo/search/querytransform/AllLowercasingSearcher.java
+++ b/container-search/src/main/java/com/yahoo/search/querytransform/AllLowercasingSearcher.java
@@ -27,4 +27,9 @@ public class AllLowercasingSearcher extends LowercasingSearcher {
return true;
}
+ @Override
+ public boolean shouldLowercase(String commonPath, WordItem word, IndexFacts.Session settings) {
+ return true;
+ }
+
}
diff --git a/container-search/src/main/java/com/yahoo/search/querytransform/LowercasingSearcher.java b/container-search/src/main/java/com/yahoo/search/querytransform/LowercasingSearcher.java
index 26c52a24e5c..343deef8a55 100644
--- a/container-search/src/main/java/com/yahoo/search/querytransform/LowercasingSearcher.java
+++ b/container-search/src/main/java/com/yahoo/search/querytransform/LowercasingSearcher.java
@@ -54,6 +54,8 @@ public abstract class LowercasingSearcher extends Searcher {
Item next = i.next();
if (next instanceof WordItem) {
lowerCase((WordItem) next, indexFacts);
+ } else if (next instanceof SameElementItem) {
+ traverseSameElement((SameElementItem) next, indexFacts);
} else if (next instanceof CompositeItem) {
traverse((CompositeItem) next, indexFacts);
} else if (next instanceof WeightedSetItem) {
@@ -66,6 +68,15 @@ public abstract class LowercasingSearcher extends Searcher {
}
}
+ private void traverseSameElement(SameElementItem base, IndexFacts.Session indexFacts) {
+ for (Iterator<Item> i = base.getItemIterator(); i.hasNext();) {
+ Item next = i.next();
+ if (next instanceof WordItem) {
+ lowerCase(base.getFieldName(), (WordItem) next, indexFacts);
+ }
+ }
+ }
+
private void lowerCase(WordItem word, IndexFacts.Session indexFacts) {
if (shouldLowercase(word, indexFacts)) {
word.setWord(toLowerCase(word.getWord()));
@@ -73,6 +84,13 @@ public abstract class LowercasingSearcher extends Searcher {
}
}
+ private void lowerCase(String commonPath, WordItem word, IndexFacts.Session indexFacts) {
+ if (shouldLowercase(commonPath, word, indexFacts)) {
+ word.setWord(toLowerCase(word.getWord()));
+ word.setLowercased(true);
+ }
+ }
+
private static final class WeightedSetToken {
final String token;
final String originalToken;
@@ -133,5 +151,6 @@ public abstract class LowercasingSearcher extends Searcher {
* @return whether to convert the term to lower case
*/
public abstract boolean shouldLowercase(WordItem word, IndexFacts.Session indexFacts);
+ public abstract boolean shouldLowercase(String commonPath, WordItem word, IndexFacts.Session indexFacts);
}
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 74dcbb27817..1e8f436a05a 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
@@ -35,4 +35,13 @@ public class VespaLowercasingSearcher extends LowercasingSearcher {
return index.isLowercase() || index.isAttribute();
}
+ @Override
+ 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());
+ Index index = indexFacts.getIndex(sb.toString());
+ return index.isLowercase() || index.isAttribute();
+ }
}