Problème avec le champs geo_point

32 views
Skip to first unread message

Thierry L

unread,
Apr 17, 2015, 12:06:11 PM4/17/15
to elastics...@googlegroups.com
Hello @all,

J'ai posté le même sujet en anglais, je tente aussi ma change sur le canal FR de mes compatriotes !

J'ai une blinde de données indexées sous le format geo_point dans elasticsearch.

Tout fonctionne très bien si je fais une requête de géolocalisation genre :
{
    "query": {
        "filtered": {
            "query": {
                "match_all": {}
            },
            "filter": {
                "geo_distance": {
                    "distance": "5km",
                    "iplocation.location": {
                        "lat": 48.8761638,
                        "lon": 2.3345515
                    }
                }
            }
        }
    }
}

Par contre, j'ai besoin, pour tracer des markers sur une carte, d'exporter uniquement les coordonnées géographiques (Exporter l'integralité des documents serait trop lourd).

J'ai tenté deux méthodes; La méthode fields ne me sort jamais le champs en question :
{
    "query": {
        "bool": {
            "must": {
                "range": {
                    "urls.date": {
                        "gte": "now-1h"
                    }
                }
            }
        }
    },
    "fields": [
        "iplocation.location"
    ],
    "sort": [
        {
            "date": {
                "order": "desc"
            }
        }
    ],
    "size": 100
}

Ce qui me donne des documents du type :
{
"_index" : "monindex",
"_type" : "montype",
"_id" : "AUt9PkvGDgH0n4KFZQ2Q",
"_score" : null,
"sort" : [
1429286509566
]
},

Donc, pas de champs location.

J'ai alors tenté le script_fields, ce qui marche un peu mieux mais retourne des données partielles, car plusieurs shards retournent une erreur.
La query :
{
    "query": {
        "bool": {
            "must": {
                "range": {
                    "urls.date": {
                        "gte": "now-1h"
                    }
                }
            }
        }
    },
    "script_fields": {
        "geo": {
            "script": "doc['iplocation.location'].value"
        }
    },
    "sort": [
        {
            "date": {
                "order": "desc"
            }
        }
    ],
    "size": 10000
}

L'erreur sur 3 shards (sur 5) :
RemoteTransportException[[MonServeur][inet[/blah:9300]][indices:data/read/search[phase/fetch/id]]]; nested: IOException[Can't write type [class org.elasticsearch.common.geo.GeoPoint]];

Du coup, je n'arrive jamais a récupérer la totalité de mes données.

Si quelqu'un a une idée, je suis preneur !

Merci !

Thierry

David Pilato

unread,
Apr 17, 2015, 12:28:06 PM4/17/15
to elastics...@googlegroups.com
Et en essayant de récupérer: 
iplocation.location.lat
iplocation.location.lon

?

-- 
David Pilato - Developer | Evangelist 





--
--
---
Vous pouvez également poster et consulter les réponses en anglais sur le groupe Elasticsearch https://groups.google.com/group/elasticsearch
 
Si vous avez également posté votre question sur la mailing list elasti...@googlegroups.com, merci d'indiquer ici le lien vers cette discussion pour faciliter le suivi.
 
Twitter : @ElasticsearchFR https://twitter.com/#!/ElasticsearchFR
Site web (English) : http://www.elasticsearch.org/
---
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "Elasticsearch FR".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse elasticsearch-...@googlegroups.com.
Pour envoyer un message à ce groupe, envoyez un e-mail à l'adresse elastics...@googlegroups.com.
Visitez ce groupe à l'adresse http://groups.google.com/group/elasticsearch-fr.
Cette discussion peut être lue sur le Web à l'adresse https://groups.google.com/d/msgid/elasticsearch-fr/c2a44cd4-6c09-4f41-a94c-8dda046cb104%40googlegroups.com.
Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.

David Pilato

unread,
Apr 17, 2015, 12:29:11 PM4/17/15
to elastics...@googlegroups.com
J’ai oublié. Tu as mis à store: true dans ton mapping pour le champ iplocation.location?

Quel format a t’il en entrée d’ailleurs ?

Thierry LEFORESTIER

unread,
Apr 18, 2015, 3:12:37 AM4/18/15
to elastics...@googlegroups.com
Ne fonctionne pas non plus. Le type geo_point semble créer des entrées lat_lon virtuelles.

Pour le moment, la solution pour laquelle j'opte est de créer un champs display_geo dans lequel je stocke lat & lon au format float.


Thierry @ Gmail

Vous recevez ce message, car vous êtes abonné à un sujet dans le groupe Google Groupes "Elasticsearch FR".
Pour vous désabonner de ce sujet, visitez le site https://groups.google.com/d/topic/elasticsearch-fr/jN8IFmZ-UdM/unsubscribe.
Pour vous désabonner de ce groupe et de tous ses sujets, envoyez un e-mail à l'adresse elasticsearch-...@googlegroups.com.

Pour envoyer un message à ce groupe, envoyez un e-mail à l'adresse elastics...@googlegroups.com.
Visitez ce groupe à l'adresse http://groups.google.com/group/elasticsearch-fr.

David Pilato

unread,
Apr 18, 2015, 3:17:08 AM4/18/15
to elastics...@googlegroups.com
Ouais. Tu peux peut être aussi faire la même chose en utilisant du multi field.
Mais ça dépend de ton format d'entrée je pense.

As tu un exemple ?

David

Thierry LEFORESTIER

unread,
Apr 18, 2015, 5:59:12 AM4/18/15
to elastics...@googlegroups.com
A priori le multi-field a été supprimé :

Pour le moment la solution que j'ai utilisée ci-dessous fonctionne, c'est moche parce que ça rentre deux fois la même info dans le document, mais je ne suis pas un puriste !

Thierry @ Gmail

David Pilato

unread,
Apr 18, 2015, 6:34:14 AM4/18/15
to elastics...@googlegroups.com
Non pas supprimé mais simplifié.

Au lieu d'avoir un type multifield tu peux créer des fields dans un champ donné.


--
David ;-)
Twitter : @dadoonet / @elasticsearchfr / @scrutmydocs
Reply all
Reply to author
Forward
0 new messages