Skip to content

Commit 6f4d011

Browse files
committed
Add dense_vector field type support
1 parent a684e10 commit 6f4d011

File tree

9 files changed

+20
-10
lines changed

9 files changed

+20
-10
lines changed

x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/plugin/EsqlCorePlugin.java

+1
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@
1414
public class EsqlCorePlugin extends Plugin implements ExtensiblePlugin {
1515

1616
public static final FeatureFlag AGGREGATE_METRIC_DOUBLE_FEATURE_FLAG = new FeatureFlag("esql_aggregate_metric_double");
17+
public static final FeatureFlag DENSE_VECTOR_FEATURE_FLAG = new FeatureFlag("esql_dense_vector");
1718
}

x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/type/DataType.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,9 @@ public enum DataType {
302302
*/
303303
PARTIAL_AGG(builder().esType("partial_agg").unknownSize()),
304304

305-
AGGREGATE_METRIC_DOUBLE(builder().esType("aggregate_metric_double").estimatedSize(Double.BYTES * 3 + Integer.BYTES));
305+
AGGREGATE_METRIC_DOUBLE(builder().esType("aggregate_metric_double").estimatedSize(Double.BYTES * 3 + Integer.BYTES)),
306+
307+
DENSE_VECTOR(builder().esType("dense_vector").unknownSize());
306308

307309
/**
308310
* Types that are actively being built. These types are not returned
@@ -311,7 +313,8 @@ public enum DataType {
311313
* check that sending them to a function produces a sane error message.
312314
*/
313315
public static final Map<DataType, FeatureFlag> UNDER_CONSTRUCTION = Map.ofEntries(
314-
Map.entry(AGGREGATE_METRIC_DOUBLE, EsqlCorePlugin.AGGREGATE_METRIC_DOUBLE_FEATURE_FLAG)
316+
Map.entry(AGGREGATE_METRIC_DOUBLE, EsqlCorePlugin.AGGREGATE_METRIC_DOUBLE_FEATURE_FLAG),
317+
Map.entry(DENSE_VECTOR, EsqlCorePlugin.DENSE_VECTOR_FEATURE_FLAG)
315318
);
316319

317320
private final String typeName;

x-pack/plugin/esql/qa/testFixtures/src/main/java/org/elasticsearch/xpack/esql/EsqlTestUtils.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -837,7 +837,7 @@ public static Literal randomLiteral(DataType type) {
837837
throw new UncheckedIOException(e);
838838
}
839839
}
840-
case UNSUPPORTED, OBJECT, DOC_DATA_TYPE, TSID_DATA_TYPE, PARTIAL_AGG -> throw new IllegalArgumentException(
840+
case UNSUPPORTED, OBJECT, DOC_DATA_TYPE, TSID_DATA_TYPE, PARTIAL_AGG, DENSE_VECTOR -> throw new IllegalArgumentException(
841841
"can't make random values for [" + type.typeName() + "]"
842842
);
843843
}, type);

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.Set;
2121

2222
import static org.elasticsearch.xpack.esql.core.plugin.EsqlCorePlugin.AGGREGATE_METRIC_DOUBLE_FEATURE_FLAG;
23+
import static org.elasticsearch.xpack.esql.core.plugin.EsqlCorePlugin.DENSE_VECTOR_FEATURE_FLAG;
2324

2425
/**
2526
* A {@link Set} of "capabilities" supported by the {@link RestEsqlQueryAction}
@@ -1038,7 +1039,12 @@ public enum Cap {
10381039
/**
10391040
* Support for the SAMPLE command
10401041
*/
1041-
SAMPLE(Build.current().isSnapshot());
1042+
SAMPLE(Build.current().isSnapshot()),
1043+
1044+
/**
1045+
* Support for dense_vector field type
1046+
*/
1047+
DENSE_VECTOR_SUPPORT(DENSE_VECTOR_FEATURE_FLAG);
10421048

