Skip to content
Merged
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
8889ab5
First attempt at ToDenseVector function
carlosdelest Sep 2, 2025
7383dc9
Add tests for casting using ToDenseVector
carlosdelest Sep 2, 2025
59782e7
Improve tests, remove unsigned long
carlosdelest Sep 2, 2025
5a9a8c1
Add docs and examples, remove string conversion
carlosdelest Sep 2, 2025
1fd0cc0
Fix analyzer and tests
carlosdelest Sep 2, 2025
83331f3
[CI] Auto commit changes from spotless
Sep 2, 2025
ada9dae
Create vectorArgumentsCount() on VectorFunction to determine what par…
carlosdelest Sep 3, 2025
43c0d9a
Add double tests
carlosdelest Sep 3, 2025
8e7247a
Remove unnecessary converters
carlosdelest Sep 3, 2025
ffc52aa
Add ToDenseVectorFromStringEvaluator
carlosdelest Sep 3, 2025
b67e121
Analyzer checks foldables
carlosdelest Sep 3, 2025
1be0364
Change verification process, so ToDenseVector is not used but direct …
carlosdelest Sep 3, 2025
5d790ef
Merge remote-tracking branch 'carlosdelest/non-issue/esql-dense-vecto…
carlosdelest Sep 3, 2025
2656547
Spotless
carlosdelest Sep 3, 2025
09566ed
Add comments, remove unnecessary code
carlosdelest Sep 3, 2025
b8944ec
Fix checkstyle
carlosdelest Sep 4, 2025
68a696b
Add docs
carlosdelest Sep 4, 2025
3b5b7be
Use EsqlDataTypeConverter for converting strings, use target data typ…
carlosdelest Sep 4, 2025
fe73d76
Small fixes to Analyzer
carlosdelest Sep 4, 2025
e64820f
Merge remote-tracking branch 'origin/main' into non-issue/esql-dense-…
carlosdelest Sep 4, 2025
0bceaa0
Fix tests
carlosdelest Sep 4, 2025
a5423de
Update telemetry test
carlosdelest Sep 4, 2025
0b6687a
Add docs
carlosdelest Sep 4, 2025
e66a9b4
Guard name writeable
carlosdelest Sep 4, 2025
bd2209c
Merge branch 'main' into non-issue/esql-dense-vector-casting
carlosdelest Sep 8, 2025
c5fb015
Merge branch 'main' into non-issue/esql-dense-vector-casting
carlosdelest Sep 9, 2025
7ce8d72
Add test guards for capability
carlosdelest Sep 9, 2025
9185b1c
Merge remote-tracking branch 'carlosdelest/non-issue/esql-dense-vecto…
carlosdelest Sep 9, 2025
50fc04b
Merge remote-tracking branch 'origin/main' into non-issue/esql-dense-…
carlosdelest Sep 9, 2025
e1a0890
Merge remote-tracking branch 'origin/main' into non-issue/esql-dense-…
carlosdelest Sep 9, 2025
a0c1363
Merge remote-tracking branch 'carlosdelest/non-issue/esql-dense-vecto…
carlosdelest Sep 9, 2025
fe7d000
Merge branch 'main' into non-issue/esql-dense-vector-casting
carlosdelest Sep 10, 2025
935a000
[CI] Auto commit changes from spotless
Sep 10, 2025
590540e
Fix release tests
carlosdelest Sep 10, 2025
c8d24cf
Merge remote-tracking branch 'origin/main' into non-issue/esql-dense-…
carlosdelest Sep 10, 2025
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

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.

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.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

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 @@ -45,3 +45,59 @@ id:l | new_vector:dense_vector
2 | [9.0, 8.0, 7.0]
3 | [0.054, 0.032, 0.012]
;

convertIntsToDenseVector
required_capability: dense_vector_field_type
required_capability: to_dense_vector_function

// tag::to_dense_vector-ints[]
row ints = [1, 2, 3]
| eval vector = to_dense_vector(ints)
| keep vector
// end::to_dense_vector-ints[]
;

