asticsearch_dsl отмечает, что операция top-hit возвращает dict вместо документов - PullRequest
0 голосов
/ 07 сентября 2018

Мой эластичный_архит_dsl версии 6.3.1, и мой код такой:


s = MyDoc.search () s.aggs.bucket ("top_recommend", "term", field = "Recommended_name", order = {"_ count": "desc"}). metric ("top_hit_three", "top_hits", size = 3)

Но возвращаемый результат определяется в response.aggregations.top_recommend.buckets, я предполагаю, что buckets содержит экземпляры MyDoc. Это ошибка упругого поиска_данных?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Хонза,
Спасибо за вашу помощь. Я нашел причину. В вашей тестовой функции "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, и поэтому попал в метод доступа к результату ошибки.

0 голосов
/ 09 сентября 2018

Это выглядит как-то не так с вашей настройкой, это работает в тестовом наборе, как вы можете видеть на https://github.com/elastic/elasticsearch-dsl-py/blob/master/test_elasticsearch_dsl/test_integration/test_search.py#L43-L53

Если это не работает для вас, это действительно может быть ошибка, не могли бы вы представить проблему с возможностью ее репликации? Спасибо!

...