Puisqu'il s'agit d'un substitut à un mémo, l'explication telle que l'arrière-plan sera bâclée.
Lors d'une recherche avec Elasticsearch 5.1.1, veuillez calculer et renvoyer la distance entre le champ de type geo_point
et le point spécifié dans la requête. Je savais comment le faire en 2 séries et Groovy, mais je dois le réparer car il est devenu 5 séries et indolore
Groovy est obsolète depuis Elasticsearch 5.0.0 et un langage nouvellement développé appelé indolore est devenu le langage par défaut. Vous devez donc d'abord le changer en indolore. De plus, étant donné que les différentes méthodes d'assistance qui peuvent être utilisées dans la version 2.0 ont été supprimées, il est nécessaire d'écrire des traitements alternatifs.
Depuis que je l'ai utilisé avec un client python, l'exemple est un type dict de Python, mais je pense que le contenu de inline est commun, alors utilisez-le tel quel avec l'API REST ou lors de l'accès depuis un client d'une autre langue, principalement en ligne Je pense que je ne devrais regarder que le contenu des paramètres.
location_field
est un champ de type geo_distance
, et latitude_value
et longitude_value
sont des variables qui contiennent respectivement des valeurs de latitude et de longitude.
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
}
},
}
}
Puisque distanceInKm
est obsolète, utilisez ʻarcDistance`.
Cependant, dans ce cas, l'unité est le riz, elle est donc convertie en km en multipliant par 0,001.
Un autre point est que les variables définies dans params
pourraient être utilisées avec les noms définis auparavant, mais pour une raison quelconque dans la 5ème série (en indolore?), Il était nécessaire d'ajouter params
au début.
Je n'ai pas utilisé Groovy en premier lieu, mais la grammaire de base est presque la même, et je ne pense pas que je ferai des choses très compliquées, donc si vous lisez le document, c'est tout à fait le cas. Cependant, j'ai pensé qu'il serait plutôt difficile de réécrire la méthode d'assistance abolie pour les séries 5 ... (je ne peux pas comprendre le contenu de traitement de la méthode d'assistance même si je lis le document Elasticsearch, et quelle méthode d'assistance est indolore Je ne sais pas si ça peut être utilisé)
La documentation décrit également comment déboguer, mais je ne l'ai pas fait car c'est un problème à lire pour écrire une seule ligne de traitement (** En conséquence, il faut presque une heure pour corriger cette ligne en ligne). Ça a pris**)
C'est devenu une entrée plaintive, mais il est fort possible que je sois mauvais rien qu'en lisant correctement le document, donc je le relirai quand je me débarrasserai de la tension à minuit