Skip to content

Commit 055234c

Browse files
committed
Merge branch 'feature-suggest-refactoring'
Refactors all suggestion builders to be able to be parsed on the coordinating node and serialized as objects to the shards. Specifically, all SuggestionBuilder implementations implement NamedWritable for serialization, a fromXContent() method that handles parsing xContent and a build() method that is called on the shard to create the SuggestionContext. Relates to #10217
2 parents b10db19 + 6ddf9ae commit 055234c

File tree

100 files changed

+6191
-2722
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+6191
-2722
lines changed

buildSrc/src/main/resources/checkstyle_suppressions.xml

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,6 @@
208208
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]action[/\\]search[/\\]TransportClearScrollAction.java" checks="LineLength" />
209209
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]action[/\\]search[/\\]TransportMultiSearchAction.java" checks="LineLength" />
210210
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]action[/\\]suggest[/\\]SuggestResponse.java" checks="LineLength" />
211-
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]action[/\\]suggest[/\\]TransportSuggestAction.java" checks="LineLength" />
212211
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]action[/\\]support[/\\]ActionFilter.java" checks="LineLength" />
213212
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]action[/\\]support[/\\]AutoCreateIndex.java" checks="LineLength" />
214213
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]action[/\\]support[/\\]DelegatingActionListener.java" checks="LineLength" />
@@ -268,7 +267,6 @@
268267
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]cache[/\\]recycler[/\\]PageCacheRecycler.java" checks="LineLength" />
269268
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]client[/\\]ElasticsearchClient.java" checks="LineLength" />
270269
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]client[/\\]FilterClient.java" checks="LineLength" />
271-
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]client[/\\]Requests.java" checks="LineLength" />
272270
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]client[/\\]node[/\\]NodeClient.java" checks="LineLength" />
273271
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]client[/\\]support[/\\]AbstractClient.java" checks="LineLength" />
274272
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]client[/\\]transport[/\\]TransportClient.java" checks="LineLength" />
@@ -895,7 +893,6 @@
895893
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]SuggestUtils.java" checks="LineLength" />
896894
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]Suggesters.java" checks="LineLength" />
897895
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]completion[/\\]CompletionSuggestParser.java" checks="LineLength" />
898-
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]completion[/\\]CompletionSuggester.java" checks="LineLength" />
899896
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]completion[/\\]context[/\\]CategoryContextMapping.java" checks="LineLength" />
900897
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]completion[/\\]context[/\\]ContextMapping.java" checks="LineLength" />
901898
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]completion[/\\]context[/\\]GeoContextMapping.java" checks="LineLength" />
@@ -906,12 +903,9 @@
906903
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]phrase[/\\]LinearInterpoatingScorer.java" checks="LineLength" />
907904
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]phrase[/\\]NoisyChannelSpellChecker.java" checks="LineLength" />
908905
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]phrase[/\\]PhraseSuggestParser.java" checks="LineLength" />
909-
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]phrase[/\\]PhraseSuggester.java" checks="LineLength" />
910-
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]phrase[/\\]PhraseSuggestionBuilder.java" checks="LineLength" />
911906
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]phrase[/\\]StupidBackoffScorer.java" checks="LineLength" />
912907
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]phrase[/\\]WordScorer.java" checks="LineLength" />
913908
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]term[/\\]TermSuggestParser.java" checks="LineLength" />
914-
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]term[/\\]TermSuggester.java" checks="LineLength" />
915909
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]snapshots[/\\]RestoreService.java" checks="LineLength" />
916910
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]snapshots[/\\]SnapshotInfo.java" checks="LineLength" />
917911
<suppress files="core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]snapshots[/\\]SnapshotShardFailure.java" checks="LineLength" />
@@ -1402,7 +1396,6 @@
14021396
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]basic[/\\]SearchWithRandomIOExceptionsIT.java" checks="LineLength" />
14031397
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]basic[/\\]TransportSearchFailuresIT.java" checks="LineLength" />
14041398
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]basic[/\\]TransportTwoNodesSearchIT.java" checks="LineLength" />
1405-
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]builder[/\\]SearchSourceBuilderTests.java" checks="LineLength" />
14061399
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]child[/\\]ChildQuerySearchIT.java" checks="LineLength" />
14071400
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]child[/\\]ParentFieldLoadingIT.java" checks="LineLength" />
14081401
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]fetch[/\\]FetchSubPhasePluginIT.java" checks="LineLength" />
@@ -1424,7 +1417,6 @@
14241417
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]query[/\\]ExistsIT.java" checks="LineLength" />
14251418
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]query[/\\]MultiMatchQueryIT.java" checks="LineLength" />
14261419
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]query[/\\]SearchQueryIT.java" checks="LineLength" />
1427-
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]rescore[/\\]QueryRescoreBuilderTests.java" checks="LineLength" />
14281420
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]scroll[/\\]DuelScrollIT.java" checks="LineLength" />
14291421
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]scroll[/\\]SearchScrollIT.java" checks="LineLength" />
14301422
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]scroll[/\\]SearchScrollWithFailingNodesIT.java" checks="LineLength" />
@@ -1435,12 +1427,10 @@
14351427
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]CompletionSuggestSearchIT.java" checks="LineLength" />
14361428
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]ContextCompletionSuggestSearchIT.java" checks="LineLength" />
14371429
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]CustomSuggester.java" checks="LineLength" />
1438-
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]CustomSuggesterSearchIT.java" checks="LineLength" />
14391430
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]completion[/\\]CategoryContextMappingTests.java" checks="LineLength" />
14401431
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]completion[/\\]GeoContextMappingTests.java" checks="LineLength" />
14411432
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]phrase[/\\]DirectCandidateGeneratorTests.java" checks="LineLength" />
14421433
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]phrase[/\\]NoisyChannelSpellCheckerTests.java" checks="LineLength" />
1443-
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]search[/\\]suggest[/\\]phrase[/\\]SmoothingModelTestCase.java" checks="LineLength" />
14441434
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]similarity[/\\]SimilarityIT.java" checks="LineLength" />
14451435
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]snapshots[/\\]AbstractSnapshotIntegTestCase.java" checks="LineLength" />
14461436
<suppress files="core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]snapshots[/\\]BlobStoreFormatIT.java" checks="LineLength" />

