Ich versuche gerade, ein Dokument zu erstellen oder zu ersetzen, aber die API-Dokumentation ist nicht klar, wie dies zu tun ist.Wie erstelle oder ersetze ich ein Dokument in Elasticsearch?
Das upsert Beispiel zeigt ein Dokument mit einem counter
Wert von 1
erstellt werden:
client.update({
index: 'myindex',
type: 'mytype',
id: '777',
body: {
script: 'ctx._source.counter += 1',
upsert: {
counter: 1
}
}
}, function(error, response) {
// ...
})
Ich habe nicht die Erhöhung Skript benötigen, also versuche ich, nur eine Upsert selbst zu senden, aber ich bekomme eine 400 Validation Failed: 1: script or doc is missing
:
client.update({
index: "testindex",
type: "testType",
id: 1234,
body: {
upsert: {
itworks: true,
ok: "oh yeah"
}
}
})
Nun, lassen Sie uns versuchen, etwas albern und schließen die doc zweimal; einmal unter doc
, die vermutlich ein vorhandenes Dokument ersetzen würde, wenn es eine war, und einmal unter upsert
, die verwendet werden würde sonst ein neues Dokument zu erstellen:
client.update({
index: "testindex",
type: "testType",
id: 1234,
body: {
upsert: {
itworks: true,
ok: "oh yeah"
},
doc: {
itworks: true,
ok: "oh yeah"
}
}
})
, die tatsächlich funktioniert, 201 Erstellt. 200 OK, wenn ich es wiederholen Sie den doc mit einem anderen zu ersetzen:
client.update({
index: "testindex",
type: "testType",
id: 1234,
body: {
upsert: {
whatever: "man"
},
doc: {
whatever: "man"
}
}
})
Aber wenn ich die doc (client.get({index: "testindex", type: "testType", id: 1234})
) überprüfen, wie ich sehe, dass stattdessen die vorhandene doc zu ersetzen, die neue doc mit ihm verschmolzen wurde.
Wie ersetzen Sie einfach ein Dokument in Elasticsearch, mit dem Standard-Knoten-Client? Die HTTP-API lässt es aussehen so simple, aber ich habe eine Reihe von Permutationen davon im Knoten-Client ohne Erfolg versucht. Gibt es keinen Ersetzungsbefehl? Muss ich löschen und dann erstellen?
Ein 'create' Aufruf mit der gleichen ID gibt einen 409 Konflikt zurück: Dokument existiert, oder ein Versionskonflikt, wenn ich eine Version einschließe, die nicht mit der bestehenden Version übereinstimmt. –
probiere 'index' statt' create' –
Das war's! Ich hätte den Begriff nie erraten. Ich habe über Indizes nachgedacht, wie sie in einem RDBMS verwendet werden, wo sie meistens nur eine Optimierung sind. –