Skip to content

Commit 366e00f

Browse files
authored
ES|QL - kNN function initial support (#127322)
1 parent aa87f46 commit 366e00f

File tree

28 files changed

+1251
-23
lines changed

28 files changed

+1251
-23
lines changed

docs/reference/query-languages/esql/images/functions/knn.svg

Lines changed: 1 addition & 0 deletions
Loading

docs/reference/query-languages/esql/kibana/definition/functions/knn.json

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/query-languages/esql/kibana/docs/functions/knn.md

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2589,6 +2589,11 @@ public BlockLoader blockLoader(MappedFieldType.BlockLoaderContext blContext) {
25892589
return null;
25902590
}
25912591

2592+
if (dims == null) {
2593+
// No data has been indexed yet
2594+
return BlockLoader.CONSTANT_NULLS;
2595+
}
2596+
25922597
if (indexed) {
25932598
return new BlockDocValuesReader.DenseVectorBlockLoader(name(), dims);
25942599
}

x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/lucene/LuceneQueryEvaluator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ private Vector evalSingleSegmentNonDecreasing(DocVector docs) throws IOException
112112
int min = docs.docs().getInt(0);
113113
int max = docs.docs().getInt(docs.getPositionCount() - 1);
114114
int length = max - min + 1;
115-
try (T scoreBuilder = createVectorBuilder(blockFactory, length)) {
115+
try (T scoreBuilder = createVectorBuilder(blockFactory, docs.getPositionCount())) {
116116
if (length == docs.getPositionCount() && length > 1) {
117117
return segmentState.scoreDense(scoreBuilder, min, max);
118118
}

x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/RestEsqlTestCase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1022,7 +1022,7 @@ public void testMultipleBatchesWithLookupJoin() throws IOException {
10221022
var query = requestObjectBuilder().query(format(null, "from * | lookup join {} on integer {}", testIndexName(), sort));
10231023
Map<String, Object> result = runEsql(query);
10241024
var columns = as(result.get("columns"), List.class);
1025-
assertEquals(21, columns.size());
1025+
assertEquals(22, columns.size());
10261026
var values = as(result.get("values"), List.class);
10271027
assertEquals(10, values.size());
10281028
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ public class CsvTestsDataLoader {
148148
private static final TestDataset LOGS = new TestDataset("logs");
149149
private static final TestDataset MV_TEXT = new TestDataset("mv_text");
150150
private static final TestDataset DENSE_VECTOR = new TestDataset("dense_vector");
151+
private static final TestDataset COLORS = new TestDataset("colors");
151152

152153
public static final Map<String, TestDataset> CSV_DATASET_MAP = Map.ofEntries(
153154
Map.entry(EMPLOYEES.indexName, EMPLOYEES),
@@ -210,7 +211,8 @@ public class CsvTestsDataLoader {
210211
Map.entry(SEMANTIC_TEXT.indexName, SEMANTIC_TEXT),
211212
Map.entry(LOGS.indexName, LOGS),
212213
Map.entry(MV_TEXT.indexName, MV_TEXT),
213-
Map.entry(DENSE_VECTOR.indexName, DENSE_VECTOR)
214+
Map.entry(DENSE_VECTOR.indexName, DENSE_VECTOR),
215+
Map.entry(COLORS.indexName, COLORS)
214216
);
215217

216218
private static final EnrichConfig LANGUAGES_ENRICH = new EnrichConfig("languages_policy", "enrich-policy-languages.json");
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
color:text,hex_code:keyword,rgb_vector:dense_vector,primary:boolean
2+
maroon, #800000, [128,0,0], false
3+
brown, #A52A2A, [165,42,42], false
4+
firebrick, #B22222, [178,34,34], false
5+
crimson, #DC143C, [220,20,60], false
6+
red, #FF0000, [255,0,0], true
7+
tomato, #FF6347, [255,99,71], false
8+
coral, #FF7F50, [255,127,80], false
9+
salmon, #FA8072, [250,128,114], false
10+
orange, #FFA500, [255,165,0], false
11+
gold, #FFD700, [255,215,0], false
12+
golden rod, #DAA520, [218,165,32], false
13+
khaki, #F0E68C, [240,230,140], false
14+
olive, #808000, [128,128,0], false
15+
yellow, #FFFF00, [255,255,0], true
16+
chartreuse, #7FFF00, [127,255,0], false
17+
green, #008000, [0,128,0], true
18+
lime, #00FF00, [0,255,0], false
19+
teal, #008080, [0,128,128], false
20+
cyan, #00FFFF, [0,255,255], true
21+
turquoise, #40E0D0, [64,224,208], false
22+
aqua marine, #7FFFD4, [127,255,212], false
23+
navy, #000080, [0,0,128], false
24+
blue, #0000FF, [0,0,255], true
25+
indigo, #4B0082, [75,0,130], false
26+
purple, #800080, [128,0,128], false
27+
thistle, #D8BFD8, [216,191,216], false
28+
plum, #DDA0DD, [221,160,221], false
29+
violet, #EE82EE, [238,130,238], false
30+
magenta, #FF00FF, [255,0,255], true
31+
orchid, #DA70D6, [218,112,214], false
32+
pink, #FFC0CB, [255,192,203], false
33+
beige, #F5F5DC, [245,245,220], false
34+
bisque, #FFE4C4, [255,228,196], false
35+
wheat, #F5DEB3, [245,222,179], false
36+
corn silk, #FFF8DC, [255,248,220], false
37+
lemon chiffon, #FFFACD, [255,250,205], false
38+
sienna, #A0522D, [160,82,45], false
39+
chocolate, #D2691E, [210,105,30], false
40+
peru, #CD853F, [205,133,63], false
41+
burly wood, #DEB887, [222,184,135], false
42+
tan, #D2B48C, [210,180,140], false
43+
moccasin, #FFE4B5, [255,228,181], false
44+
peach puff, #FFDAB9, [255,218,185], false
45+
misty rose, #FFE4E1, [255,228,225], false
46+
linen, #FAF0E6, [250,240,230], false
47+
old lace, #FDF5E6, [253,245,230], false
48+
papaya whip, #FFEFD5, [255,239,213], false
49+
sea shell, #FFF5EE, [255,245,238], false
50+
mint cream, #F5FFFA, [245,255,250], false
51+
lavender, #E6E6FA, [230,230,250], false
52+
honeydew, #F0FFF0, [240,255,240], false
53+
ivory, #FFFFF0, [255,255,240], false
54+
azure, #F0FFFF, [240,255,255], false
55+
snow, #FFFAFA, [255,250,250], false
56+
black, #000000, [0,0,0], true
57+
gray, #808080, [128,128,128], true
58+
silver, #C0C0C0, [192,192,192], false
59+
gainsboro, #DCDCDC, [220,220,220], false
60+
white, #FFFFFF, [255,255,255], true

0 commit comments

Comments
 (0)