Die Tests dauern lange, da Elasticsearch seine Indizes nicht sofort nach der Aktualisierung aktualisiert. Zum Beispiel wird der folgende Code ausgeführt, ohne einen Behauptungsfehler zu erhöhen. < /P>
Code: Select all
from elasticsearch import Elasticsearch
elasticsearch = Elasticsearch('es.test')
# Asumming that this is a clean and empty elasticsearch instance
elasticsearch.update(
index='blog',
doc_type=,'blog'
id=1,
body={
....
}
)
results = elasticsearch.search()
assert not results
# results are not populated
from time import sleep
from elasticsearch import Elasticsearch
elasticsearch = Elasticsearch('es.test')
# Asumming that this is a clean and empty elasticsearch instance
elasticsearch.update(
index='blog',
doc_type=,'blog'
id=1,
body={
....
}
)
# Don't want to use sleep functions
sleep(1)
results = elasticsearch.search()
assert len(results) == 1
# results are now populated
< /code>
Offensichtlich ist dies nicht großartig, da es eher fehleranfällig ist. Wenn Elasticsearch länger als eine Sekunde dauert, um seine Indizes zu aktualisieren scheitern. Außerdem ist es extrem langsam, wenn Sie 100er von Tests wie diesen durchführen. < /P>
Mein Versuch, das Problem zu lösen Aufgaben, die erledigt werden müssen. Dies funktioniert jedoch nicht, und dieser Code wird ohne Behauptungsfehler ausgeführt. < /P>
from elasticsearch import Elasticsearch
elasticsearch = Elasticsearch('es.test')
# Asumming that this is a clean and empty elasticsearch instance
elasticsearch.update(
index='blog',
doc_type=,'blog'
id=1,
body={
....
}
)
# Query if there are any pending tasks
while elasticsearch.cluster.pending_tasks()['tasks']:
pass
results = elasticsearch.search()
assert not results
# results are not populated
< /code>
Im Grunde genommen sind Elasticsearch -Updates nicht
unmittelbar, wie warten Sie darauf, dass Elasticsearch die Aktualisierung des Index beendet hat? < /P.>