From 71264c62399aa37aa44f2ac10f2da071d9819c24 Mon Sep 17 00:00:00 2001 From: Adrien Grand Date: Wed, 31 May 2017 09:09:53 +0200 Subject: [PATCH] PatternAnalyzer should lowercase wildcard queries when `lowercase` is true. (#24967) --- .../elasticsearch/index/analysis/PatternAnalyzer.java | 9 +++++++++ .../index/analysis/PatternAnalyzerTests.java | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/core/src/main/java/org/elasticsearch/index/analysis/PatternAnalyzer.java b/core/src/main/java/org/elasticsearch/index/analysis/PatternAnalyzer.java index 7554f459bfa..5d4d9f2df3f 100644 --- a/core/src/main/java/org/elasticsearch/index/analysis/PatternAnalyzer.java +++ b/core/src/main/java/org/elasticsearch/index/analysis/PatternAnalyzer.java @@ -53,4 +53,13 @@ public final class PatternAnalyzer extends Analyzer { } return new TokenStreamComponents(tokenizer, stream); } + + @Override + protected TokenStream normalize(String fieldName, TokenStream in) { + TokenStream stream = in; + if (lowercase) { + stream = new LowerCaseFilter(stream); + } + return stream; + } } diff --git a/core/src/test/java/org/elasticsearch/index/analysis/PatternAnalyzerTests.java b/core/src/test/java/org/elasticsearch/index/analysis/PatternAnalyzerTests.java index ab0a24d9dd8..d80cbf66c34 100644 --- a/core/src/test/java/org/elasticsearch/index/analysis/PatternAnalyzerTests.java +++ b/core/src/test/java/org/elasticsearch/index/analysis/PatternAnalyzerTests.java @@ -21,6 +21,7 @@ package org.elasticsearch.index.analysis; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.core.StopAnalyzer; +import org.apache.lucene.util.BytesRef; import org.elasticsearch.test.ESTokenStreamTestCase; import java.io.IOException; @@ -111,4 +112,11 @@ public class PatternAnalyzerTests extends ESTokenStreamTestCase { Analyzer a = new PatternAnalyzer(Pattern.compile(","), true, StopAnalyzer.ENGLISH_STOP_WORDS_SET); checkRandomData(random(), a, 10000*RANDOM_MULTIPLIER); } + + public void testNormalize() { + PatternAnalyzer a = new PatternAnalyzer(Pattern.compile("\\s+"), false, null); + assertEquals(new BytesRef("FooBar"), a.normalize("dummy", "FooBar")); + a = new PatternAnalyzer(Pattern.compile("\\s+"), true, null); + assertEquals(new BytesRef("foobar"), a.normalize("dummy", "FooBar")); + } }