@@ -325,12 +325,6 @@ public void testRebuildIfNecessary() throws IOException {
325325 assertSame (noReloadingEither , AnalysisRegistry .rebuildIfNecessary (noReloadingEither , null , null , null , null ));
326326
327327
328- Settings indexSettings = Settings .builder ().put (IndexMetaData .SETTING_VERSION_CREATED , Version .CURRENT )
329- .put (IndexMetaData .SETTING_NUMBER_OF_SHARDS , 1 ).put (IndexMetaData .SETTING_NUMBER_OF_REPLICAS , 1 )
330- .put ("index.analysis.analyzer.reloadableAnalyzer.type" , "custom" )
331- .put ("index.analysis.analyzer.reloadableAnalyzer.tokenizer" , "standard" )
332- .putList ("index.analysis.analyzer.reloadableAnalyzer.filter" , "myReloadableFilter" ).build ();
333-
334328 final AtomicInteger factoryCounter = new AtomicInteger (0 );
335329 TestAnalysis testAnalysis = createTestAnalysis (new Index ("test" , "_na_" ), Settings .EMPTY , new AnalysisPlugin () {
336330
@@ -351,9 +345,14 @@ public TokenFilterFactory get(IndexSettings indexSettings, Environment environme
351345 tokenFilters [0 ] = testAnalysis .tokenFilter .get ("myReloadableFilter" );
352346 NamedAnalyzer reloadableAnalyzer = new NamedAnalyzer ("reloadableAnalyzer" , AnalyzerScope .INDEX ,
353347 new CustomAnalyzer ("tokenizer" , null , null , tokenFilters ));
354- IndexSettings indexSetings = new IndexSettings (IndexMetaData .builder ("testIndex" ).settings (indexSettings ).build (), indexSettings );
348+ Settings settings = Settings .builder ().put (IndexMetaData .SETTING_VERSION_CREATED , Version .CURRENT )
349+ .put (IndexMetaData .SETTING_NUMBER_OF_SHARDS , 1 ).put (IndexMetaData .SETTING_NUMBER_OF_REPLICAS , 1 )
350+ .put ("index.analysis.analyzer.reloadableAnalyzer.type" , "custom" )
351+ .put ("index.analysis.analyzer.reloadableAnalyzer.tokenizer" , "standard" )
352+ .putList ("index.analysis.analyzer.reloadableAnalyzer.filter" , "myReloadableFilter" ).build ();
353+ IndexSettings indexSettings = new IndexSettings (IndexMetaData .builder ("testIndex" ).settings (settings ).build (), settings );
355354
356- NamedAnalyzer rebuilt = AnalysisRegistry .rebuildIfNecessary (reloadableAnalyzer , indexSetings , testAnalysis .charFilter ,
355+ NamedAnalyzer rebuilt = AnalysisRegistry .rebuildIfNecessary (reloadableAnalyzer , indexSettings , testAnalysis .charFilter ,
357356 testAnalysis .tokenizer , testAnalysis .tokenFilter );
358357 assertEquals (reloadableAnalyzer .name (), rebuilt .name ());
359358 assertNotSame (reloadableAnalyzer , rebuilt );
@@ -363,12 +362,62 @@ public TokenFilterFactory get(IndexSettings indexSettings, Environment environme
363362 assertEquals (2 , MyReloadableFilter .constructorCounter );
364363 }
365364
365+ public void testRebuildIndexAnalyzers () throws IOException {
366+
367+ final AtomicInteger factoryCounter = new AtomicInteger (0 );
368+ AnalysisPlugin testPlugin = new AnalysisPlugin () {
369+
370+ @ Override
371+ public Map <String , AnalysisProvider <TokenFilterFactory >> getTokenFilters () {
372+ return Collections .singletonMap ("myReloadableFilter" , new AnalysisProvider <TokenFilterFactory >() {
373+
374+ @ Override
375+ public TokenFilterFactory get (IndexSettings indexSettings , Environment environment , String name , Settings settings )
376+ throws IOException {
377+ factoryCounter .getAndIncrement ();
378+ return new MyReloadableFilter ();
379+ }
380+ });
381+ }
382+ };
383+
384+ Settings settings = Settings .builder ().put (IndexMetaData .SETTING_VERSION_CREATED , Version .CURRENT )
385+ .put (Environment .PATH_HOME_SETTING .getKey (), createTempDir ().toString ())
386+ .put (IndexMetaData .SETTING_NUMBER_OF_SHARDS , 1 ).put (IndexMetaData .SETTING_NUMBER_OF_REPLICAS , 1 )
387+ .put ("index.analysis.analyzer.reloadableAnalyzer.type" , "custom" )
388+ .put ("index.analysis.analyzer.reloadableAnalyzer.tokenizer" , "standard" )
389+ .putList ("index.analysis.analyzer.reloadableAnalyzer.filter" , "myReloadableFilter" ).build ();
390+ AnalysisModule analysisModule = new AnalysisModule (TestEnvironment .newEnvironment (settings ), singletonList (testPlugin ));
391+ AnalysisRegistry registry = analysisModule .getAnalysisRegistry ();
392+ IndexSettings indexSettings = new IndexSettings (IndexMetaData .builder ("testIndex" ).settings (settings ).build (), settings );
393+ IndexAnalyzers oldIndexAnalyzers = registry .build (indexSettings );
394+ assertEquals (1 , factoryCounter .get ());
395+
396+ IndexAnalyzers rebuildAnalyzers = registry .reloadIndexAnalyzers (oldIndexAnalyzers , indexSettings );
397+ assertNotSame (oldIndexAnalyzers , rebuildAnalyzers );
398+ assertEquals (2 , factoryCounter .get ());
399+ assertSame (oldIndexAnalyzers .getDefaultIndexAnalyzer (), rebuildAnalyzers .getDefaultIndexAnalyzer ());
400+ assertSame (oldIndexAnalyzers .getDefaultSearchAnalyzer (), rebuildAnalyzers .getDefaultSearchAnalyzer ());
401+ assertSame (oldIndexAnalyzers .getDefaultSearchQuoteAnalyzer (), rebuildAnalyzers .getDefaultSearchQuoteAnalyzer ());
402+ assertNotSame (oldIndexAnalyzers .getAnalyzers (), rebuildAnalyzers .getAnalyzers ());
403+ assertEquals (oldIndexAnalyzers .getAnalyzers ().size (), rebuildAnalyzers .getAnalyzers ().size ());
404+ NamedAnalyzer oldVersion = oldIndexAnalyzers .get ("reloadableAnalyzer" );
405+ NamedAnalyzer newVersion = rebuildAnalyzers .get ("reloadableAnalyzer" );
406+ assertNotSame (oldVersion , newVersion );
407+ assertThat (((CustomAnalyzer ) oldVersion .analyzer ()).tokenFilters ()[0 ], instanceOf (MyReloadableFilter .class ));
408+ assertEquals (1 , ((MyReloadableFilter ) ((CustomAnalyzer ) oldVersion .analyzer ()).tokenFilters ()[0 ]).generation );
409+ assertThat (((CustomAnalyzer ) newVersion .analyzer ()).tokenFilters ()[0 ], instanceOf (MyReloadableFilter .class ));
410+ assertEquals (2 , ((MyReloadableFilter ) ((CustomAnalyzer ) newVersion .analyzer ()).tokenFilters ()[0 ]).generation );
411+ }
412+
366413 static class MyReloadableFilter implements TokenFilterFactory {
367414
368415 static int constructorCounter = 0 ;
416+ private final int generation ;
369417
370418 MyReloadableFilter () {
371419 constructorCounter ++;
420+ generation = constructorCounter ;
372421 }
373422
374423 @ Override
@@ -378,11 +427,12 @@ public String name() {
378427
379428 @ Override
380429 public TokenStream create (TokenStream tokenStream ) {
381- return null ;
430+ return tokenStream ;
382431 }
383432 @ Override
384433 public AnalysisMode getAnalysisMode () {
385434 return AnalysisMode .SEARCH_TIME ;
386435 }
387- };
436+ }
437+
388438}
0 commit comments