Da es ein Ersatz für ein Memo ist, wird die Erklärung des Hintergrunds usw. schlampig sein.
Berechnen Sie bei der Suche mit Elasticsearch 5.1.1 den Abstand zwischen dem Feld "geo_point" und dem in der Abfrage angegebenen Punkt und geben Sie ihn zurück. Ich wusste, wie man es in 2 Serien & Groovy macht, aber ich muss es reparieren, weil es 5 Serien & Schmerzlos wurde
Groovy ist seit Elasticsearch 5.0.0 veraltet und eine neu entwickelte Sprache namens Painless ist zum Standard geworden. Sie müssen es also zuerst in schmerzlos ändern. Da die verschiedenen Hilfsmethoden, die in 2.0 verwendet werden können, abgeschafft wurden, ist es auch erforderlich, eine alternative Verarbeitung zu schreiben.
Da ich es mit einem Python-Client verwendet habe, ist das Beispiel ein Diktat-Typ von Python, aber ich denke, dass der Inhalt von Inline üblich ist. Verwenden Sie es daher wie bei der REST-API oder beim Zugriff von einem Client einer anderen Sprache, hauptsächlich Inline Ich habe das Gefühl, dass ich nur den Inhalt von Params betrachten sollte.
location_field
ist ein Feld vom Typ geo_distance
, und width_value
und longitude_value
sind Variablen, die Breiten- und Längengrade enthalten.
Before
{
"distance": {
"script": {
"lang": "painless",
"inline": "doc[\"location_field\"].distanceInKm(lat, lon)",
"params": {
"lat": latitude_value
"lon": longitude_value
}
},
}
}
After
{
"distance": {
"script": {
"lang": "painless",
"inline": "doc[\"location_field\"].arcDistance(params.lat, params.lon) * 0.001",
"params": {
"lat": latitude_value,
"lon": longitude_value
}
},
}
}
Da distanceInKm
veraltet ist, verwenden wir arcDistance
.
In diesem Fall ist die Einheit jedoch Reis, sodass sie durch Multiplikation mit 0,001 in km umgerechnet wird.
Ein weiterer Punkt ist, dass die in params
definierten Variablen mit den zuvor definierten Namen verwendet werden könnten, aber aus irgendeinem Grund in der 5. Reihe (in schmerzlos?) War es notwendig, am Anfang params.
hinzuzufügen.
Ich habe Groovy überhaupt nicht verwendet, aber die grundlegende Grammatik ist fast dieselbe, und ich glaube nicht, dass ich viel komplizierte Dinge tun werde. Wenn Sie also das Dokument lesen, ist es ganz so. Ich dachte jedoch, es wäre ziemlich schwierig, die abgeschaffte Hilfsmethode für 5 Serien neu zu schreiben ... (Ich kann den Verarbeitungsinhalt der Hilfsmethode nicht verstehen, selbst wenn ich das Elasticsearch-Dokument lese und welche Hilfsmethode schmerzlos ist Ich weiß nicht, ob es verwendet werden kann.
In der Dokumentation wird auch das Debuggen beschrieben, aber ich habe es nicht getan, da das Lesen nur eine Verarbeitungszeile mühsam zu lesen ist (** Daher dauert es fast eine Stunde, um diese eine Inline-Zeile zu reparieren). Es dauerte**)
Es ist zu einem klagenden Eintrag geworden, aber es ist sehr wahrscheinlich, dass ich schlecht bin, wenn ich das Dokument richtig lese, also werde ich es wieder lesen, wenn ich um Mitternacht die Spannung los bin