// tag::to_dense_vector-ints-result[]
vector:dense_vector
[1.0, 2.0, 3.0]
// end::to_dense_vector-ints-result[]
;

convertLongsToDenseVector
required_capability: dense_vector_field_type
required_capability: to_dense_vector_function

row longs = [5013792, 2147483647, 501379200000]
| eval vector = to_dense_vector(longs)
| keep vector
;

vector:dense_vector
[5013792.0, 2147483647.0, 501379200000.0]
;

convertDoublesToDenseVector
required_capability: dense_vector_field_type
required_capability: to_dense_vector_function

row doubles = [123.4, 567.8, 901.2]
| eval vector = to_dense_vector(doubles)
| keep vector
;

vector:dense_vector
[123.4, 567.8, 901.2]
;

convertHexStringToDenseVector
required_capability: dense_vector_field_type
required_capability: to_dense_vector_function

row hex_str = "0102030405060708090a0b0c0d0e0f"
| eval vector = to_dense_vector(hex_str)
| keep vector
;

vector:dense_vector
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0]
;
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
# TODO Most tests explicitly set k. Until knn function uses LIMIT as k, we need to explicitly set it to all values
# in the dataset to avoid test failures due to docs allocation in different shards, which can impact results for a
# top-n query at the shard level

knnSearch
required_capability: knn_function_v5

Expand Down Expand Up @@ -410,3 +406,52 @@ host:keyword | semantic_text_dense_field:text
"host1" | live long and prosper
;


knnWithCasting
required_capability: knn_function_v5
required_capability: to_dense_vector_function

from colors metadata _score
| eval query = to_dense_vector([0, 120, 0])
| where knn(rgb_vector, query)
| sort _score desc, color asc
| keep color, rgb_vector
| limit 10
;

color:text | rgb_vector:dense_vector
green | [0.0, 128.0, 0.0]
black | [0.0, 0.0, 0.0]
olive | [128.0, 128.0, 0.0]
teal | [0.0, 128.0, 128.0]
lime | [0.0, 255.0, 0.0]
sienna | [160.0, 82.0, 45.0]
maroon | [128.0, 0.0, 0.0]
navy | [0.0, 0.0, 128.0]
gray | [128.0, 128.0, 128.0]
chartreuse | [127.0, 255.0, 0.0]
;

knnWithHexStringCasting
required_capability: knn_function_v5
required_capability: to_dense_vector_function

from colors metadata _score
| where knn(rgb_vector, "007800")
| sort _score desc, color asc
| keep color, rgb_vector
| limit 10
;

color:text | rgb_vector:dense_vector
green | [0.0, 128.0, 0.0]
black | [0.0, 0.0, 0.0]
olive | [128.0, 128.0, 0.0]
teal | [0.0, 128.0, 128.0]
lime | [0.0, 255.0, 0.0]
sienna | [160.0, 82.0, 45.0]
maroon | [128.0, 0.0, 0.0]
navy | [0.0, 0.0, 128.0]
gray | [128.0, 128.0, 128.0]
chartreuse | [127.0, 255.0, 0.0]
;
Original file line number Diff line number Diff line change
Expand Up @@ -90,17 +90,40 @@ total_null:long
59
;

# TODO Need to implement a conversion function to convert a non-foldable row to a dense_vector
similarityWithRow-Ignore
similarityWithRow
required_capability: cosine_vector_similarity_function
required_capability: to_dense_vector_function

row vector = [1, 2, 3]
row vector = to_dense_vector([1, 2, 3])
| eval similarity = round(v_cosine(vector, [0, 1, 2]), 3)
;

vector: dense_vector | similarity:double
[1.0, 2.0, 3.0] | 0.978
;

similarityWithVectorField
required_capability: cosine_vector_similarity_function
required_capability: to_dense_vector_function

from colors
| where color != "black"
| eval query = to_dense_vector([0, 255, 255])
| eval similarity = v_cosine(rgb_vector, query)
| sort similarity desc, color asc
| limit 10
| keep color, similarity
;

