diff --git a/src/test/java/org/elasticsearch/search/suggest/CompletionSuggestSearchTests.java b/src/test/java/org/elasticsearch/search/suggest/CompletionSuggestSearchTests.java index dab717b01d5..3346730a453 100644 --- a/src/test/java/org/elasticsearch/search/suggest/CompletionSuggestSearchTests.java +++ b/src/test/java/org/elasticsearch/search/suggest/CompletionSuggestSearchTests.java @@ -68,10 +68,11 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { private final String INDEX = RandomStrings.randomAsciiOfLength(getRandom(), 10).toLowerCase(Locale.ROOT); private final String TYPE = RandomStrings.randomAsciiOfLength(getRandom(), 10).toLowerCase(Locale.ROOT); private final String FIELD = RandomStrings.randomAsciiOfLength(getRandom(), 10).toLowerCase(Locale.ROOT); + private final CompletionMappingBuilder completionMappingBuilder = new CompletionMappingBuilder(); @Test public void testSimple() throws Exception { - createIndexAndMapping(); + createIndexAndMapping(completionMappingBuilder); String[][] input = {{"Foo Fighters"}, {"Foo Fighters"}, {"Foo Fighters"}, {"Foo Fighters"}, {"Generator", "Foo Fighters Generator"}, {"Learn to Fly", "Foo Fighters Learn to Fly"}, {"The Prodigy"}, {"The Prodigy"}, {"The Prodigy"}, {"Firestarter", "The Prodigy Firestarter"}, @@ -95,7 +96,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testSuggestFieldWithPercolateApi() throws Exception { - createIndexAndMapping(); + createIndexAndMapping(completionMappingBuilder); String[][] input = {{"Foo Fighters"}, {"Foo Fighters"}, {"Foo Fighters"}, {"Foo Fighters"}, {"Generator", "Foo Fighters Generator"}, {"Learn to Fly", "Foo Fighters Learn to Fly"}, {"The Prodigy"}, {"The Prodigy"}, {"The Prodigy"}, {"Firestarter", "The Prodigy Firestarter"}, @@ -125,7 +126,8 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testBasicPrefixSuggestion() throws Exception { - createIndexAndMapping(); + completionMappingBuilder.payloads(true); + createIndexAndMapping(completionMappingBuilder); for (int i = 0; i < 2; i++) { createData(i == 0); assertSuggestions("f", "Firestarter - The Prodigy", "Foo Fighters", "Generator - Foo Fighters", "Learn to Fly - Foo Fighters"); @@ -137,7 +139,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testThatWeightsAreWorking() throws Exception { - createIndexAndMapping(); + createIndexAndMapping(completionMappingBuilder); List similarNames = Lists.newArrayList("the", "The Prodigy", "The Verve", "The the"); // the weight is 1000 divided by string length, so the results are easy to to check @@ -157,7 +159,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testThatWeightMustBeAnInteger() throws Exception { - createIndexAndMapping(); + createIndexAndMapping(completionMappingBuilder); try { client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() @@ -174,7 +176,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testThatInputCanBeAStringInsteadOfAnArray() throws Exception { - createIndexAndMapping(); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -190,7 +192,8 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testThatPayloadsAreArbitraryJsonObjects() throws Exception { - createIndexAndMapping(); + completionMappingBuilder.payloads(true); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -223,7 +226,8 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testPayloadAsNumeric() throws Exception { - createIndexAndMapping(); + completionMappingBuilder.payloads(true); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -250,7 +254,8 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testPayloadAsString() throws Exception { - createIndexAndMapping(); + completionMappingBuilder.payloads(true); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -277,7 +282,8 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test(expected = MapperException.class) public void testThatExceptionIsThrownWhenPayloadsAreDisabledButInIndexRequest() throws Exception { - createIndexAndMapping("simple", "simple", false, false, true); + completionMappingBuilder.payloads(false); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -290,7 +296,8 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testDisabledPreserveSeperators() throws Exception { - createIndexAndMapping("simple", "simple", true, false, true); + completionMappingBuilder.preserveSeparators(false); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -313,7 +320,8 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testEnabledPreserveSeperators() throws Exception { - createIndexAndMapping("simple", "simple", true, true, true); + completionMappingBuilder.preserveSeparators(true); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -334,7 +342,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testThatMultipleInputsAreSupported() throws Exception { - createIndexAndMapping("simple", "simple", false, false, true); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -351,7 +359,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testThatShortSyntaxIsWorking() throws Exception { - createIndexAndMapping(); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startArray(FIELD) @@ -368,7 +376,8 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testThatDisablingPositionIncrementsWorkForStopwords() throws Exception { // analyzer which removes stopwords... so may not be the simple one - createIndexAndMapping("classic", "classic", false, false, false); + completionMappingBuilder.searchAnalyzer("classic").indexAnalyzer("classic").preservePositionIncrements(false); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -389,7 +398,8 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { .putArray("analysis.analyzer.suggest_analyzer_synonyms.filter", "standard", "lowercase", "my_synonyms") .put("analysis.filter.my_synonyms.type", "synonym") .putArray("analysis.filter.my_synonyms.synonyms", "foo,renamed"); - createIndexAndMappingAndSettings(settingsBuilder, "suggest_analyzer_synonyms", "suggest_analyzer_synonyms", false, false, true); + completionMappingBuilder.searchAnalyzer("suggest_analyzer_synonyms").indexAnalyzer("suggest_analyzer_synonyms"); + createIndexAndMappingAndSettings(settingsBuilder, completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -451,7 +461,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testThatFuzzySuggesterWorks() throws Exception { - createIndexAndMapping("simple", "simple", true, true, true); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -474,7 +484,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testThatFuzzySuggesterSupportsEditDistances() throws Exception { - createIndexAndMapping("simple", "simple", true, true, true); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -499,7 +509,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testThatFuzzySuggesterSupportsTranspositions() throws Exception { - createIndexAndMapping("simple", "simple", true, true, true); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -522,7 +532,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testThatFuzzySuggesterSupportsMinPrefixLength() throws Exception { - createIndexAndMapping("simple", "simple", true, true, true); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -545,7 +555,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testThatFuzzySuggesterSupportsNonPrefixLength() throws Exception { - createIndexAndMapping("simple", "simple", true, true, true); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -568,7 +578,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testThatFuzzySuggesterIsUnicodeAware() throws Exception { - createIndexAndMapping("simple", "simple", true, true, true); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -642,7 +652,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test public void testThatSortingOnCompletionFieldReturnsUsefulException() throws Exception { - createIndexAndMapping(); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -668,7 +678,11 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { .put("index.analysis.filter.suggest_stop_filter.type", "stop") .put("index.analysis.filter.suggest_stop_filter.remove_trailing", false); - createIndexAndMappingAndSettings(settingsBuilder, "simple", "stoptest", true, true, true); + CompletionMappingBuilder completionMappingBuilder = new CompletionMappingBuilder(); + completionMappingBuilder.preserveSeparators(true).preservePositionIncrements(true); + completionMappingBuilder.searchAnalyzer("stoptest"); + completionMappingBuilder.indexAnalyzer("simple"); + createIndexAndMappingAndSettings(settingsBuilder, completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().field(FIELD, "Feed trolls").endObject() @@ -694,7 +708,8 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test(expected = MapperParsingException.class) public void testThatIndexingInvalidFieldsInCompletionFieldResultsInException() throws Exception { - createIndexAndMapping(); + CompletionMappingBuilder completionMappingBuilder = new CompletionMappingBuilder(); + createIndexAndMapping(completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -763,11 +778,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { return names; } - private void createIndexAndMapping() throws IOException { - createIndexAndMapping("simple", "simple", true, false, true); - } - - private void createIndexAndMappingAndSettings(Settings.Builder settingsBuilder, String indexAnalyzer, String searchAnalyzer, boolean payloads, boolean preserveSeparators, boolean preservePositionIncrements) throws IOException { + private void createIndexAndMappingAndSettings(Settings.Builder settingsBuilder, CompletionMappingBuilder completionMappingBuilder) throws IOException { client().admin().indices().prepareCreate(INDEX) .setSettings(settingsBuilder) .get(); @@ -775,11 +786,11 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { .startObject(TYPE).startObject("properties") .startObject(FIELD) .field("type", "completion") - .field("index_analyzer", indexAnalyzer) - .field("search_analyzer", searchAnalyzer) - .field("payloads", payloads) - .field("preserve_separators", preserveSeparators) - .field("preserve_position_increments", preservePositionIncrements) + .field("index_analyzer", completionMappingBuilder.indexAnalyzer) + .field("search_analyzer", completionMappingBuilder.searchAnalyzer) + .field("payloads", completionMappingBuilder.payloads) + .field("preserve_separators", completionMappingBuilder.preserveSeparators) + .field("preserve_position_increments", completionMappingBuilder.preservePositionIncrements) .endObject() .endObject().endObject() .endObject()) @@ -788,8 +799,8 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { ensureYellow(); } - private void createIndexAndMapping(String indexAnalyzer, String searchAnalyzer, boolean payloads, boolean preserveSeparators, boolean preservePositionIncrements) throws IOException { - createIndexAndMappingAndSettings(createDefaultSettings(), indexAnalyzer, searchAnalyzer, payloads, preserveSeparators, preservePositionIncrements); + private void createIndexAndMapping(CompletionMappingBuilder completionMappingBuilder) throws IOException { + createIndexAndMappingAndSettings(createDefaultSettings(), completionMappingBuilder); } private ImmutableSettings.Builder createDefaultSettings() { @@ -841,7 +852,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { @Test // see #3555 public void testPrunedSegments() throws IOException { - createIndexAndMappingAndSettings(settingsBuilder().put(SETTING_NUMBER_OF_SHARDS, 1).put(SETTING_NUMBER_OF_REPLICAS, 0), "standard", "standard", false, false, false); + createIndexAndMappingAndSettings(settingsBuilder().put(SETTING_NUMBER_OF_SHARDS, 1).put(SETTING_NUMBER_OF_REPLICAS, 0), completionMappingBuilder); client().prepareIndex(INDEX, TYPE, "1").setSource(jsonBuilder() .startObject().startObject(FIELD) @@ -968,4 +979,33 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { } return new String(charArray); } + + private static class CompletionMappingBuilder { + private String searchAnalyzer = "simple"; + private String indexAnalyzer = "simple"; + private Boolean payloads = getRandom().nextBoolean(); + private Boolean preserveSeparators = getRandom().nextBoolean(); + private Boolean preservePositionIncrements = getRandom().nextBoolean(); + + public CompletionMappingBuilder searchAnalyzer(String searchAnalyzer) { + this.searchAnalyzer = searchAnalyzer; + return this; + } + public CompletionMappingBuilder indexAnalyzer(String indexAnalyzer) { + this.indexAnalyzer = indexAnalyzer; + return this; + } + public CompletionMappingBuilder payloads(Boolean payloads) { + this.payloads = payloads; + return this; + } + public CompletionMappingBuilder preserveSeparators(Boolean preserveSeparators) { + this.preserveSeparators = preserveSeparators; + return this; + } + public CompletionMappingBuilder preservePositionIncrements(Boolean preservePositionIncrements) { + this.preservePositionIncrements = preservePositionIncrements; + return this; + } + } }