Indeed, ElasticSearch's nested
type is essential to get this working neatly. This is not by default supported by django-haystack (because it's ES-specific), but it is possible to support this functionality by extending some of haystack's classes.
There is a blog post that explains this quite clearly (and a gist that can be forked).
Coincidentally, I wrote the post and @speedplane already found it, but hey.. ;-)