Skip to content

Commit

Permalink
Validate method parameters only after version 2_17_0
Browse files Browse the repository at this point in the history
k-NN introduced validation to prevent index creation api to accept
method paramters that are used by approximate k-NN search
algorithm. For ex: create index api accepts model_id, or,
method params even if knn index setting was not true before 2.17.

However, for index that were created before 2.17 and upgraded to 2.17,
will prevent cluster to parse those previously accepted index mapping.

Hence, k-NN will allow those paramters for indices that were created before 2.17,
but doesn't support those parameters starting 2.17.

Signed-off-by: Vijayan Balasubramanian <[email protected]>
  • Loading branch information
VijayanB committed Dec 2, 2024
1 parent b0d82b7 commit 79baf82
Showing 1 changed file with 10 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,8 @@ public static class Builder extends ParametrizedFieldMapper.Builder {
@Setter
@Getter
private OriginalMappingParameters originalParameters;
@Setter
private boolean isKnnIndex;

public Builder(
String name,
Expand All @@ -195,6 +197,7 @@ public Builder(
this.indexCreatedVersion = indexCreatedVersion;
this.knnMethodConfigContext = knnMethodConfigContext;
this.originalParameters = originalParameters;
this.isKnnIndex = true;
}

@Override
Expand Down Expand Up @@ -250,7 +253,7 @@ public KNNVectorFieldMapper build(BuilderContext context) {
);
}

if (originalParameters.getResolvedKnnMethodContext() == null) {
if (originalParameters.getResolvedKnnMethodContext() == null || isKnnIndex == false) {
return FlatVectorFieldMapper.createFieldMapper(
buildFullName(context),
name,
Expand Down Expand Up @@ -362,10 +365,14 @@ public Mapper.Builder<?> parse(String name, Map<String, Object> node, ParserCont
String.format(Locale.ROOT, "Method and model can not be both specified in the mapping: %s", name)
);
}

// Check for flat configuration
if (isKNNDisabled(parserContext.getSettings())) {
validateFromFlat(builder);
builder.setKnnIndex(false);
if(parserContext.indexVersionCreated().onOrAfter(Version.V_2_17_0)) {
// on and after 2_17_0 we validate to makes sure that mapping doesn't contain parameters that are
// specific to approximate knn search algorithms
validateFromFlat(builder);
}
} else if (builder.modelId.get() != null) {
validateFromModel(builder);
} else {
Expand Down

0 comments on commit 79baf82

Please sign in to comment.