|
@@ -29,18 +29,24 @@ import org.elasticsearch.common.UUIDs;
|
|
import org.elasticsearch.common.settings.Settings;
|
|
import org.elasticsearch.common.settings.Settings;
|
|
import org.elasticsearch.env.Environment;
|
|
import org.elasticsearch.env.Environment;
|
|
import org.elasticsearch.index.IndexSettings;
|
|
import org.elasticsearch.index.IndexSettings;
|
|
|
|
+import org.elasticsearch.index.analysis.AbstractCharFilterFactory;
|
|
import org.elasticsearch.index.analysis.AbstractTokenFilterFactory;
|
|
import org.elasticsearch.index.analysis.AbstractTokenFilterFactory;
|
|
import org.elasticsearch.index.analysis.AnalysisRegistry;
|
|
import org.elasticsearch.index.analysis.AnalysisRegistry;
|
|
|
|
+import org.elasticsearch.index.analysis.CharFilterFactory;
|
|
import org.elasticsearch.index.analysis.IndexAnalyzers;
|
|
import org.elasticsearch.index.analysis.IndexAnalyzers;
|
|
|
|
+import org.elasticsearch.index.analysis.PreConfiguredCharFilter;
|
|
import org.elasticsearch.index.analysis.TokenFilterFactory;
|
|
import org.elasticsearch.index.analysis.TokenFilterFactory;
|
|
import org.elasticsearch.index.mapper.AllFieldMapper;
|
|
import org.elasticsearch.index.mapper.AllFieldMapper;
|
|
import org.elasticsearch.indices.analysis.AnalysisModule;
|
|
import org.elasticsearch.indices.analysis.AnalysisModule;
|
|
import org.elasticsearch.indices.analysis.AnalysisModule.AnalysisProvider;
|
|
import org.elasticsearch.indices.analysis.AnalysisModule.AnalysisProvider;
|
|
|
|
+import org.elasticsearch.indices.analysis.AnalysisModuleTests.AppendCharFilter;
|
|
import org.elasticsearch.plugins.AnalysisPlugin;
|
|
import org.elasticsearch.plugins.AnalysisPlugin;
|
|
|
|
+import static org.elasticsearch.plugins.AnalysisPlugin.requriesAnalysisSettings;
|
|
import org.elasticsearch.test.ESTestCase;
|
|
import org.elasticsearch.test.ESTestCase;
|
|
import org.elasticsearch.test.IndexSettingsModule;
|
|
import org.elasticsearch.test.IndexSettingsModule;
|
|
|
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
|
+import java.io.Reader;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
|
@@ -81,10 +87,31 @@ public class TransportAnalyzeActionTests extends ESTestCase {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ class AppendCharFilterFactory extends AbstractCharFilterFactory {
|
|
|
|
+ AppendCharFilterFactory(IndexSettings indexSettings, Environment environment, String name, Settings settings) {
|
|
|
|
+ super(indexSettings, name);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Reader create(Reader reader) {
|
|
|
|
+ return new AppendCharFilter(reader, "bar");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Map<String, AnalysisProvider<CharFilterFactory>> getCharFilters() {
|
|
|
|
+ return singletonMap("append", AppendCharFilterFactory::new);
|
|
|
|
+ }
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public Map<String, AnalysisProvider<TokenFilterFactory>> getTokenFilters() {
|
|
public Map<String, AnalysisProvider<TokenFilterFactory>> getTokenFilters() {
|
|
return singletonMap("mock", MockFactory::new);
|
|
return singletonMap("mock", MockFactory::new);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<PreConfiguredCharFilter> getPreConfiguredCharFilters() {
|
|
|
|
+ return singletonList(PreConfiguredCharFilter.singleton("append_foo", false, reader -> new AppendCharFilter(reader, "foo")));
|
|
|
|
+ }
|
|
};
|
|
};
|
|
registry = new AnalysisModule(environment, singletonList(plugin)).getAnalysisRegistry();
|
|
registry = new AnalysisModule(environment, singletonList(plugin)).getAnalysisRegistry();
|
|
indexAnalyzers = registry.build(idxSettings);
|
|
indexAnalyzers = registry.build(idxSettings);
|
|
@@ -96,17 +123,17 @@ public class TransportAnalyzeActionTests extends ESTestCase {
|
|
public void testNoIndexAnalyzers() throws IOException {
|
|
public void testNoIndexAnalyzers() throws IOException {
|
|
// Refer to an analyzer by its type so we get its default configuration
|
|
// Refer to an analyzer by its type so we get its default configuration
|
|
AnalyzeRequest request = new AnalyzeRequest();
|
|
AnalyzeRequest request = new AnalyzeRequest();
|
|
- request.analyzer("standard");
|
|
|
|
request.text("the quick brown fox");
|
|
request.text("the quick brown fox");
|
|
|
|
+ request.analyzer("standard");
|
|
AnalyzeResponse analyze = TransportAnalyzeAction.analyze(request, AllFieldMapper.NAME, null, null, registry, environment);
|
|
AnalyzeResponse analyze = TransportAnalyzeAction.analyze(request, AllFieldMapper.NAME, null, null, registry, environment);
|
|
List<AnalyzeResponse.AnalyzeToken> tokens = analyze.getTokens();
|
|
List<AnalyzeResponse.AnalyzeToken> tokens = analyze.getTokens();
|
|
assertEquals(4, tokens.size());
|
|
assertEquals(4, tokens.size());
|
|
|
|
|
|
// Refer to a token filter by its type so we get its default configuration
|
|
// Refer to a token filter by its type so we get its default configuration
|
|
- request.analyzer(null);
|
|
|
|
- request.tokenizer("whitespace");
|
|
|
|
- request.addTokenFilter("mock");
|
|
|
|
|
|
+ request = new AnalyzeRequest();
|
|
request.text("the qu1ck brown fox");
|
|
request.text("the qu1ck brown fox");
|
|
|
|
+ request.tokenizer("standard");
|
|
|
|
+ request.addTokenFilter("mock");
|
|
analyze = TransportAnalyzeAction.analyze(request, AllFieldMapper.NAME, null, randomBoolean() ? indexAnalyzers : null, registry, environment);
|
|
analyze = TransportAnalyzeAction.analyze(request, AllFieldMapper.NAME, null, randomBoolean() ? indexAnalyzers : null, registry, environment);
|
|
tokens = analyze.getTokens();
|
|
tokens = analyze.getTokens();
|
|
assertEquals(3, tokens.size());
|
|
assertEquals(3, tokens.size());
|
|
@@ -114,18 +141,32 @@ public class TransportAnalyzeActionTests extends ESTestCase {
|
|
assertEquals("brown", tokens.get(1).getTerm());
|
|
assertEquals("brown", tokens.get(1).getTerm());
|
|
assertEquals("fox", tokens.get(2).getTerm());
|
|
assertEquals("fox", tokens.get(2).getTerm());
|
|
|
|
|
|
- // Refer to a char filter by its type so we get its default configuration
|
|
|
|
- request.analyzer(null);
|
|
|
|
- request.tokenizer("whitespace");
|
|
|
|
- request.addCharFilter("html_strip");
|
|
|
|
- request.addTokenFilter("mock");
|
|
|
|
- request.text("<p>the qu1ck brown fox</p>");
|
|
|
|
|
|
+ // We can refer to a pre-configured token filter by its name to get it
|
|
|
|
+ request = new AnalyzeRequest();
|
|
|
|
+ request.text("the qu1ck brown fox");
|
|
|
|
+ request.tokenizer("standard");
|
|
|
|
+ request.addCharFilter("append_foo");
|
|
analyze = TransportAnalyzeAction.analyze(request, AllFieldMapper.NAME, null, randomBoolean() ? indexAnalyzers : null, registry, environment);
|
|
analyze = TransportAnalyzeAction.analyze(request, AllFieldMapper.NAME, null, randomBoolean() ? indexAnalyzers : null, registry, environment);
|
|
tokens = analyze.getTokens();
|
|
tokens = analyze.getTokens();
|
|
- assertEquals(3, tokens.size());
|
|
|
|
- assertEquals("qu1ck", tokens.get(0).getTerm());
|
|
|
|
- assertEquals("brown", tokens.get(1).getTerm());
|
|
|
|
- assertEquals("fox", tokens.get(2).getTerm());
|
|
|
|
|
|
+ assertEquals(4, tokens.size());
|
|
|
|
+ assertEquals("the", tokens.get(0).getTerm());
|
|
|
|
+ assertEquals("qu1ck", tokens.get(1).getTerm());
|
|
|
|
+ assertEquals("brown", tokens.get(2).getTerm());
|
|
|
|
+ assertEquals("foxfoo", tokens.get(3).getTerm());
|
|
|
|
+
|
|
|
|
+ // We can refer to a token filter by its type to get its default configuration
|
|
|
|
+ request = new AnalyzeRequest();
|
|
|
|
+ request.text("the qu1ck brown fox");
|
|
|
|
+ request.tokenizer("standard");
|
|
|
|
+ request.addCharFilter("append");
|
|
|
|
+ request.text("the qu1ck brown fox");
|
|
|
|
+ analyze = TransportAnalyzeAction.analyze(request, AllFieldMapper.NAME, null, randomBoolean() ? indexAnalyzers : null, registry, environment);
|
|
|
|
+ tokens = analyze.getTokens();
|
|
|
|
+ assertEquals(4, tokens.size());
|
|
|
|
+ assertEquals("the", tokens.get(0).getTerm());
|
|
|
|
+ assertEquals("qu1ck", tokens.get(1).getTerm());
|
|
|
|
+ assertEquals("brown", tokens.get(2).getTerm());
|
|
|
|
+ assertEquals("foxbar", tokens.get(3).getTerm());
|
|
}
|
|
}
|
|
|
|
|
|
public void testFillsAttributes() throws IOException {
|
|
public void testFillsAttributes() throws IOException {
|