Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions docs/changelog/140005.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
pr: 140005
summary: Add dense_vector equality and inequality support in ES|QL
area: ES|QL
type: enhancement
issues:
- 139929
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
| date | date_nanos | boolean |
| date_nanos | date | boolean |
| date_nanos | date_nanos | boolean |
| dense_vector | dense_vector | boolean |
| double | double | boolean |
| double | integer | boolean |
| double | long | boolean |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
| date | date_nanos | boolean |
| date_nanos | date | boolean |
| date_nanos | date_nanos | boolean |
| dense_vector | dense_vector | boolean |
| double | double | boolean |
| double | integer | boolean |
| double | long | boolean |
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import static org.elasticsearch.xpack.esql.CsvTestsDataLoader.ENRICH_POLICIES;
import static org.elasticsearch.xpack.esql.EsqlTestUtils.classpathResources;
import static org.elasticsearch.xpack.esql.action.EsqlCapabilities.Cap.COMPLETION;
import static org.elasticsearch.xpack.esql.action.EsqlCapabilities.Cap.DENSE_VECTOR_EQUALITY;
import static org.elasticsearch.xpack.esql.action.EsqlCapabilities.Cap.ENABLE_FORK_FOR_REMOTE_INDICES_V2;
import static org.elasticsearch.xpack.esql.action.EsqlCapabilities.Cap.ENABLE_LOOKUP_JOIN_ON_REMOTE;
import static org.elasticsearch.xpack.esql.action.EsqlCapabilities.Cap.FORK_V9;
Expand Down Expand Up @@ -225,6 +226,11 @@ protected void shouldSkipTest(String testName) throws IOException {
// MultiCluster CCS does not yet support VIEWS, due to rewriting FROM name to FROM *:name
assumeFalse("VIEWS not yet supported in CCS", testCase.requiredCapabilities.contains(VIEWS_WITH_NO_BRANCHING.capabilityName()));
assumeFalse("VIEWS not yet supported in CCS", testCase.requiredCapabilities.contains(VIEWS_WITH_BRANCHING.capabilityName()));

assumeFalse(
"Dense vector equality is not supported in CCS unless all nodes support it",
testCase.requiredCapabilities.contains(DENSE_VECTOR_EQUALITY.capabilityName())
);
}

private TestFeatureService remoteFeaturesService() throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,3 +111,37 @@ from dense_vector_bfloat16
count_vectors:long
4
;

denseBFloat16VectorCompareSpecifically
required_capability: dense_vector_equality

FROM dense_vector_bfloat16
| EVAL same = bfloat16_vector == to_dense_vector([1.0, 2.0, 3.0])
| KEEP id, same
| SORT id
;

id:l | same:boolean
0 | true
1 | false
2 | false
3 | false
4 | null
;

denseBFloat16VectorCompareDifferentDimensions
required_capability: dense_vector_equality

FROM dense_vector_bfloat16
| EVAL same = bfloat16_vector == to_dense_vector([1.0, 2.0])
| KEEP id, same
| SORT id
;

id:l | same:boolean
0 | false
1 | false
2 | false
3 | false
4 | null
;
Original file line number Diff line number Diff line change
Expand Up @@ -107,3 +107,37 @@ from dense_vector
count_vectors:long
4
;

denseBitVectorCompareSpecifically
required_capability: dense_vector_equality

FROM dense_vector
| EVAL same = bit_vector == to_dense_vector([13, 112])
| KEEP id, same
| SORT id
;

id:l | same:boolean
0 | true
1 | false
2 | false
3 | false
4 | null
;

denseBitVectorCompareDifferentDimensions
required_capability: dense_vector_equality

FROM dense_vector
| EVAL same = bit_vector == to_dense_vector([13])
| KEEP id, same
| SORT id
;

id:l | same:boolean
0 | false
1 | false
2 | false
3 | false
4 | null
;
Original file line number Diff line number Diff line change
Expand Up @@ -107,3 +107,37 @@ from dense_vector
count_vectors:long
4
;

denseByteVectorCompareSpecifically
required_capability: dense_vector_equality

FROM dense_vector
| EVAL same = byte_vector == to_dense_vector([10, 20, 30])
| KEEP id, same
| SORT id
;

id:l | same:boolean
0 | true
1 | false
2 | false
3 | false
4 | null
;

denseByteVectorCompareDifferentDimensions
required_capability: dense_vector_equality

FROM dense_vector
| EVAL same = byte_vector == to_dense_vector([10, 20])
| KEEP id, same
| SORT id
;

