diff --git a/src/main/java/org/opensearch/knn/index/IndexUtil.java b/src/main/java/org/opensearch/knn/index/IndexUtil.java index 208da2ea9..155a82c4e 100644 --- a/src/main/java/org/opensearch/knn/index/IndexUtil.java +++ b/src/main/java/org/opensearch/knn/index/IndexUtil.java @@ -271,6 +271,16 @@ public static boolean isVersionOnOrAfterMinRequiredVersion(Version version, Stri return version.onOrAfter(minimalRequiredVersion); } + /** + * Returns the min version required for feature support + * + * @param feature The name of the feature + * @return Min OpenSearch version required for the feature support + */ + public static Version getMinVersionForFeature(String feature) { + return minimalRequiredVersionMap.get(feature); + } + /** * Checks if index requires shared state * diff --git a/src/main/java/org/opensearch/knn/index/query/KNNQueryBuilder.java b/src/main/java/org/opensearch/knn/index/query/KNNQueryBuilder.java index cef65307a..8f7b703a7 100644 --- a/src/main/java/org/opensearch/knn/index/query/KNNQueryBuilder.java +++ b/src/main/java/org/opensearch/knn/index/query/KNNQueryBuilder.java @@ -12,6 +12,7 @@ import java.util.Objects; import lombok.extern.log4j.Log4j2; + import org.apache.lucene.search.MatchNoDocsQuery; import org.opensearch.core.common.Strings; import org.opensearch.index.mapper.NumberFieldMapper; @@ -40,6 +41,7 @@ import static org.opensearch.knn.common.KNNConstants.MAX_DISTANCE; import static org.opensearch.knn.common.KNNConstants.MIN_SCORE; import static org.opensearch.knn.common.KNNValidationUtil.validateByteVectorValue; +import static org.opensearch.knn.index.IndexUtil.getMinVersionForFeature; import static org.opensearch.knn.index.IndexUtil.isClusterOnOrAfterMinRequiredVersion; import static org.opensearch.knn.index.util.KNNEngine.ENGINES_SUPPORTING_RADIAL_SEARCH; @@ -216,7 +218,7 @@ public KNNQueryBuilder(StreamInput in) throws IOException { vector = in.readFloatArray(); k = in.readInt(); filter = in.readOptionalNamedWriteable(QueryBuilder.class); - if (isClusterOnOrAfterMinRequiredVersion("ignore_unmapped")) { + if (in.getVersion().onOrAfter(getMinVersionForFeature("ignore_unmapped"))) { ignoreUnmapped = in.readOptionalBoolean(); } if (isClusterOnOrAfterMinRequiredVersion(KNNConstants.RADIAL_SEARCH_KEY)) { @@ -324,7 +326,7 @@ protected void doWriteTo(StreamOutput out) throws IOException { out.writeFloatArray(vector); out.writeInt(k); out.writeOptionalNamedWriteable(filter); - if (isClusterOnOrAfterMinRequiredVersion("ignore_unmapped")) { + if (out.getVersion().onOrAfter(getMinVersionForFeature("ignore_unmapped"))) { out.writeOptionalBoolean(ignoreUnmapped); } if (isClusterOnOrAfterMinRequiredVersion(KNNConstants.RADIAL_SEARCH_KEY)) {