2017-06-16 2 views
-1

J'ai un script python qui devrait imprimer tous les ID des personnes dans mes fichiers JSON stockés dans elasticsearch. Mais je n'ai que dix résultats (tronqués), car je sais que par défaut seulement 10 résultats sont affichés.Les résultats d'Elasticsearch limitent le problème

from elasticsearch import Elasticsearch 
import sys 
es = Elasticsearch() 
res = es.search(index="my_docs", body={"query": {"match_all": {}}}) 
print("%d documents found" % res['hits']['total']) 
for doc in res['hits']['hits']: 
     print (" Doc ID: %s" % (doc['_id'])) 

Il est dit 5000 documents trouvés mais renvoie 10 identifiants seulement.

Comment obtenir tous les documents Doc ID de ma collection dans Elasticsearch?

+0

Le titre de votre question est trompeur. Sûrement, ce n'est pas une erreur d'impression, mais une erreur de récupération de données. – DyZ

Répondre

1

Vous devez dire ES revenir plus de dix résultats (ce qui est la valeur par défaut):

body={"query": {"match_all": {}}, 'results': 1000} 

Pour de très grandes quantités de résultats dont vous avez besoin pour obtenir tous les résultats d'une manière d'échange; ES fournit les moyens de le faire.

+0

Merci! Et supposons que je veux imprimer tous les identifiants, puis-je utiliser quelque chose comme «résultats»: «tous»? –

+0

Vous pouvez utiliser sth comme ''result': 10000000000000' mais bien sûr cela conduira à des problèmes de mémoire et de temps de transmission à un moment donné. Pour cette raison, il n'y a pas de "tout". Et rassembler tous les résultats dans un morceau est probablement beaucoup plus coûteux que d'utiliser la variante de pagination mentionnée dans les grands cas. 5000 éléments, cependant, ne devraient pas poser un gros problème pour le moment. Donc, votre cas peut être résolu si vous donnez 10000 comme limite de résultats. – Alfe

0
  1. Utilisez les touches de api si le nombre de documents dépasse 10000.
  2. Utilisez Recherche api avec limite pour obtenir le nombre spécifié.