Elasticsearch -Updates sind nicht unmittelbar.

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Elasticsearch -Updates sind nicht unmittelbar.

by Anonymous » 06 Feb 2025, 06:18

Ich versuche, die Leistung in einer Suite zu verbessern, die gegen Elasticsearch testet. < /p>

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
Derzeit ist die Lösung für dieses Problem miteinander gehackt. p>

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.>

Top