diff --git a/server/src/main/java/org/elasticsearch/index/analysis/IndexAnalyzers.java b/server/src/main/java/org/elasticsearch/index/analysis/IndexAnalyzers.java index af2662f5ddb65..734b10c4dfa98 100644 --- a/server/src/main/java/org/elasticsearch/index/analysis/IndexAnalyzers.java +++ b/server/src/main/java/org/elasticsearch/index/analysis/IndexAnalyzers.java @@ -25,6 +25,7 @@ import java.io.Closeable; import java.io.IOException; import java.util.Map; +import java.util.stream.Collectors; import java.util.stream.Stream; /** @@ -100,9 +101,10 @@ public NamedAnalyzer getDefaultSearchQuoteAnalyzer() { @Override public void close() throws IOException { - IOUtils.close(() -> Stream.concat(analyzers.values().stream(), normalizers.values().stream()) - .filter(a -> a.scope() == AnalyzerScope.INDEX) - .iterator()); + IOUtils.close(Stream.of(analyzers.values().stream(), normalizers.values().stream(), whitespaceNormalizers.values().stream()) + .flatMap(s -> s) + .filter(a -> a.scope() == AnalyzerScope.INDEX) + .collect(Collectors.toList())); } /** diff --git a/server/src/test/java/org/elasticsearch/index/analysis/IndexAnalyzersTests.java b/server/src/test/java/org/elasticsearch/index/analysis/IndexAnalyzersTests.java new file mode 100644 index 0000000000000..c756d23ac3a7d --- /dev/null +++ b/server/src/test/java/org/elasticsearch/index/analysis/IndexAnalyzersTests.java @@ -0,0 +1,75 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.index.analysis; + +import org.apache.lucene.analysis.core.KeywordAnalyzer; +import org.apache.lucene.analysis.core.WhitespaceAnalyzer; +import org.apache.lucene.analysis.standard.StandardAnalyzer; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.index.Index; +import org.elasticsearch.index.IndexSettings; +import org.elasticsearch.test.ESTestCase; +import org.elasticsearch.test.IndexSettingsModule; + +import java.io.IOException; +import java.util.Collections; +import java.util.concurrent.atomic.AtomicInteger; + +public class IndexAnalyzersTests extends ESTestCase { + + public void testClose() throws IOException { + + AtomicInteger closes = new AtomicInteger(0); + NamedAnalyzer a = new NamedAnalyzer("default", AnalyzerScope.INDEX, new WhitespaceAnalyzer()){ + @Override + public void close() { + super.close(); + closes.incrementAndGet(); + } + }; + + NamedAnalyzer n = new NamedAnalyzer("keyword_normalizer", AnalyzerScope.INDEX, new KeywordAnalyzer()){ + @Override + public void close() { + super.close(); + closes.incrementAndGet(); + } + }; + + NamedAnalyzer w = new NamedAnalyzer("whitespace_normalizer", AnalyzerScope.INDEX, new WhitespaceAnalyzer()){ + @Override + public void close() { + super.close(); + closes.incrementAndGet(); + } + }; + + Index index = new Index("_index", "testUUID"); + IndexSettings indexSettings = IndexSettingsModule.newIndexSettings(index, Settings.EMPTY); + NamedAnalyzer namedAnalyzer = new NamedAnalyzer("default", AnalyzerScope.INDEX, new StandardAnalyzer()); + + IndexAnalyzers ia = new IndexAnalyzers(indexSettings, namedAnalyzer, namedAnalyzer, namedAnalyzer, + Collections.singletonMap("default", a), Collections.singletonMap("n", n), Collections.singletonMap("w", w)); + ia.close(); + assertEquals(3, closes.get()); + + } + +}