elasticsearch-dsl-py icon indicating copy to clipboard operation
elasticsearch-dsl-py copied to clipboard

Sorting on nested object fields is not handled preperly

Open jhdxr opened this issue 1 year ago • 1 comments

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.

jhdxr avatar Aug 30 '24 07:08 jhdxr

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

miguelgrinberg avatar Aug 30 '24 09:08 miguelgrinberg