2016-02-08 3 views
0

Я пытаюсь использовать библиотеку elasticsearch dsl в python, но я, кажется, получаю какие-то усеченные результаты/метаданные вместо объекта document/response. Sanitized запрос ниже:Python ElasticSearch DSL Truncating Results

from elasticsearch_dsl import Search, Q, F 
from elasticsearch_dsl.query import MultiMatch 
from elasticsearch import Elasticsearch 
import requests 
import json 

client = Elasticsearch("") 

s = Search().using(client).query("match", id="1") 
response = s.execute() 
test_response = response.json() 

Который дает эту ошибку:

AttributeError: 'Response' object has no attribute 'json' 

Я надеялся использовать новый DSL, чтобы держать вещи менее многословными. Кто-нибудь сталкивался с чем-то вроде этого или имел какие-либо советы. Очень признателен!

ответ

0

В результате execute() является разбираемый JSON уже (структура такая же, как и ответ от HTTP API):

print(response.hits.total) 

Можно также итерацию по результатам следующим образом (documentation):

for h in response: 
    print(h.title, h.body) 
+0

Интересно. У вас есть какая-то догадка о том, почему я вижу следующие «u'request_attributes»: {}, ...} "? По некоторым причинам мои результаты усекаются. Я подтверждаю, что они вошли в плагин/head. – Pylander

+0

Вы уверены, что следуете советам по выбору правильной версии библиотек для вашей версии Elasticsearch (http://elasticsearch-dsl.readthedocs.org/en/latest/index.html#compatibility)? –

+0

Хммм, это может быть проблемой. Я вижу подробности в руководстве по запуску. Когда я изначально установил elasticsearch-dsl через pip, он понизил elasticsearch с 2.2.0 до 1.9.0, и я не заметил. Поскольку на данный момент я использую jupyter notebooks, мне нужно найти обходной путь для настройки setup.py/requirements.txt. – Pylander

Смежные вопросы