From 0304b0515cf6d8352925175aa6f1cecbcfed9ed7 Mon Sep 17 00:00:00 2001 From: chenyunjin Date: Mon, 23 Jan 2017 09:56:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=90=8C=E4=B9=89=E8=AF=8D?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9C=89=E6=A6=82=E7=8E=87=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E4=B8=8D=E5=88=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原因:DynamicSynonymTokenFilterFactory.create() 方法并发 要点:private Map dynamicSynonymFilters = new WeakHashMap(); --》 private List dynamicSynonymFilters = Collections.synchronizedList(new ArrayList<>()); --- .../DynamicSynonymTokenFilterFactory.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) 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 064dfc1..46d87d8 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 @@ -17,8 +17,9 @@ import org.elasticsearch.indices.analysis.AnalysisModule; import java.io.IOException; -import java.util.Map; -import java.util.WeakHashMap; +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; @@ -45,8 +46,8 @@ public class DynamicSynonymTokenFilterFactory extends 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, @@ -116,8 +117,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; } @@ -134,8 +134,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"); }