0

Est-ce que le texte ci-dessous est exact ou devrait-il être quelque chose d'autre?accéder à des champs individuels en utilisant la recherche élastique dsl en python

Je reçois les résultats attendus en vérifiant simplement si c'est le moyen le plus efficace d'accéder à des champs individuels (imbriqués).

from elasticsearch import Elasticsearch 
from elasticsearch_dsl import Search, Q 

import json 
client = Elasticsearch('my_server') 

policy_number = 'POLICY1234' 
s = Search(using=client, index = "my_index").query("term",policyNumber=policy_number.lower()) 
es_response = s.execute() 

for hits in es_response: 
    print hits['policyNumber'] 
    print hits.party[0]['fullName'] 
    print hits.party[0].partyAddress[0]['address1'] 
    print hits.party[0].partyAddress[0]['city'] 
    print hits.party[0].phoneList[0]['phoneNumber'] 

Répondre

2

Vous n'avez pas besoin d'appeler execute manuellement et vous ne devez utiliser [] pour accéder aux champs par nom, vous pouvez simplement utiliser l'accès aux attributs:

for hit in s: 
    print hit.policyNumber 
    print hit.party[0].fullName 
    print hit.party[0].partyAddress[0].address1 
    print hit.party[0].partyAddress[0].city 
    print hit.party[0].phoneList[0].phoneNumber 
+0

Bon à savoir ne pas sachez que je pourrais passer l'exécution. Si je devais ne pas utiliser une boucle et ne se souciaient que sur le 1er touché j'aurais >>> es_response = s.execute() >>> print es_response [0] .policyNumber >>> print es_response [0] .party [0] .fullName >>> print es_response [0] .party [0] .phoneList [0] .phoneNumber sans boucle for et sans appel execute() comment faire? >>> print s [0] .policyNumber ne fonctionne pas –

+0

Celui que vous devez exécuter car trancher l'objet 'Search' vient d'introduire les limites' from'/'size'. –