Gibt es eine Möglichkeit, die Ausgabe eines ElasticSearch script_fields zu verwenden, um eine andere Variable im Index zu aktualisieren?Elasticsearch script_fields um ein anderes Feld zu aktualisieren?
Ich habe einen Index in ElasticSearch 1.x, der Timestamp aktiviert hat, aber nicht gespeichert. (Siehe unten für mapping)
Dies bedeutet, dass der Zeitstempel kann für die Suche zugegriffen werden kann, oder mit script_fields wie -
GET twitter/_search
{
"script_fields": {
"script1": {
"script": "_fields['_timestamp']"
}
}
}
Ich brauche dieses Zeitstempel-Feld zu extrahieren, und speichern Sie es im Index. Es ist einfach genug, ein Skript zu schreiben, um irgendein anderes Feld zu kopieren, z. (Ich bin mit dem Update API)
ctx._source.t1=ctx._source.message
Aber wie kann ich den Wert aus der script_fields Ausgabe ein anderes Feld im Index zu aktualisieren? Ich möchte, dass das Feld 'tcopy' den Wert des Zeitstempels für jedes Dokument erhält.
Weiter habe ich versucht, Java zu verwenden, um die Werte wie folgt zu erhalten, aber es gab null zurück.
SearchResponse response = client.prepareSearch("twitter")
.setQuery(QueryBuilders.matchAllQuery())
.addScriptField("test", "doc['_timestamp'].value")
.execute().actionGet();
Die Abbildung
{
"mappings": {
"tweet": {
"_timestamp": {
"enabled": true,
"doc_values" : true
},
"properties": {
"message": {
"type": "string"
},
"user": {
"type": "string"
},
"tcopy": {
"type": "long"
}
}
}
}
}
In Ihrem Skript Feld zu aktualisieren, können Sie nicht auf den '' _timestamp' mit _fields._timestamp' seit Es wird nicht gespeichert, sondern stattdessen 'doc._timestamp.value'. – Val
Ein Skript aktualisiert erlaubt jedoch nicht die Verwendung von 'doc._timestamp.value'. – Val