diff --git a/elasticsearch_dsl/query.py b/elasticsearch_dsl/query.py index cedd0a7ae..642ce2c88 100644 --- a/elasticsearch_dsl/query.py +++ b/elasticsearch_dsl/query.py @@ -499,6 +499,11 @@ class Script(Query): name = "script" +class ScriptScore(Query): + name = "script_score" + _param_defs = {"query": {"type": "query"}} + + class Type(Query): name = "type" diff --git a/tests/test_query.py b/tests/test_query.py index 2e58040f2..2c9823eff 100644 --- a/tests/test_query.py +++ b/tests/test_query.py @@ -538,3 +538,18 @@ def test_function_score_from_dict(): assert isinstance(sf, function.BoostFactor) assert 6 == sf.value assert {"boost_factor": 6} == sf.to_dict() + + +def test_script_score(): + d = { + "script_score": { + "query": {"match_all": {}}, + "script": {"source": "...", "params": {}}, + } + } + q = query.Q(d) + + assert isinstance(q, query.ScriptScore) + assert isinstance(q.query, query.MatchAll) + assert q.script == {"source": "...", "params": {}} + assert q.to_dict() == d