Skip to content

Commit b00a4f1

Browse files
committed
Allow for aliases when requesting suggestions.
1 parent 870c54d commit b00a4f1

File tree

5 files changed

+64
-7
lines changed

5 files changed

+64
-7
lines changed

server/src/main/java/org/elasticsearch/search/suggest/SuggestionBuilder.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.elasticsearch.common.io.stream.StreamInput;
2828
import org.elasticsearch.common.io.stream.StreamOutput;
2929
import org.elasticsearch.common.lucene.BytesRefs;
30-
import org.elasticsearch.common.xcontent.ToXContent.Params;
3130
import org.elasticsearch.common.xcontent.ToXContentFragment;
3231
import org.elasticsearch.common.xcontent.XContentBuilder;
3332
import org.elasticsearch.common.xcontent.XContentParser;
@@ -321,7 +320,7 @@ protected void populateCommonFields(MapperService mapperService, SuggestionSearc
321320
suggestionContext.setAnalyzer(luceneAnalyzer);
322321
}
323322

324-
suggestionContext.setField(field);
323+
suggestionContext.setField(fieldType.name());
325324

326325
if (size != null) {
327326
suggestionContext.setSize(size);

server/src/test/java/org/elasticsearch/search/suggest/AbstractSuggestionBuilderTestCase.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ public void testBuild() throws IOException {
159159
indexSettings);
160160
MapperService mapperService = mock(MapperService.class);
161161
ScriptService scriptService = mock(ScriptService.class);
162-
MappedFieldType fieldType = mockFieldType();
162+
MappedFieldType fieldType = mockFieldType(suggestionBuilder.field());
163163
boolean fieldTypeSearchAnalyzerSet = randomBoolean();
164164
if (fieldTypeSearchAnalyzerSet) {
165165
NamedAnalyzer searchAnalyzer = new NamedAnalyzer("fieldSearchAnalyzer", AnalyzerScope.INDEX, new SimpleAnalyzer());
@@ -210,8 +210,10 @@ public void testBuild() throws IOException {
210210
*/
211211
protected abstract void assertSuggestionContext(SB builder, SuggestionContext context) throws IOException;
212212

213-
protected MappedFieldType mockFieldType() {
214-
return mock(MappedFieldType.class);
213+
protected MappedFieldType mockFieldType(String fieldName) {
214+
MappedFieldType fieldType = mock(MappedFieldType.class);
215+
when(fieldType.name()).thenReturn(fieldName);
216+
return fieldType;
215217
}
216218

217219
/**

server/src/test/java/org/elasticsearch/search/suggest/CompletionSuggestSearchIT.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
package org.elasticsearch.search.suggest;
2020

2121
import com.carrotsearch.randomizedtesting.generators.RandomStrings;
22-
2322
import org.apache.lucene.analysis.TokenStreamToAutomaton;
2423
import org.apache.lucene.search.suggest.document.ContextSuggestField;
2524
import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
@@ -36,6 +35,7 @@
3635
import org.elasticsearch.common.settings.Settings;
3736
import org.elasticsearch.common.unit.Fuzziness;
3837
import org.elasticsearch.common.xcontent.XContentBuilder;
38+
import org.elasticsearch.common.xcontent.XContentFactory;
3939
import org.elasticsearch.common.xcontent.XContentType;
4040
import org.elasticsearch.index.mapper.MapperParsingException;
4141
import org.elasticsearch.plugins.Plugin;
@@ -1161,6 +1161,32 @@ public void testMultiDocSuggestions() throws Exception {
11611161
assertSuggestions("foo", prefix, "suggester10", "suggester9", "suggester8", "suggester7", "suggester6");
11621162
}
11631163

1164+
public void testSuggestWithFieldAlias() throws Exception {
1165+
XContentBuilder mapping = XContentFactory.jsonBuilder()
1166+
.startObject()
1167+
.startObject(TYPE)
1168+
.startObject("properties")
1169+
.startObject(FIELD)
1170+
.field("type", "completion")
1171+
.endObject()
1172+
.startObject("alias")
1173+
.field("type", "alias")
1174+
.field("path", FIELD)
1175+
.endObject()
1176+
.endObject()
1177+
.endObject()
1178+
.endObject();
1179+
assertAcked(prepareCreate(INDEX).addMapping(TYPE, mapping));
1180+
1181+
List<IndexRequestBuilder> builders = new ArrayList<>();
1182+
builders.add(client().prepareIndex(INDEX, TYPE).setSource(FIELD, "apple"));
1183+
builders.add(client().prepareIndex(INDEX, TYPE).setSource(FIELD, "mango"));
1184+
builders.add(client().prepareIndex(INDEX, TYPE).setSource(FIELD, "papaya"));
1185+
indexRandom(true, false, builders);
1186+
1187+
CompletionSuggestionBuilder suggestionBuilder = SuggestBuilders.completionSuggestion("alias").text("app");
1188+
assertSuggestions("suggestion", suggestionBuilder, "apple");
1189+
}
11641190

11651191
public static boolean isReservedChar(char c) {
11661192
switch (c) {

server/src/test/java/org/elasticsearch/search/suggest/SuggestSearchIT.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -979,6 +979,35 @@ public void testSuggestWithManyCandidates() throws InterruptedException, Executi
979979
// assertThat(total, lessThan(1000L)); // Takes many seconds without fix - just for debugging
980980
}
981981

982+
public void testSuggestWithFieldAlias() throws Exception {
983+
XContentBuilder mapping = XContentFactory.jsonBuilder()
984+
.startObject()
985+
.startObject("type")
986+
.startObject("properties")
987+
.startObject("text")
988+
.field("type", "keyword")
989+
.endObject()
990+
.startObject("alias")
991+
.field("type", "alias")
992+
.field("path", "text")
993+
.endObject()
994+
.endObject()
995+
.endObject()
996+
.endObject();
997+
assertAcked(prepareCreate("test").addMapping("type", mapping));
998+
999+
List<IndexRequestBuilder> builders = new ArrayList<>();
1000+
builders.add(client().prepareIndex("test", "type").setSource("text", "apple"));
1001+
builders.add(client().prepareIndex("test", "type").setSource("text", "mango"));
1002+
builders.add(client().prepareIndex("test", "type").setSource("text", "papaya"));
1003+
indexRandom(true, false, builders);
1004+
1005+
TermSuggestionBuilder termSuggest = termSuggestion("alias").text("appple");
1006+
1007+
Suggest searchSuggest = searchSuggest("suggestion", termSuggest);
1008+
assertSuggestion(searchSuggest, 0, "suggestion", "apple");
1009+
}
1010+
9821011
@Override
9831012
protected Collection<Class<? extends Plugin>> nodePlugins() {
9841013
return Collections.singleton(DummyTemplatePlugin.class);

server/src/test/java/org/elasticsearch/search/suggest/completion/CompletionSuggesterBuilderTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,9 @@ protected void mutateSpecificParameters(CompletionSuggestionBuilder builder) thr
164164
}
165165

166166
@Override
167-
protected MappedFieldType mockFieldType() {
167+
protected MappedFieldType mockFieldType(String fieldName) {
168168
CompletionFieldType completionFieldType = new CompletionFieldType();
169+
completionFieldType.setName(fieldName);
169170
completionFieldType.setContextMappings(new ContextMappings(contextMappings));
170171
return completionFieldType;
171172
}

0 commit comments

Comments
 (0)