[PYTHON] Écrivez un script pour calculer la distance avec le système Elasticsearch 5 sans douleur

Puisqu'il s'agit d'un substitut à un mémo, l'explication telle que l'arrière-plan sera bâclée.

Chose que tu veux faire

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

Pourquoi?

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.

Corrections

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
            }
        },
    }
}

la différence

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.

Impressions

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

Recommended Posts

Écrivez un script pour calculer la distance avec le système Elasticsearch 5 sans douleur
Ecrire un programme python pour trouver la distance d'édition [python] [distance Levenshtein]
Ecrire un script batch avec Python3.5 ~
Créez un système stellaire avec le script Blender 2.80
Créer un script shell pour écrire un journal
Réfléchissez à la façon d'écrire un filtre avec les versions Shotgun API-Contact
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
Comment calculer la volatilité d'une marque
Enregistrer l'objet dans un fichier avec pickle
Ecrire un script pour convertir un vidage MySQL en TSV
Je veux écrire dans un fichier avec Python
Écrivons un script de confirmation ping de manière appropriée
N'hésitez pas à rédiger un test avec nez (dans le cas de + gevent)
Calculez la solution optimale pour établir un record du monde pour dix types de compétition avec scipy.optimize
Comment écrire une interface graphique à l'aide de la commande maya
Comment créer un sous-menu avec le plug-in [Blender]
Étapes pour calculer la probabilité d'une distribution normale
[Python] Un mémo pour écrire du CSV verticalement avec Pandas
Transition vers l'écran de mise à jour avec le Django a tag
Calculer le produit des matrices avec une expression de caractère?
Un script qui facilite la création de menus riches avec l'API de messagerie LINE
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
J'ai remplacé le livre de recettes Windows PowerShell par un script python.
[Linux] Copie des données de Linux vers Windows avec un script shell
Trouver une solution au problème N-Queen avec un algorithme génétique (2)
Probablement le moyen le plus simple de créer un pdf avec Python 3
Écrivez un programme pour résoudre le Rubik Cube 4x4x4! 1. Vue d'ensemble
La première étape de la création d'une application sans serveur avec Zappa
Traitez les fichiers du dossier dans l'ordre avec le script shell
Je n'oublierai jamais comment écrire un script shell, n'oubliez pas! !!
Une histoire sur la façon de traiter le problème CORS
La façon habituelle d'ajouter un noyau avec Jupyter Notebook
[Linux] Ecrire un outil de déploiement à l'aide de rsync avec un script shell
Trouver une solution au problème N-Queen avec un algorithme génétique (1)
Écrire en csv avec Python
Écrivez un script dans Shell et Python pour vous avertir dans Slack lorsque le processus est terminé
Écrire la mesure du temps de traitement un peu plus facilement en utilisant la clause with
Traitez le contenu du fichier dans l'ordre avec un script shell
[Blender] Script pour vérifier si celui sélectionné est un mesh
Écrivez un programme pour résoudre le Rubik Cube 4x4x4! 2. Algorithme
Écrivez un programme pour résoudre le Rubik Cube 4x4x4! 3. Mise en œuvre
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
Branche conditionnelle en raison de l'existence d'un fichier de script shell
Créez un script shell pour exécuter le fichier python plusieurs fois
Comment faire une commande pour lire le fichier de paramètres avec pyramide
J'ai écrit un script pour vous aider à démarrer avec AtCoder à grande vitesse!
Je souhaite rechercher le texte intégral avec elasticsearch + python
Je veux créer un système pour éviter d'oublier de serrer la clé 1
Ecrire un programme qui abuse du programme et envoie 100 e-mails
Je voulais résoudre le problème ABC164 A ~ D avec Python
Un script qui renvoie 0, 1 attaché au premier Python prime
Comment écrire une docstring pour créer un document tuple nommé avec sphinx
Essayez d'utiliser Elasticsearch comme base de votre système de questions et réponses
[AWS / Tello] Construction d'un système d'exploitation de drones sur le cloud
Comment envoyer une requête à l'API DMM (FANZA) avec python
Créer une API REST pour faire fonctionner dynamodb avec le Framework Django REST
Comment calculer le coefficient d'autocorrélation