2016-06-15 1 views
0

Je le code suivant:Comment accéder à l'objet de réponse à l'aide DSL ElasticSearch pour python

s = Search(using=Elasticsearch('http://user:[email protected]'), index="myindex") 
q = Q("multi_match", query='some query', fields=['_all']) 
s = s.query(q) 

response = s.execute() 
print('Total %d hits found.' % response.hits.total) 
for hit in response: 
    print(hit.title) 

Et j'obtiens l'erreur:

Traceback (most recent call last): 
File "/usr/local/lib/python3.5/dist-packages/elasticsearch_dsl/utils.py", line 102, in __getattr__ 
return _wrap(self._d_[attr_name]) 
KeyError: 'title' 
During handling of the above exception, another exception occurred: 
Traceback (most recent call last): 
File "FindImage.py", line 89, in <module> 
main(args.image_file) 
File "FindImage.py", line 82, in main 
query_db([1], [2]) 
File "FindImage.py", line 77, in query_db 
print(hit.title) 
File "/usr/local/lib/python3.5/dist-packages/elasticsearch_dsl/utils.py", line 105, in __getattr__ 
'%r object has no attribute %r' % (self.__class__.__name__, attr_name)) 
AttributeError: 'Result' object has no attribute 'title' 

Cependant ce qui est en contradiction directe avec ce que les docs état: Docs

Qu'est-ce que je fais mal? Comment puis-je extraire correctement les résultats et mes valeurs de la réponse?

EDIT

également l'objet de réponse ist censé avoir une méthode « toDict » mais lorsque je tente de l'appeler j'obtenir à nouveau un AttributeError.

Répondre

1

Apparemment, le ".title" fait référence à une colonne réelle dans leur exemple. Lorsque j'ai utilisé hit.doc.FIRSTTAG, FIRSTTAG étant une colonne dans MY NoSQL-db cela a fonctionné. N'explique toujours pas la méthode manquante, mais j'en suis content pour l'instant.

Donc, pour toute personne ayant le même problème:

Utilisez vos propres noms de colonnes lors de l'évaluation de l'objet de réponse par exemple dans mon exemple:

for hit in response: 
    print(hit.doc.FIRSTTAG)