diff --git a/docs/reference/rest-api/info.asciidoc b/docs/reference/rest-api/info.asciidoc index 98698a44fa793..c2e88cf822e3f 100644 --- a/docs/reference/rest-api/info.asciidoc +++ b/docs/reference/rest-api/info.asciidoc @@ -146,10 +146,6 @@ Example response: "available" : true, "enabled" : true }, - "vectors" : { - "available" : true, - "enabled" : true - }, "voting_only" : { "available" : true, "enabled" : true diff --git a/docs/reference/rest-api/usage.asciidoc b/docs/reference/rest-api/usage.asciidoc index a63e6739866a0..65dabf500524e 100644 --- a/docs/reference/rest-api/usage.asciidoc +++ b/docs/reference/rest-api/usage.asciidoc @@ -276,13 +276,6 @@ GET /_xpack/usage "available" : true, "enabled" : true }, - "vectors" : { - "available" : true, - "enabled" : true, - "dense_vector_fields_count" : 0, - "dense_vector_dims_avg_count" : 0, - "sparse_vector_fields_count" : 0 - }, "voting_only" : { "available" : true, "enabled" : true diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackField.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackField.java index 4e0bb16f3426c..19e4213cd920c 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackField.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackField.java @@ -44,6 +44,7 @@ public final class XPackField { public static final String TRANSFORM = "transform"; /** Name constant for flattened fields. */ public static final String FLATTENED = "flattened"; + @Deprecated /** Name constant for the vectors feature. */ public static final String VECTORS = "vectors"; /** Name constant for the voting-only-node feature. */ diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/vectors/VectorsFeatureSetUsage.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/vectors/VectorsFeatureSetUsage.java index 712086db27b84..ab4679994a4a0 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/vectors/VectorsFeatureSetUsage.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/vectors/VectorsFeatureSetUsage.java @@ -17,6 +17,11 @@ import java.io.IOException; import java.util.Objects; +/** + * @deprecated This class exists for backwards compatibility with 7.14 only + * and should not be used for other purposes. + */ +@Deprecated public class VectorsFeatureSetUsage extends XPackFeatureSet.Usage { private final int numDenseVectorFields; diff --git a/x-pack/plugin/src/yamlRestTest/resources/rest-api-spec/test/vectors/50_vector_stats.yml b/x-pack/plugin/src/yamlRestTest/resources/rest-api-spec/test/vectors/50_vector_stats.yml deleted file mode 100644 index 96190125efd66..0000000000000 --- a/x-pack/plugin/src/yamlRestTest/resources/rest-api-spec/test/vectors/50_vector_stats.yml +++ /dev/null @@ -1,51 +0,0 @@ -setup: - - skip: - features: [headers, warnings] - version: " - 7.3.99" - reason: "vector stats was added from 7.4" - ---- -"Usage stats on vector fields": - - do: {xpack.usage: {}} - - match: { vectors.available: true } - - match: { vectors.enabled: true } - - match: { vectors.dense_vector_fields_count: 0 } - - match: { vectors.sparse_vector_fields_count: 0 } - - match: { vectors.dense_vector_dims_avg_count: 0 } - - - do: - indices.create: - index: test-index1 - body: - settings: - number_of_shards: 1 - number_of_replicas: 0 - mappings: - properties: - my_dense_vector1: - type: dense_vector - dims: 10 - my_dense_vector2: - type: dense_vector - dims: 30 - - - do: - warnings: - - The [sparse_vector] field type is deprecated and will be removed in 8.0. - indices.create: - index: test-index2 - body: - mappings: - properties: - my_dense_vector3: - type: dense_vector - dims: 20 - my_sparse_vector1: - type: sparse_vector - - - do: {xpack.usage: {}} - - match: { vectors.available: true } - - match: { vectors.enabled: true } - - match: { vectors.dense_vector_fields_count: 3 } - - match: { vectors.sparse_vector_fields_count: 1 } - - match: { vectors.dense_vector_dims_avg_count: 20 } diff --git a/x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/Vectors.java b/x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/Vectors.java index 4537dda1dd810..f8da832afe1a4 100644 --- a/x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/Vectors.java +++ b/x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/Vectors.java @@ -11,7 +11,6 @@ import org.elasticsearch.index.mapper.Mapper; import org.elasticsearch.plugins.MapperPlugin; import org.elasticsearch.plugins.Plugin; -import org.elasticsearch.xpack.core.XPackPlugin; import org.elasticsearch.xpack.vectors.mapper.DenseVectorFieldMapper; import org.elasticsearch.xpack.vectors.mapper.SparseVectorFieldMapper; @@ -27,9 +26,7 @@ public class Vectors extends Plugin implements MapperPlugin { public Vectors() { } public Collection createGuiceModules() { - return Collections.singletonList(b -> { - XPackPlugin.bindFeatureSet(b, VectorsFeatureSet.class); - }); + return Collections.emptyList(); } @Override diff --git a/x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/VectorsFeatureSet.java b/x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/VectorsFeatureSet.java deleted file mode 100644 index def2ba4bca642..0000000000000 --- a/x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/VectorsFeatureSet.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -package org.elasticsearch.xpack.vectors; - -import org.elasticsearch.action.ActionListener; -import org.elasticsearch.cluster.metadata.IndexMetadata; -import org.elasticsearch.cluster.metadata.MappingMetadata; -import org.elasticsearch.cluster.service.ClusterService; -import org.elasticsearch.common.inject.Inject; -import org.elasticsearch.xpack.core.XPackFeatureSet; -import org.elasticsearch.xpack.core.XPackField; -import org.elasticsearch.xpack.core.vectors.VectorsFeatureSetUsage; -import org.elasticsearch.xpack.vectors.mapper.DenseVectorFieldMapper; -import org.elasticsearch.xpack.vectors.mapper.SparseVectorFieldMapper; - -import java.util.Map; - -public class VectorsFeatureSet implements XPackFeatureSet { - - private final ClusterService clusterService; - - @Inject - public VectorsFeatureSet(ClusterService clusterService) { - this.clusterService = clusterService; - } - - @Override - public String name() { - return XPackField.VECTORS; - } - - @Override - public boolean available() { - return true; - } - - @Override - public boolean enabled() { - return true; - } - - @Override - public Map nativeCodeInfo() { - return null; - } - - @Override - public void usage(ActionListener listener) { - int numDenseVectorFields = 0; - int numSparseVectorFields = 0; - int avgDenseVectorDims = 0; - - if (clusterService.state() != null) { - for (IndexMetadata indexMetadata : clusterService.state().metadata()) { - MappingMetadata mappingMetadata = indexMetadata.mapping(); - if (mappingMetadata != null) { - Map mappings = mappingMetadata.getSourceAsMap(); - if (mappings.containsKey("properties")) { - @SuppressWarnings("unchecked") Map> fieldMappings = - (Map>) mappings.get("properties"); - for (Map typeDefinition : fieldMappings.values()) { - String fieldType = (String) typeDefinition.get("type"); - if (fieldType != null) { - if (fieldType.equals(DenseVectorFieldMapper.CONTENT_TYPE)) { - numDenseVectorFields++; - int dims = (Integer) typeDefinition.get("dims"); - avgDenseVectorDims += dims; - } else if (fieldType.equals(SparseVectorFieldMapper.CONTENT_TYPE)) { - numSparseVectorFields++; - } - } - } - } - } - } - if (numDenseVectorFields > 0) { - avgDenseVectorDims = avgDenseVectorDims / numDenseVectorFields; - } - } - listener.onResponse(new VectorsFeatureSetUsage(numDenseVectorFields, numSparseVectorFields, avgDenseVectorDims)); - } -} diff --git a/x-pack/plugin/vectors/src/test/java/org/elasticsearch/xpack/vectors/VectorsFeatureSetTests.java b/x-pack/plugin/vectors/src/test/java/org/elasticsearch/xpack/vectors/VectorsFeatureSetTests.java deleted file mode 100644 index 1a0558c5b4d91..0000000000000 --- a/x-pack/plugin/vectors/src/test/java/org/elasticsearch/xpack/vectors/VectorsFeatureSetTests.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -package org.elasticsearch.xpack.vectors; - -import org.elasticsearch.Version; -import org.elasticsearch.action.support.PlainActionFuture; -import org.elasticsearch.cluster.ClusterName; -import org.elasticsearch.cluster.ClusterState; -import org.elasticsearch.cluster.metadata.IndexMetadata; -import org.elasticsearch.cluster.metadata.Metadata; -import org.elasticsearch.cluster.service.ClusterService; -import org.elasticsearch.test.ESTestCase; -import org.elasticsearch.xpack.core.XPackFeatureSet; -import org.elasticsearch.xpack.core.vectors.VectorsFeatureSetUsage; -import org.junit.Before; -import org.mockito.Mockito; - -import static org.hamcrest.Matchers.is; -import static org.mockito.Mockito.mock; - -public class VectorsFeatureSetTests extends ESTestCase { - - private ClusterService clusterService; - - @Before - public void init() { - clusterService = mock(ClusterService.class); - } - - public void testAvailable() throws Exception { - VectorsFeatureSet featureSet = new VectorsFeatureSet(clusterService); - PlainActionFuture future = new PlainActionFuture<>(); - featureSet.usage(future); - XPackFeatureSet.Usage usage = future.get(); - assertThat(usage.available(), is(true)); - } - - public void testUsageStats() throws Exception { - Metadata.Builder metadata = Metadata.builder(); - IndexMetadata.Builder index1 = IndexMetadata.builder("test-index1") - .settings(settings(Version.CURRENT)).numberOfShards(1).numberOfReplicas(0) - .putMapping("_doc", - "{\"properties\":{\"my_dense_vector1\":{\"type\":\"dense_vector\",\"dims\": 10}," + - "\"my_dense_vector2\":{\"type\":\"dense_vector\",\"dims\": 30} }}"); - IndexMetadata.Builder index2 = IndexMetadata.builder("test-index2") - .settings(settings(Version.CURRENT)).numberOfShards(1).numberOfReplicas(0) - .putMapping("_doc", - "{\"properties\":{\"my_dense_vector3\":{\"type\":\"dense_vector\",\"dims\": 20}," + - "\"my_sparse_vector1\":{\"type\":\"sparse_vector\"} }}"); - metadata.put(index1); - metadata.put(index2); - ClusterState clusterState = ClusterState.builder(new ClusterName("_testcluster")).metadata(metadata).build(); - - Mockito.when(clusterService.state()).thenReturn(clusterState); - - PlainActionFuture future = new PlainActionFuture<>(); - VectorsFeatureSet vectorsFeatureSet = new VectorsFeatureSet(clusterService); - vectorsFeatureSet.usage(future); - VectorsFeatureSetUsage vectorUsage = (VectorsFeatureSetUsage) future.get(); - assertEquals(true, vectorUsage.enabled()); - assertEquals(true, vectorUsage.available()); - assertEquals(3, vectorUsage.numDenseVectorFields()); - assertEquals(1, vectorUsage.numSparseVectorFields()); - assertEquals(20, vectorUsage.avgDenseVectorDims()); - } -}