1818 */
1919package org .elasticsearch .action .admin .indices ;
2020
21+ import org .apache .lucene .analysis .MockTokenFilter ;
22+ import org .apache .lucene .analysis .TokenStream ;
2123import org .elasticsearch .Version ;
2224import org .elasticsearch .action .admin .indices .analyze .AnalyzeRequest ;
2325import org .elasticsearch .action .admin .indices .analyze .AnalyzeResponse ;
2729import org .elasticsearch .common .settings .Settings ;
2830import org .elasticsearch .env .Environment ;
2931import org .elasticsearch .index .IndexSettings ;
32+ import org .elasticsearch .index .analysis .AbstractTokenFilterFactory ;
3033import org .elasticsearch .index .analysis .AnalysisRegistry ;
3134import org .elasticsearch .index .analysis .IndexAnalyzers ;
35+ import org .elasticsearch .index .analysis .TokenFilterFactory ;
3236import org .elasticsearch .index .mapper .AllFieldMapper ;
3337import org .elasticsearch .indices .analysis .AnalysisModule ;
38+ import org .elasticsearch .indices .analysis .AnalysisModule .AnalysisProvider ;
39+ import org .elasticsearch .plugins .AnalysisPlugin ;
3440import org .elasticsearch .test .ESTestCase ;
3541import org .elasticsearch .test .IndexSettingsModule ;
3642
3743import java .io .IOException ;
3844import java .util .List ;
45+ import java .util .Map ;
3946
40- import static java .util .Collections .emptyList ;
47+ import static java .util .Collections .singletonList ;
48+ import static java .util .Collections .singletonMap ;
4149
50+ /**
51+ * Tests for {@link TransportAnalyzeAction}. See the more "intense" version of this test in the
52+ * {@code common-analysis} module.
53+ */
4254public class TransportAnalyzeActionTests extends ESTestCase {
4355
4456 private IndexAnalyzers indexAnalyzers ;
@@ -53,23 +65,28 @@ public void setUp() throws Exception {
5365 Settings indexSettings = Settings .builder ()
5466 .put (IndexMetaData .SETTING_VERSION_CREATED , Version .CURRENT )
5567 .put (IndexMetaData .SETTING_INDEX_UUID , UUIDs .randomBase64UUID ())
56- .put ("index.analysis.filter.wordDelimiter.type" , "word_delimiter" )
57- .put ("index.analysis.filter.wordDelimiter.split_on_numerics" , false )
58- .put ("index.analysis.analyzer.custom_analyzer.tokenizer" , "whitespace" )
59- .putArray ("index.analysis.analyzer.custom_analyzer.filter" , "lowercase" , "wordDelimiter" )
60- .put ("index.analysis.analyzer.custom_analyzer.tokenizer" , "whitespace" )
61- .putArray ("index.analysis.analyzer.custom_analyzer.filter" , "lowercase" , "wordDelimiter" )
62- .put ("index.analysis.tokenizer.trigram.type" , "ngram" )
63- .put ("index.analysis.tokenizer.trigram.min_gram" , 3 )
64- .put ("index.analysis.tokenizer.trigram.max_gram" , 3 )
65- .put ("index.analysis.filter.synonym.type" , "synonym" )
66- .putArray ("index.analysis.filter.synonym.synonyms" , "kimchy => shay" )
67- .put ("index.analysis.filter.synonym.tokenizer" , "trigram" )
68- .put ("index.analysis.filter.synonym.min_gram" , 3 )
69- .put ("index.analysis.filter.synonym.max_gram" , 3 ).build ();
68+ .put ("index.analysis.analyzer.custom_analyzer.tokenizer" , "standard" )
69+ .put ("index.analysis.analyzer.custom_analyzer.filter" , "mock" ).build ();
7070 IndexSettings idxSettings = IndexSettingsModule .newIndexSettings ("index" , indexSettings );
7171 environment = new Environment (settings );
72- registry = new AnalysisModule (environment , emptyList ()).getAnalysisRegistry ();
72+ AnalysisPlugin plugin = new AnalysisPlugin () {
73+ class MockFactory extends AbstractTokenFilterFactory {
74+ MockFactory (IndexSettings indexSettings , Environment env , String name , Settings settings ) {
75+ super (indexSettings , name , settings );
76+ }
77+
78+ @ Override
79+ public TokenStream create (TokenStream tokenStream ) {
80+ return new MockTokenFilter (tokenStream , MockTokenFilter .ENGLISH_STOPSET );
81+ }
82+ }
83+
84+ @ Override
85+ public Map <String , AnalysisProvider <TokenFilterFactory >> getTokenFilters () {
86+ return singletonMap ("mock" , MockFactory ::new );
87+ }
88+ };
89+ registry = new AnalysisModule (environment , singletonList (plugin )).getAnalysisRegistry ();
7390 indexAnalyzers = registry .build (idxSettings );
7491 }
7592
@@ -143,51 +160,44 @@ public void testFillsAttributes() throws IOException {
143160 }
144161
145162 public void testWithIndexAnalyzers () throws IOException {
146-
147163 AnalyzeRequest request = new AnalyzeRequest ();
148- request .analyzer ("standard" );
149164 request .text ("the quick brown fox" );
150165 request .analyzer ("custom_analyzer" );
151- request .text ("the qu1ck brown fox" );
152166 AnalyzeResponse analyze = TransportAnalyzeAction .analyze (request , AllFieldMapper .NAME , null , indexAnalyzers , registry , environment );
153167 List <AnalyzeResponse .AnalyzeToken > tokens = analyze .getTokens ();
154- assertEquals (4 , tokens .size ());
168+ assertEquals (3 , tokens .size ());
169+ assertEquals ("quick" , tokens .get (0 ).getTerm ());
170+ assertEquals ("brown" , tokens .get (1 ).getTerm ());
171+ assertEquals ("fox" , tokens .get (2 ).getTerm ());
155172
156- request .analyzer ("whitespace" );
157- request .text ("the qu1ck brown fox-dog" );
173+ request .analyzer ("standard" );
158174 analyze = TransportAnalyzeAction .analyze (request , AllFieldMapper .NAME , null , indexAnalyzers , registry , environment );
159175 tokens = analyze .getTokens ();
160176 assertEquals (4 , tokens .size ());
177+ assertEquals ("the" , tokens .get (0 ).getTerm ());
178+ assertEquals ("quick" , tokens .get (1 ).getTerm ());
179+ assertEquals ("brown" , tokens .get (2 ).getTerm ());
180+ assertEquals ("fox" , tokens .get (3 ).getTerm ());
161181
162- request .analyzer ("custom_analyzer" );
163- request .text ("the qu1ck brown fox-dog" );
164- analyze = TransportAnalyzeAction .analyze (request , AllFieldMapper .NAME , null , indexAnalyzers , registry , environment );
165- tokens = analyze .getTokens ();
166- assertEquals (5 , tokens .size ());
167-
182+ // Switch the analyzer out for just a tokenizer
168183 request .analyzer (null );
169- request .tokenizer ("whitespace" );
170- request .addTokenFilter ("lowercase" );
171- request .addTokenFilter ("wordDelimiter" );
172- request .text ("the qu1ck brown fox-dog" );
184+ request .tokenizer ("standard" );
173185 analyze = TransportAnalyzeAction .analyze (request , AllFieldMapper .NAME , null , indexAnalyzers , registry , environment );
174186 tokens = analyze .getTokens ();
175- assertEquals (5 , tokens .size ());
187+ assertEquals (4 , tokens .size ());
176188 assertEquals ("the" , tokens .get (0 ).getTerm ());
177- assertEquals ("qu1ck " , tokens .get (1 ).getTerm ());
189+ assertEquals ("quick " , tokens .get (1 ).getTerm ());
178190 assertEquals ("brown" , tokens .get (2 ).getTerm ());
179191 assertEquals ("fox" , tokens .get (3 ).getTerm ());
180- assertEquals ("dog" , tokens .get (4 ).getTerm ());
181192
182- request .analyzer (null );
183- request .tokenizer ("trigram" );
184- request .addTokenFilter ("synonym" );
185- request .text ("kimchy" );
193+ // Now try applying our token filter
194+ request .addTokenFilter ("mock" );
186195 analyze = TransportAnalyzeAction .analyze (request , AllFieldMapper .NAME , null , indexAnalyzers , registry , environment );
187196 tokens = analyze .getTokens ();
188- assertEquals (2 , tokens .size ());
189- assertEquals ("sha" , tokens .get (0 ).getTerm ());
190- assertEquals ("hay" , tokens .get (1 ).getTerm ());
197+ assertEquals (3 , tokens .size ());
198+ assertEquals ("quick" , tokens .get (0 ).getTerm ());
199+ assertEquals ("brown" , tokens .get (1 ).getTerm ());
200+ assertEquals ("fox" , tokens .get (2 ).getTerm ());
191201 }
192202
193203 public void testGetIndexAnalyserWithoutIndexAnalyzers () throws IOException {
0 commit comments