diff --git a/src/main/java/com/bellszhu/elasticsearch/plugin/synonym/analysis/DynamicSynonymTokenFilterFactory.java b/src/main/java/com/bellszhu/elasticsearch/plugin/synonym/analysis/DynamicSynonymTokenFilterFactory.java index bc6e002..3b34170 100644 --- a/src/main/java/com/bellszhu/elasticsearch/plugin/synonym/analysis/DynamicSynonymTokenFilterFactory.java +++ b/src/main/java/com/bellszhu/elasticsearch/plugin/synonym/analysis/DynamicSynonymTokenFilterFactory.java @@ -29,6 +29,14 @@ import org.elasticsearch.indices.analysis.AnalysisModule; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + /** * @@ -63,8 +71,8 @@ public Thread newThread(Runnable r) { private final int interval; private SynonymMap synonymMap; - private Map dynamicSynonymFilters = new WeakHashMap(); - + // private Map dynamicSynonymFilters = new WeakHashMap(); + private List dynamicSynonymFilters = Collections.synchronizedList(new ArrayList<>()); public DynamicSynonymTokenFilterFactory( IndexSettings indexSettings, Environment env, @@ -132,8 +140,7 @@ protected TokenStreamComponents createComponents(String fieldName) { public TokenStream create(TokenStream tokenStream) { DynamicSynonymFilter dynamicSynonymFilter = new DynamicSynonymFilter( tokenStream, synonymMap, ignoreCase); - dynamicSynonymFilters.put(dynamicSynonymFilter, 1); - + dynamicSynonymFilters.add(dynamicSynonymFilter); // fst is null means no synonyms return synonymMap.fst == null ? tokenStream : dynamicSynonymFilter; } @@ -150,8 +157,7 @@ public Monitor(SynonymFile synonymFile) { public void run() { if (synonymFile.isNeedReloadSynonymMap()) { synonymMap = synonymFile.reloadSynonymMap(); - for (DynamicSynonymFilter dynamicSynonymFilter : dynamicSynonymFilters - .keySet()) { + for (DynamicSynonymFilter dynamicSynonymFilter : dynamicSynonymFilters) { dynamicSynonymFilter.update(synonymMap); logger.info("success reload synonym"); }