id:l | same:boolean
0 | false
1 | false
2 | false
3 | false
4 | null
;
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ denseVectorWithEnrich
required_capability: enrich_load
required_capability: enrich_dense_vector_bugfix

from colors
from colors
| enrich colors_policy
| sort color_name
| limit 10
Expand Down Expand Up @@ -165,7 +165,7 @@ from dense_vector
;

count_vectors:long
4
4
;

denseVectorLiteralCount
Expand All @@ -176,7 +176,7 @@ row vector = to_dense_vector([0, 1, 2])
;

count_vectors:long
1
1
;

coalesceDenseVectorWithFallback
Expand Down Expand Up @@ -213,3 +213,118 @@ id:l | v:dense_vector
4 | [0.5, 0.5, 0.5]
;

denseVectorEqualsSameVector
required_capability: dense_vector_equality

row v1 = to_dense_vector([1.0, 2.0, 3.0])
| eval v2 = v1, result = v1 == v2
| keep result
;

result:boolean
true
;

denseVectorEqualsDifferentVector
required_capability: dense_vector_equality

row v1 = to_dense_vector([1.0, 2.0, 3.0]), v2 = to_dense_vector([4.0, 5.0, 6.0])
| eval result = v1 == v2
| keep result
;

result:boolean
false
;

denseVectorNotEqualsSameVector
required_capability: dense_vector_equality

row v1 = to_dense_vector([1.0, 2.0, 3.0])
| eval v2 = v1, result = v1 != v2
| keep result
;

result:boolean
false
;

denseVectorNotEqualsDifferentVector
required_capability: dense_vector_equality

row v1 = to_dense_vector([1.0, 2.0, 3.0]), v2 = to_dense_vector([4.0, 5.0, 6.0])
| eval result = v1 != v2
| keep result
;

result:boolean
true
;

denseVectorEqualsFromData
required_capability: dense_vector_equality

FROM dense_vector
| EVAL same = float_vector == float_vector
| KEEP id, same
| SORT id
;

id:l | same:boolean
0 | true
1 | true
2 | true
3 | true
4 | null
;

denseVectorNotEqualsFromData
required_capability: dense_vector_equality

FROM dense_vector
| EVAL different = float_vector != float_vector
| KEEP id, different
| SORT id
;

id:l | different:boolean
0 | false
1 | false
2 | false
3 | false
4 | null
;

denseVectorCompareSpecifically
required_capability: dense_vector_equality

FROM dense_vector
| EVAL same = float_vector == to_dense_vector([1.0, 2.0, 3.0])
| KEEP id, same
| SORT id
;

id:l | same:boolean
0 | true
1 | false
2 | false
3 | false
4 | null
;

denseVectorCompareDifferentDimensions
required_capability: dense_vector_equality

FROM dense_vector
| EVAL same = float_vector == to_dense_vector([1.0, 2.0])
| KEEP id, same
| SORT id
;

id:l | same:boolean
0 | false
1 | false
2 | false
3 | false
4 | null
;
Original file line number Diff line number Diff line change
Expand Up @@ -2219,6 +2219,11 @@ public enum Cap {
*/
FIX_UNMAPPED_FIELDS_IN_ESRELATION,

/**
* Support for dense_vector equality and inequality operators (==, !=).
*/
DENSE_VECTOR_EQUALITY,

/**
* Fix for not including metadata _doc_count in the _timeseries column
* https://github.com/elastic/elasticsearch/issues/143464
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ public class Equals extends EsqlBinaryComparison implements Negatable<EsqlBinary
Map.entry(DataType.KEYWORD, EqualsKeywordsEvaluator.Factory::new),
Map.entry(DataType.TEXT, EqualsKeywordsEvaluator.Factory::new),
Map.entry(DataType.VERSION, EqualsKeywordsEvaluator.Factory::new),
Map.entry(DataType.IP, EqualsKeywordsEvaluator.Factory::new)
Map.entry(DataType.IP, EqualsKeywordsEvaluator.Factory::new),
Map.entry(DataType.DENSE_VECTOR, EqualsDenseVectorEvaluator.Factory::new)
);

@FunctionInfo(
Expand All @@ -75,6 +76,7 @@ public Equals(
"cartesian_point",
"cartesian_shape",
"date",
"dense_vector",
"double",
"geo_point",
"geo_shape",
Expand All @@ -97,6 +99,7 @@ public Equals(
"cartesian_point",
"cartesian_shape",
"date",
"dense_vector",
"double",
"geo_point",
"geo_shape",
Expand Down
Loading
Loading