10431049
private final boolean enabled;
10441050

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/PositionToXContent.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ protected XContentBuilder valueToXContent(XContentBuilder builder, ToXContent.Pa
183183
}
184184
};
185185
case DATE_PERIOD, TIME_DURATION, DOC_DATA_TYPE, TSID_DATA_TYPE, SHORT, BYTE, OBJECT, FLOAT, HALF_FLOAT, SCALED_FLOAT,
186-
PARTIAL_AGG -> throw new IllegalArgumentException("can't convert values of type [" + columnInfo.type() + "]");
186+
PARTIAL_AGG, DENSE_VECTOR -> throw new IllegalArgumentException("can't convert values of type [" + columnInfo.type() + "]");
187187
};
188188
}
189189
}

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/ResponseValueUtils.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ private static Object valueAt(DataType dataType, Block block, int offset, BytesR
148148
}
149149
}
150150
case SHORT, BYTE, FLOAT, HALF_FLOAT, SCALED_FLOAT, OBJECT, DATE_PERIOD, TIME_DURATION, DOC_DATA_TYPE, TSID_DATA_TYPE, NULL,
151-
PARTIAL_AGG -> throw EsqlIllegalArgumentException.illegalDataType(dataType);
151+
PARTIAL_AGG, DENSE_VECTOR -> throw EsqlIllegalArgumentException.illegalDataType(dataType);
152152
};
153153
}
154154
}

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/nulls/Coalesce.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ public ExpressionEvaluator.Factory toEvaluator(ToEvaluator toEvaluator) {
210210
.toEvaluator(toEvaluator, children());
211211
case NULL -> EvalOperator.CONSTANT_NULL_FACTORY;
212212
case UNSUPPORTED, SHORT, BYTE, DATE_PERIOD, OBJECT, DOC_DATA_TYPE, SOURCE, TIME_DURATION, FLOAT, HALF_FLOAT, TSID_DATA_TYPE,
213-
SCALED_FLOAT, PARTIAL_AGG, AGGREGATE_METRIC_DOUBLE -> throw new UnsupportedOperationException(
213+
SCALED_FLOAT, PARTIAL_AGG, AGGREGATE_METRIC_DOUBLE, DENSE_VECTOR -> throw new UnsupportedOperationException(
214214
dataType() + " can’t be coalesced"
215215
);
216216
};

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/LocalExecutionPlanner.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ private PhysicalOperation planTopN(TopNExec topNExec, LocalExecutionPlannerConte
433433
case GEO_POINT, CARTESIAN_POINT, GEO_SHAPE, CARTESIAN_SHAPE, COUNTER_LONG, COUNTER_INTEGER, COUNTER_DOUBLE, SOURCE,
434434
AGGREGATE_METRIC_DOUBLE -> TopNEncoder.DEFAULT_UNSORTABLE;
435435
// unsupported fields are encoded as BytesRef, we'll use the same encoder; all values should be null at this point
436-
case PARTIAL_AGG, UNSUPPORTED -> TopNEncoder.UNSUPPORTED;
436+
case PARTIAL_AGG, DENSE_VECTOR, UNSUPPORTED -> TopNEncoder.UNSUPPORTED;
437437
};
438438
}
439439
List<TopNOperator.SortOrder> orders = topNExec.order().stream().map(order -> {

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/PlannerUtils.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -299,8 +299,8 @@ public static ElementType toElementType(DataType dataType, MappedFieldType.Field
299299
case GEO_POINT, CARTESIAN_POINT -> fieldExtractPreference == DOC_VALUES ? ElementType.LONG : ElementType.BYTES_REF;
300300
case GEO_SHAPE, CARTESIAN_SHAPE -> fieldExtractPreference == EXTRACT_SPATIAL_BOUNDS ? ElementType.INT : ElementType.BYTES_REF;
301301
case PARTIAL_AGG, AGGREGATE_METRIC_DOUBLE -> ElementType.COMPOSITE;
302-
case SHORT, BYTE, DATE_PERIOD, TIME_DURATION, OBJECT, FLOAT, HALF_FLOAT, SCALED_FLOAT -> throw EsqlIllegalArgumentException
303-
.illegalDataType(dataType);
302+
case SHORT, BYTE, DATE_PERIOD, TIME_DURATION, OBJECT, FLOAT, HALF_FLOAT, SCALED_FLOAT, DENSE_VECTOR ->
303+
throw EsqlIllegalArgumentException.illegalDataType(dataType);
304304
};
305305
}
306306

0 commit comments

Comments
 (0)