diff --git a/elasticsearch_dsl/query.py b/elasticsearch_dsl/query.py index f0ec5bc3..0b5be820 100644 --- a/elasticsearch_dsl/query.py +++ b/elasticsearch_dsl/query.py @@ -416,6 +416,10 @@ class Intervals(Query): name = "intervals" +class Knn(Query): + name = "knn" + + class Limit(Query): name = "limit" diff --git a/tests/test_query.py b/tests/test_query.py index 4571e227..fc4e430b 100644 --- a/tests/test_query.py +++ b/tests/test_query.py @@ -612,3 +612,14 @@ def test_expand_double_underscore_to_dot_setting(): q = query.Term(comment__count=2) assert q.to_dict() == {"term": {"comment__count": 2}} utils.EXPAND__TO_DOT = True + + +def test_knn_query(): + q = query.Knn(field="image-vector", query_vector=[-5, 9, -12], num_candidates=10) + assert q.to_dict() == { + "knn": { + "field": "image-vector", + "query_vector": [-5, 9, -12], + "num_candidates": 10, + } + }