Wie kann ich aktualisieren? elasticsearch Daten mit elasticsearch-dsl Paket? Ist das möglich ?
ich fand elasticsearch update api, aber es scheint etwas schwierig zu sein. Was ich suche, ist
searchObj = Search(using=logserver, index=INDEX)
searchObj=searchObj.query("term",attribute=value).update(attribute=new_value)
response = searchObj.execute()
Antworten:
0 für die Antwort № 1Wenn ich mich nicht irre elasticsearch_dsl
hat keine Option für die Aktualisierung / Massenaktualisierung.
Wenn Sie möchten, können Sie verwenden elasticsearch-py pckage für das gleiche.
Beispiel
from elasticsearch import Elasticsearch
INDEX = "myindex"
LOG_HOST = "myhost:myport"
logserver = Elasticsearch(LOG_HOST)
script = "ctx._source.attribute = new_value"
update_body = {
"query": {
"bool": {
"filter": {
"term": {"attribute": "value"}
}
}
},
"script": {
"source": script,
"lang": "painless"
}
}
update_response = logserver.update_by_query(index=INDEX, body=update_body)
Weitere Informationen finden Sie hier offizielle Dokumentation
0 für die Antwort № 2
@kingArther Antwort ist nicht korrekt.
elasticsearch-dsl
Support-Update sehr gut!
Durch die Zuordnung eines Index zu einem Objekt (DocType) ist dies möglich Sie können ohne JSON-Rest-Anforderungen einfach speichern und aktualisieren.
Sie finden Beispiele für eine API Hier
0 für die Antwort № 3
Es ist wahrscheinlich spät, aber ich lasse diese Antwort fürdiejenigen, die immer noch das gleiche Problem haben: elasticsearch-dsl bietet eine Update-Funktion, die für Klassen aufgerufen werden kann, die die Document-Klasse von elasticsearch-dsl erweitern. Folgendes ist der Code:
data = yourIndexClass.get(id=documentIdInIndex)
data.update(key=NewValue)
Das ist es. Einfach. Details finden Sie hier