Хонза,
Спасибо за вашу помощь. Я нашел причину.
В вашей тестовой функции "def test_top_hits_are_wrapped_in_response (data_client)" результат доступа к aggs выглядит следующим образом:
hits = [h for h in top_commits.hits]
# Test code
print(type(hits))
print(type(hits[0]))
и вывод
<class 'elasticsearch_dsl.utils.AttrList'>
<class 'es.es_models.QuestionIntent'>
Но мой код такой:
hits = top_commits.hits.hits
print(type(hits))
print(type(hits[0])
и вывод:
<class 'list'>
<class 'dict'>
Похоже, что в списке объектов "top_commits.hits" есть атрибут "совпадения". Я предлагаю, чтобы этот атрибут был скрытым, если вы не хотите предоставлять его для публичного использования. В любом случае, я подумал, что должен получить доступ к пути объекта результата aggs, как показано в пути поиска json ES, и поэтому попал в метод доступа к результату ошибки.