similarity:double
0.978
color:text | similarity:double
cyan | 1.0
teal | 1.0
turquoise | 0.9890533685684204
aqua marine | 0.964962363243103
azure | 0.916246771812439
lavender | 0.9136701822280884
mint cream | 0.9122757911682129
honeydew | 0.9122424125671387
gainsboro | 0.9082483053207397
gray | 0.9082483053207397
;
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,39 @@ total_null:long
;


# TODO Need to implement a conversion function to convert a non-foldable row to a dense_vector
similarityWithRow-Ignore
similarityWithRow
required_capability: dot_product_vector_similarity_function
required_capability: to_dense_vector_function

row vector = [1, 2, 3]
row vector = to_dense_vector([1, 2, 3])
| eval similarity = round(v_dot_product(vector, [0, 1, 2]), 3)
;

vector: dense_vector | similarity:double
[1.0, 2.0, 3.0] | 4.5
;

similarityWithVectorField
required_capability: dot_product_vector_similarity_function
required_capability: to_dense_vector_function

from colors
| eval query = to_dense_vector([0, 255, 255])
| eval similarity = v_dot_product(rgb_vector, query)
| sort similarity desc, color asc
| limit 10
| keep color, similarity
;

similarity:double
0.978
color:text | similarity:double
azure | 65025.5
cyan | 65025.5
white | 65025.5
mint cream | 64388.0
snow | 63750.5
honeydew | 63113.0
ivory | 63113.0
sea shell | 61583.0
lavender | 61200.5
old lace | 60563.0
;
Original file line number Diff line number Diff line change
Expand Up @@ -87,17 +87,39 @@ total_null:long
59
;

# TODO Need to implement a conversion function to convert a non-foldable row to a dense_vector
similarityWithRow-Ignore
similarityWithRow
required_capability: hamming_vector_similarity_function
required_capability: to_dense_vector_function

row vector = [1, 2, 3]
row vector = to_dense_vector([1, 2, 3])
| eval similarity = round(v_hamming(vector, [0, 1, 2]), 3)
;

vector: dense_vector | similarity:double
[1.0, 2.0, 3.0] | 4.0
;

similarityWithVectorField
required_capability: hamming_vector_similarity_function
required_capability: to_dense_vector_function

from colors
| eval query = to_dense_vector([0, 255, 255])
| eval similarity = v_hamming(rgb_vector, query)
| sort similarity desc, color asc
| limit 10
| keep color, similarity
;

similarity:double
0.978

color:text | similarity:double
red | 24.0
orange | 20.0
gold | 18.0
indigo | 18.0
bisque | 17.0
maroon | 17.0
pink | 17.0
salmon | 17.0
black | 16.0
firebrick | 16.0
;
Original file line number Diff line number Diff line change
Expand Up @@ -87,17 +87,39 @@ total_null:long
59
;

# TODO Need to implement a conversion function to convert a non-foldable row to a dense_vector
similarityWithRow-Ignore
similarityWithRow
required_capability: l1_norm_vector_similarity_function
required_capability: to_dense_vector_function

row vector = [1, 2, 3]
row vector = to_dense_vector([1, 2, 3])
| eval similarity = round(v_l1_norm(vector, [0, 1, 2]), 3)
;

vector: dense_vector | similarity:double
[1.0, 2.0, 3.0] | 3.0
;

similarityWithVectorField
required_capability: l1_norm_vector_similarity_function
required_capability: to_dense_vector_function

from colors
| eval query = to_dense_vector([0, 255, 255])
| eval similarity = v_l1_norm(rgb_vector, query)
| sort similarity desc, color asc
| limit 10
| keep color, similarity
;

similarity:double
0.978

color:text | similarity:double
red | 765.0
crimson | 650.0
maroon | 638.0
firebrick | 620.0
orange | 600.0
tomato | 595.0
brown | 591.0
chocolate | 585.0
coral | 558.0
gold | 550.0
;
Loading