mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-17 02:14:54 +00:00
Add response params to REST params did you mean
This commit adds the response params as candidates for the did you mean suggestions for strict REST params handling. Relates #20753
This commit is contained in:
parent
41d6529d06
commit
8c4108d886
@ -33,6 +33,7 @@ import org.elasticsearch.plugins.ActionPlugin;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
@ -70,7 +71,7 @@ public abstract class BaseRestHandler extends AbstractComponent implements RestH
|
||||
request.unconsumedParams().stream().filter(p -> !responseParams().contains(p)).collect(Collectors.toCollection(TreeSet::new));
|
||||
|
||||
// validate the non-response params
|
||||
if (!unconsumedParams.isEmpty()) {
|
||||
if (unconsumedParams.isEmpty() == false) {
|
||||
String message = String.format(
|
||||
Locale.ROOT,
|
||||
"request [%s] contains unrecognized parameter%s: ",
|
||||
@ -80,10 +81,13 @@ public abstract class BaseRestHandler extends AbstractComponent implements RestH
|
||||
for (final String unconsumedParam : unconsumedParams) {
|
||||
final LevensteinDistance ld = new LevensteinDistance();
|
||||
final List<Tuple<Float, String>> scoredParams = new ArrayList<>();
|
||||
for (String consumedParam : request.consumedParams()) {
|
||||
final float distance = ld.getDistance(unconsumedParam, consumedParam);
|
||||
final Set<String> candidateParams = new HashSet<>();
|
||||
candidateParams.addAll(request.consumedParams());
|
||||
candidateParams.addAll(responseParams());
|
||||
for (final String candidateParam : candidateParams) {
|
||||
final float distance = ld.getDistance(unconsumedParam, candidateParam);
|
||||
if (distance > 0.5f) {
|
||||
scoredParams.add(new Tuple<>(distance, consumedParam));
|
||||
scoredParams.add(new Tuple<>(distance, candidateParam));
|
||||
}
|
||||
}
|
||||
CollectionUtil.timSort(scoredParams, (a, b) -> {
|
||||
|
@ -94,11 +94,17 @@ public class BaseRestHandlerTests extends ESTestCase {
|
||||
request.param("very_close_to_parameter_2");
|
||||
return channel -> executed.set(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Set<String> responseParams() {
|
||||
return Collections.singleton("response_param");
|
||||
}
|
||||
};
|
||||
|
||||
final HashMap<String, String> params = new HashMap<>();
|
||||
params.put("consumed", randomAsciiOfLength(8));
|
||||
params.put("flied", randomAsciiOfLength(8));
|
||||
params.put("respones_param", randomAsciiOfLength(8));
|
||||
params.put("tokenzier", randomAsciiOfLength(8));
|
||||
params.put("very_close_to_parametre", randomAsciiOfLength(8));
|
||||
params.put("very_far_from_every_consumed_parameter", randomAsciiOfLength(8));
|
||||
@ -111,6 +117,7 @@ public class BaseRestHandlerTests extends ESTestCase {
|
||||
hasToString(containsString(
|
||||
"request [/] contains unrecognized parameters: " +
|
||||
"[flied] -> did you mean [field]?, " +
|
||||
"[respones_param] -> did you mean [response_param]?, " +
|
||||
"[tokenzier] -> did you mean [tokenizer]?, " +
|
||||
"[very_close_to_parametre] -> did you mean any of [very_close_to_parameter_1, very_close_to_parameter_2]?, " +
|
||||
"[very_far_from_every_consumed_parameter]")));
|
||||
|
Loading…
x
Reference in New Issue
Block a user