Skip to content

Commit 062f2a7

Browse files
committed
Add a capability, and some yaml tests for float vector queries
1 parent fc82f1e commit 062f2a7

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed

modules/lang-painless/src/yamlRestTest/resources/rest-api-spec/test/painless/145_dense_vector_byte_basic.yml

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,38 @@ setup:
107107
- match: {hits.hits.2._id: "1"}
108108
- match: {hits.hits.2._score: 1632.0}
109109
---
110+
"Dot Product float":
111+
- requires:
112+
capabilities:
113+
- path: /_search
114+
capabilities: [byte_float_dot_product_capability]
115+
test_runner_features: [capabilities]
116+
reason: "float vector queries capability added"
117+
- do:
118+
headers:
119+
Content-Type: application/json
120+
search:
121+
rest_total_hits_as_int: true
122+
body:
123+
query:
124+
script_score:
125+
query: {match_all: {} }
126+
script:
127+
source: "dotProduct(params.query_vector, 'vector')"
128+
params:
129+
query_vector: [0.0, 111.0, -13.0, 14.0, -124.0]
130+
131+
- match: {hits.total: 3}
132+
133+
- match: {hits.hits.0._id: "2"}
134+
- match: {hits.hits.0._score: 28732.0}
135+
136+
- match: {hits.hits.1._id: "3"}
137+
- match: {hits.hits.1._score: 17439.0}
138+
139+
- match: {hits.hits.2._id: "1"}
140+
- match: {hits.hits.2._score: 1632.0}
141+
---
110142
"Cosine Similarity":
111143
- do:
112144
headers:
@@ -198,3 +230,39 @@ setup:
198230
- match: {hits.hits.2._id: "1"}
199231
- gte: {hits.hits.2._score: 0.509}
200232
- lte: {hits.hits.2._score: 0.512}
233+
234+
---
235+
"Cosine Similarity float":
236+
- requires:
237+
capabilities:
238+
- path: /_search
239+
capabilities: [byte_float_dot_product_capability]
240+
test_runner_features: [capabilities]
241+
reason: "float vector queries capability added"
242+
- do:
243+
headers:
244+
Content-Type: application/json
245+
search:
246+
rest_total_hits_as_int: true
247+
body:
248+
query:
249+
script_score:
250+
query: {match_all: {} }
251+
script:
252+
source: "cosineSimilarity(params.query_vector, 'vector')"
253+
params:
254+
query_vector: [0.0, 111.0, -13.0, 14.0, -124.0]
255+
256+
- match: {hits.total: 3}
257+
258+
- match: {hits.hits.0._id: "2"}
259+
- gte: {hits.hits.0._score: 0.995}
260+
- lte: {hits.hits.0._score: 0.998}
261+
262+
- match: {hits.hits.1._id: "3"}
263+
- gte: {hits.hits.1._score: 0.829}
264+
- lte: {hits.hits.1._score: 0.832}
265+
266+
- match: {hits.hits.2._id: "1"}
267+
- gte: {hits.hits.2._score: 0.509}
268+
- lte: {hits.hits.2._score: 0.512}

server/src/main/java/org/elasticsearch/rest/action/search/SearchCapabilities.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ private SearchCapabilities() {}
2525
private static final String BIT_DENSE_VECTOR_SYNTHETIC_SOURCE_CAPABILITY = "bit_dense_vector_synthetic_source";
2626
/** Support Byte and Float with Bit dot product. */
2727
private static final String BYTE_FLOAT_BIT_DOT_PRODUCT_CAPABILITY = "byte_float_bit_dot_product_with_bugfix";
28+
/** Support float query vectors on byte vectors */
29+
private static final String BYTE_FLOAT_DOT_PRODUCT_CAPABILITY = "byte_float_dot_product_capability";
2830
/** Support docvalue_fields parameter for `dense_vector` field. */
2931
private static final String DENSE_VECTOR_DOCVALUE_FIELDS = "dense_vector_docvalue_fields";
3032
/** Support transforming rank rrf queries to the corresponding rrf retriever. */
@@ -50,6 +52,7 @@ private SearchCapabilities() {}
5052
capabilities.add(RANGE_REGEX_INTERVAL_QUERY_CAPABILITY);
5153
capabilities.add(BIT_DENSE_VECTOR_SYNTHETIC_SOURCE_CAPABILITY);
5254
capabilities.add(BYTE_FLOAT_BIT_DOT_PRODUCT_CAPABILITY);
55+
capabilities.add(BYTE_FLOAT_DOT_PRODUCT_CAPABILITY);
5356
capabilities.add(DENSE_VECTOR_DOCVALUE_FIELDS);
5457
capabilities.add(TRANSFORM_RANK_RRF_TO_RETRIEVER);
5558
capabilities.add(NESTED_RETRIEVER_INNER_HITS_SUPPORT);

0 commit comments

Comments
 (0)