from datetime import datetime
from elasticsearch import Elasticsearch
es = Elasticsearch()
doc = {
'author': 'kimchy',
'text': 'Elasticsearch: cool. bonsai cool.',
'timestamp': datetime(2010, 10, 10, 10, 10, 10)
}
res = es.index(index="test-index", doc_type='Tweet', id=1, body=doc)
print(res['created'])
Ce code simple renvoie l'erreur suivante:
elasticsearch.exceptions.ConnectionTimeout: ConnectionTimeout caused by - ReadTimeoutError(HTTPConnectionPool(Host='localhost', port=9200): Read timed out. (read timeout=10))
Très étrange, car le serveur est prêt et configuré ( http: // localhost: 9200/ renvoie un fichier json).
Merci d'avance!
Par défaut, le délai d'attente est défini sur 10 secondes. Si vous souhaitez modifier la valeur du délai d'expiration global, vous pouvez le faire en définissant l'indicateur timeout = votre heure lors de la création de l'objet.
Si vous avez déjà créé l'objet sans spécifier la valeur de délai d'attente, vous pouvez définir la valeur de délai d'attente pour une requête particulière en utilisant request_timeout = your-time flag dans la requête.
es.search(index="my_index",
doc_type="document",
body=get_req_body(),
request_timeout=30)
Un problème de délai de connexion peut survenir si vous utilisez le service Amazon Elastic Search.
es = Elasticsearch ([{'Host': 'xxxxxx.us-east-1.es.amazonaws.com', 'port': 443, 'use_ssl': True}])
Le code python ci-dessus, dans lequel vous substituez le port par défaut de 9200 à 443 et définissez ssl sur true, résoudra le problème.
Si aucun port n'est spécifié, il essaie de se connecter à pprt 9200 dans l'hôte spécifié et échoue après l'expiration du délai
Cela n’a rien à voir avec l’augmentation de votre délai d’attente à 30 secondes ... Est-ce que les gens pensent réellement que la recherche élastique devrait avoir besoin de 30 secondes au maximum pour obtenir un résultat minuscule?
La façon dont j'ai résolu ce problème était d'aller dans config/elasticsearch.yml Commenter ce qui suit
http.port: 9200
network.Host: 'localhost'
Network.Host pourrait être défini sur 192.168.0.1, ce qui pourrait fonctionner, mais je viens de le changer en "localhost"
mon problème personnel a été résolu avec (timeout = 10000)
qui n'a pratiquement jamais été atteint car les entrées sur le serveur n'étaient que de 7 000, mais le trafic était important et les ressources étaient saturées.
Notez que l'une des raisons courantes pour les délais d'attente lorsque vous utilisez es.search
(ou es.index
) est la taille de la requête importante. Par exemple, dans le cas d’une taille d’index ES assez importante (documents> 3M), la recherche d’une requête de 30 mots prenait environ 2 secondes, tandis que celle d’une requête de 400 mots prenait plus de 18 secondes. Donc, pour une requête suffisamment grande, même timeout = 30 ne vous sauvera pas. Une solution simple consiste à recadrer la requête à la taille à laquelle il est possible de répondre en dessous du délai d'attente.
Augmenter le timeout ou faire de nouvelles tentatives sur timeout vous aidera si la cause était dans la circulation, sinon cela pourrait être votre coupable.