Impossible d'effectuer une requête en fonction d'une variable dans mon flux


#1

Bonjour,

Je possède un problème que je n'arrive pas à résoudre sur ElasticSearch.
Je vais essayer d'être le plus précis possible, j'ai accès à un flux JSON via une URL Elastic. J'effectue des requêtes à cette URL et j'y récupère le résultat de mes requêtes pour mon traitement.
Cependant il y a deux objets dans le flux JSON où je n'arrive pas à avoir accès avec mes requêtes et je ne comprends pas pourquoi.

Voici le flux en question ainsi qu'un exemple de requête (je peux avoir cette trame x100000) :

{
_source: {
    city: "Paris",
    end: {
         lat: 48.878826,
         lon: 2.337034
    },
    turnType: "NONE",
    level: 2,
    ts_signal: "2018-02-08T17:56:26.046000+01:00",
    country: "FR",
    roadType: 1,
    delay: 70,
    start: {
        lat: 48.87972,
        lon: 2.332822
    },
    length: 324,
    street: "Rue la Bruyère",
    timestamp: "2018-02-08T17:04:27.070279+00:00",
    endNode: "Rue Notre-Dame de Lorette",
    speed: 2.175,
    id: 1107369744,
    pubMillis: 1518108986046,
    uuid: 1107369744
}
}
....

Voici un exemple de requête que je peux effectuer, par exemple pour obtenir les informations que je veux en fonction de la date :

/_search?q=timestamp: ["2018-02-08T17:04:00" TO "2018-02-08T17:06:00"]

Ce qui m'intéresse ce sont les informations contenues dans Start et Stop, donc lat/lon.
J'ai donc essayé divers requêtes pour parvenir à trier en fonction de la valeur lat et lon du stop avec:

/_search?q=lat: ["48" TO "49"]

Cependant impossible d'accéder à ces valeurs pour moi.
Si je n'est pas été assez précis et/ou que vous avez besoin de plus d'informations faites le moi savoir je suis disponible

Cordialement,


(David Pilato) #2

Quel est le mapping?

Peux-tu partager un script complet qu'on puisse rejouer facilement le cas?


#3

Le mapping est celui que jai donné, il contient un grand nombre d'objet comme celui donné à la création du poste, après je l'est aussi en C# le mapping mais je ne pense pas que ca puisse aider.
Malheureusement non je ne possède pas de script je n'est pas créer ce serveur Elastic je ne fait que des requêtes à son URL pour y récupérer des données.


(David Pilato) #4

Le mapping est celui que jai donné

Où ça ?

Malheureusement non je ne possède pas de script

Démarre une instance locale, et créé un script depuis la console Dev dans Kibana.
Puis partage ce script ici. Un exemple de script utile car exécutable par n'importe qui : About the Elasticsearch category.


#5

Je ne suis pas sûr de vraiment saisir les demandes :zipper_mouth_face:

Ce que je veux c'est via une requête envoyé par URL (Lucene), récupérer des informations et donc j'ai accès à toute ces variables, street, delay, uuid etc...
Je peux y avoir accès facilement juste en écrivant ma requête comme ceci :

_search?q=delay: 105

Cela me renverra tout les objets où le délai est à 105, cependant je ne peux pas utiliser les variables dans end et start dans mes requêtes.

Je pense cependant que end et start sont pris en compte et qu'il doit y avoir un moyen, car si je fais :

_search?q=end: *

Il me renvoie bien tout, n'y a t'il pas un moyen par exemple comme ceci:

_search?q=end.lat: * AND end.lon: *

Afin d'utiliser ces variables dans mes requêtes


(David Pilato) #6

Ca dépend du mapping.

Pour que je vérifie, il faut un script qui reproduit le problème et que je peux modifier pour fixer ton problème.

Si c'est un geo_point, il faut que tu fasses des geo_distance query ou de geo bounding box. Mais ce n'est pas faisable dans l'URL. Il vaut mieux utiliser de toute façon le query DSL.


#7

Très bien je vais peut être me pencher plus en détail sur le query DSL.
J'avais essaye je recevais bien les réponses de mes requêtes mais uniquement la valeur "count" j'avais le nombre attendu de réponse, mais toute les informations qui me sont essentiels (le DeserializeObject) n'étais pas accessible tout était en private j'avais donc décidé de rester en URL.

Merci beaucoup


(David Pilato) #8

Merci beaucoup

De rien.

Mais désolé d'être lourd et d'insister. Si tu as besoin d'aide à l'avenir, donne un script tel que celui qui est documenté ici: About the Elasticsearch category

DELETE index
PUT index/doc/1
{
  "foo": "bar"
}
GET index/_search
{
  "query": {
    "match": {
      "foo": "bar"
    }
  }
}

Ceci est un script qui permet de reproduire des choses ^^^

Un autre exemple plus complexe:

Avec ce genre de script (qui nécessite un effort de ton côté, certes), tu maximises tes chances d'avoir:

  • Une réponse
  • Une réponse rapide

(system) #9

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.