web-dev-qa-db-fra.com

Comment obtenir tous les résultats d'Elasticsearch dans Python

Je suis novice dans l'utilisation d'Elasticsearch et j'ai du mal à récupérer tous les résultats lorsque j'exécute une requête Elasticsearch via mon script Python. Mon objectif est d'interroger un index ("mon_index" ci-dessous). ), prenez ces résultats et placez-les dans un pandas DataFrame qui passe par une application Django et se retrouve finalement dans un document Word).

Mon code est:

es = Elasticsearch()
logs_index = "my_index"
logs = es.search(index=logs_index,body=my_query)

et ça me dit que j'ai 72 hits, mais quand je le fais:

df = logs['hits']['hits']
len(df)

Il indique que la longueur n'est que de 10. J'ai vu quelqu'un avoir eu un problème similaire sur cette question mais leur solution n'a pas fonctionné pour moi.

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search
es = Elasticsearch()
logs_index = "my_index"
search = Search(using=es)
total = search.count()
search = search[0:total]
logs = es.search(index=logs_index,body=my_query)
len(logs['hits']['hits'])

La fonction len indique toujours que je n'ai que 10 résultats. Que fais-je de mal ou que puis-je faire d'autre pour récupérer les 72 résultats?

ETA: Je suis conscient que je peux simplement ajouter "taille": 10000 à ma requête pour l'empêcher de se tronquer à seulement 10, mais puisque l'utilisateur entrera sa requête de recherche, je dois trouver une autre manière qui ne se trouve pas seulement dans le requête de recherche.

9
carousallie

Vous devez passer un paramètre size à votre appel es.search().

Veuillez lire les Documents API

size - Nombre de hits à retourner (par défaut: 10)

Un exemple:

es.search(index=logs_index, body=my_query, size=1000)

Veuillez noter que ce n'est pas un moyen optimal d'obtenir tous les documents d'index ou une requête qui renvoie un grand nombre de documents. Pour cela, vous devez effectuer une opération scroll qui est également documentée dans les documents API fournis sous l'abstraction scan () pour scroll Elastic Operation.

Vous pouvez également lire à ce sujet dans documentation elasticsearch

5
Alexandre Juma

Vous devez définir explicitement le size (si le nombre de documents est relativement petit) ou utiliser la fonction scan pour avoir un curseur comme pour un grand nombre de documents.

Numérisation

1
Samaksh Jain