Skip to content

Commit 891f4fc

Browse files
committed
make knn query not pushable
1 parent 0f77374 commit 891f4fc

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,8 @@ private class ShardState {
184184
private final List<SegmentState> perSegmentState;
185185

186186
ShardState(ShardConfig config) throws IOException {
187-
weight = config.searcher.createWeight(config.query, scoreMode(), 1.0f);
187+
Query rewritten = config.searcher.rewrite(config.query);
188+
weight = config.searcher.createWeight(rewritten, scoreMode(), 1.0f);
188189
searcher = config.searcher;
189190
perSegmentState = new ArrayList<>(Collections.nCopies(searcher.getLeafContexts().size(), null));
190191
}

x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/plugin/KnnFunctionIT.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,24 @@ public void testKnnOptions() {
7878
}
7979
}
8080

81+
public void testKnnNonPushedDown() {
82+
var query = """
83+
FROM test METADATA _score
84+
| WHERE knn(vector, [1.0, 1.0, 1.0], {"k": 5}) OR id % 2 == 0
85+
| KEEP id, floats, _score, vector
86+
| SORT _score DESC
87+
""";
88+
89+
try (var resp = run(query)) {
90+
assertColumnNames(resp.columns(), List.of("id", "floats", "_score", "vector"));
91+
assertColumnTypes(resp.columns(), List.of("integer", "double", "double", "dense_vector"));
92+
93+
List<List<Object>> valuesList = EsqlTestUtils.getValuesList(resp);
94+
// K = 5, 2 more for % operator, total 7
95+
assertEquals(7, valuesList.size());
96+
}
97+
}
98+
8199
@Before
82100
public void setup() throws IOException {
83101
var indexName = "test";

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/vector/Knn.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,13 @@ private Map<String, Object> queryOptions() throws InvalidArgumentException {
146146

147147
@Override
148148
public Expression replaceChildren(List<Expression> newChildren) {
149-
return new Knn(source(), newChildren.get(0), newChildren.get(1), newChildren.size() > 2 ? newChildren.get(2) : null);
149+
return new Knn(
150+
source(),
151+
newChildren.get(0),
152+
newChildren.get(1),
153+
newChildren.size() > 2 ? newChildren.get(2) : null,
154+
queryBuilder()
155+
);
150156
}
151157

152158
@Override

0 commit comments

Comments
 (0)