diff options
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search')
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(); + } } |