elastic / elasticsearch-dsl-py

High level Python client for Elasticsearch
http://elasticsearch-dsl.readthedocs.org
Apache License 2.0
3.84k stars 802 forks source link

Sorting on nested object fields is not handled preperly #1891

Open jhdxr opened 3 months ago

jhdxr commented 3 months ago

Say for a sort like this

s = Search(using=client, index=source)
s = s.sort("metadata.date")

Won't work because ES will complain "it is mandatory to set the [nested] context on the nested sort field: [metadata.date].

To fix it, you should use raw query, which means something like this

s = s.sort({
       "metadata.date": {
            "order": "asc", 
            "nested": {
                "path": "metadata"
            }
     }
})

While I think it makes sense for ES and the elasticsearch-py library ask user to do so, elasticsearch-dsl is not the case. This library is aimed to avoid writing raw query, and it should be able to infer that if the fields is nested or not, and generated the path accordingly if necessary.

miguelgrinberg commented 3 months ago

Hi! Yes, I agree, we should be able to create the correct sort format.