core/src/main/java/org/elasticsearch/action/search/SearchRequestBuilder.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -393,9 +393,7 @@ public SearchRequestBuilder highlighter(HighlightBuilder highlightBuilder) {
393393
}
394394

395395
/**
396-
* Delegates to
397-
* {@link org.elasticsearch.search.suggest.SuggestBuilder#addSuggestion(org.elasticsearch.search.suggest.SuggestBuilder.SuggestionBuilder)}
398-
* .
396+
* Delegates to {@link SearchSourceBuilder#suggest(SuggestBuilder)}
399397
*/
400398
public SearchRequestBuilder suggest(SuggestBuilder suggestBuilder) {
401399
sourceBuilder().suggest(suggestBuilder);

core/src/main/java/org/elasticsearch/action/suggest/ShardSuggestRequest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020
package org.elasticsearch.action.suggest;
2121

2222
import org.elasticsearch.action.support.broadcast.BroadcastShardRequest;
23-
import org.elasticsearch.common.bytes.BytesReference;
2423
import org.elasticsearch.common.io.stream.StreamInput;
2524
import org.elasticsearch.common.io.stream.StreamOutput;
2625
import org.elasticsearch.index.shard.ShardId;
26+
import org.elasticsearch.search.suggest.SuggestBuilder;
2727

2828
import java.io.IOException;
2929

@@ -32,29 +32,29 @@
3232
*/
3333
public final class ShardSuggestRequest extends BroadcastShardRequest {
3434

35-
private BytesReference suggestSource;
35+
private SuggestBuilder suggest;
3636

3737
public ShardSuggestRequest() {
3838
}
3939

4040
ShardSuggestRequest(ShardId shardId, SuggestRequest request) {
4141
super(shardId, request);
42-
this.suggestSource = request.suggest();
42+
this.suggest = request.suggest();
4343
}
4444

45-
public BytesReference suggest() {
46-
return suggestSource;
45+
public SuggestBuilder suggest() {
46+
return suggest;
4747
}
4848

4949
@Override
5050
public void readFrom(StreamInput in) throws IOException {
5151
super.readFrom(in);
52-
suggestSource = in.readBytesReference();
52+
suggest = SuggestBuilder.PROTOTYPE.readFrom(in);
5353
}
5454

5555
@Override
5656
public void writeTo(StreamOutput out) throws IOException {
5757
super.writeTo(out);
58-
out.writeBytesReference(suggestSource);
58+
suggest.writeTo(out);
5959
}
6060
}

core/src/main/java/org/elasticsearch/action/suggest/SuggestRequest.java

Lines changed: 23 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,25 @@
2121

2222
import org.elasticsearch.action.ActionRequestValidationException;
2323
import org.elasticsearch.action.support.broadcast.BroadcastRequest;
24-
import org.elasticsearch.client.Requests;
2524
import org.elasticsearch.common.Nullable;
2625
import org.elasticsearch.common.Strings;
27-
import org.elasticsearch.common.bytes.BytesArray;
28-
import org.elasticsearch.common.bytes.BytesReference;
2926
import org.elasticsearch.common.io.stream.StreamInput;
3027
import org.elasticsearch.common.io.stream.StreamOutput;
31-
import org.elasticsearch.common.xcontent.XContentHelper;
28+
import org.elasticsearch.common.xcontent.ToXContent;
29+
import org.elasticsearch.common.xcontent.XContentBuilder;
30+
import org.elasticsearch.common.xcontent.json.JsonXContent;
3231
import org.elasticsearch.search.suggest.SuggestBuilder;
3332

3433
import java.io.IOException;
3534
import java.util.Arrays;
35+
import java.util.Objects;
3636

3737
/**
3838
* A request to get suggestions for corrections of phrases. Best created with
3939
* {@link org.elasticsearch.client.Requests#suggestRequest(String...)}.
4040
* <p>
41-
* The request requires the suggest query source to be set either using
42-
* {@link #suggest(org.elasticsearch.common.bytes.BytesReference)} / {@link #suggest(org.elasticsearch.common.bytes.BytesReference)}
43-
* or by using {@link #suggest(org.elasticsearch.search.suggest.SuggestBuilder)}
44-
* (Best created using the {link @org.elasticsearch.search.suggest.SuggestBuilders)}).
41+
* The request requires the suggest query source to be set using
42+
* {@link #suggest(org.elasticsearch.search.suggest.SuggestBuilder)}
4543
*
4644
* @see SuggestResponse
4745
* @see org.elasticsearch.client.Client#suggest(SuggestRequest)
@@ -56,7 +54,7 @@ public final class SuggestRequest extends BroadcastRequest<SuggestRequest> {
5654
@Nullable
5755
private String preference;
5856

59-
private BytesReference suggestSource;
57+
private SuggestBuilder suggest;
6058

6159
public SuggestRequest() {
6260
}
@@ -76,38 +74,19 @@ public ActionRequestValidationException validate() {
7674
}
7775

7876
/**
79-
* The Phrase to get correction suggestions for
77+
* The suggestion query to get correction suggestions for
8078
*/
81-
public BytesReference suggest() {
82-
return suggestSource;
83-
}
84-
85-
/**
86-
* set a new source for the suggest query
87-
*/
88-
public SuggestRequest suggest(BytesReference suggestSource) {
89-
this.suggestSource = suggestSource;
90-
return this;
79+
public SuggestBuilder suggest() {
80+
return suggest;
9181
}
9282

9383
/**
94-
* set a new source using a {@link org.elasticsearch.search.suggest.SuggestBuilder}
95-
* for phrase and term suggestion lookup
84+
* set a new source for the suggest query
9685
*/
97-
public SuggestRequest suggest(SuggestBuilder suggestBuilder) {
98-
return suggest(suggestBuilder.buildAsBytes(Requests.CONTENT_TYPE));
99-
}
100-
101-
/**
102-
* set a new source using a {@link org.elasticsearch.search.suggest.SuggestBuilder.SuggestionBuilder}
103-
* for completion suggestion lookup
104-
*/
105-
public SuggestRequest suggest(SuggestBuilder.SuggestionBuilder suggestionBuilder) {
106-
return suggest(suggestionBuilder.buildAsBytes(Requests.CONTENT_TYPE));
107-
}
108-
109-
public SuggestRequest suggest(String source) {
110-
return suggest(new BytesArray(source));
86+
public SuggestRequest suggest(SuggestBuilder suggest) {
87+
Objects.requireNonNull(suggest, "suggest must not be null");
88+
this.suggest = suggest;
89+
return this;
11190
}
11291

11392
/**
@@ -147,25 +126,29 @@ public void readFrom(StreamInput in) throws IOException {
147126
super.readFrom(in);
148127
routing = in.readOptionalString();
149128
preference = in.readOptionalString();
150-
suggest(in.readBytesReference());
129+
suggest = SuggestBuilder.PROTOTYPE.readFrom(in);
151130
}
152131

153132
@Override
154133
public void writeTo(StreamOutput out) throws IOException {
134+
Objects.requireNonNull(suggest, "suggest must not be null");
155135
super.writeTo(out);
156136
out.writeOptionalString(routing);
157137
out.writeOptionalString(preference);
158-
out.writeBytesReference(suggestSource);
138+
suggest.writeTo(out);
159139
}
160140

161141
@Override
162142
public String toString() {
143+
Objects.requireNonNull(suggest, "suggest must not be null");
163144
String sSource = "_na_";
164145
try {
165-
sSource = XContentHelper.convertToJson(suggestSource, false);
146+
XContentBuilder builder = JsonXContent.contentBuilder();
147+
builder = suggest.toXContent(builder, ToXContent.EMPTY_PARAMS);
148+
sSource = builder.string();
166149
} catch (Exception e) {
167150
// ignore
168151
}
169-
return "[" + Arrays.toString(indices) + "]" + ", suggestSource[" + sSource + "]";
152+
return "[" + Arrays.toString(indices) + "]" + ", suggest[" + sSource + "]";
170153
}
171154
}

core/src/main/java/org/elasticsearch/action/suggest/SuggestRequestBuilder.java

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,10 @@
1919

2020
package org.elasticsearch.action.suggest;
2121

22-
import org.elasticsearch.ElasticsearchException;
2322
import org.elasticsearch.action.support.broadcast.BroadcastOperationRequestBuilder;
2423
import org.elasticsearch.client.ElasticsearchClient;
25-
import org.elasticsearch.client.Requests;
26-
import org.elasticsearch.common.xcontent.ToXContent;
27-
import org.elasticsearch.common.xcontent.XContentBuilder;
28-
import org.elasticsearch.common.xcontent.XContentFactory;
2924
import org.elasticsearch.search.suggest.SuggestBuilder;
30-
import org.elasticsearch.search.suggest.SuggestBuilder.SuggestionBuilder;
31-
32-
import java.io.IOException;
25+
import org.elasticsearch.search.suggest.SuggestionBuilder;
3326

3427
/**
3528
* A suggest action request builder.
@@ -44,9 +37,11 @@ public SuggestRequestBuilder(ElasticsearchClient client, SuggestAction action) {
4437

4538
/**
4639
* Add a definition for suggestions to the request
40+
* @param name the name for the suggestion that will also be used in the response
41+
* @param suggestion the suggestion configuration
4742
*/
48-
public <T> SuggestRequestBuilder addSuggestion(SuggestionBuilder<T> suggestion) {
49-
suggest.addSuggestion(suggestion);
43+
public SuggestRequestBuilder addSuggestion(String name, SuggestionBuilder<?> suggestion) {
44+
suggest.addSuggestion(name, suggestion);
5045
return this;
5146
}
5247

@@ -59,7 +54,7 @@ public SuggestRequestBuilder setRouting(String routing) {
5954
}
6055

6156
public SuggestRequestBuilder setSuggestText(String globalText) {
62-
this.suggest.setText(globalText);
57+
this.suggest.setGlobalText(globalText);
6358
return this;
6459
}
6560

@@ -84,13 +79,7 @@ public SuggestRequestBuilder setRouting(String... routing) {
8479

8580
@Override
8681
protected SuggestRequest beforeExecute(SuggestRequest request) {
87-
try {
88-
XContentBuilder builder = XContentFactory.contentBuilder(Requests.CONTENT_TYPE);
89-
suggest.toXContent(builder, ToXContent.EMPTY_PARAMS);
90-
request.suggest(builder.bytes());
91-
} catch (IOException e) {
92-
throw new ElasticsearchException("Unable to build suggestion request", e);
93-
}
82+
request.suggest(suggest);
9483
return request;
9584
}
9685
}

0 commit comments

Comments
 (0)