ElasticSearch, FOSElasticaBundle, Symfony2 et geo_point / geo_distance

507 views
Skip to first unread message

Romain Amardeil

unread,
Mar 12, 2014, 10:21:22 AM3/12/14
to elastics...@googlegroups.com
Bonjour,

Je m'arrache les cheveux car je n'arrive pas à configurer correctement mon index ElasticSearch pour faire des recherches Geo_Distance (je suis sous Symfony2 avec le bundle FOSElasticaBundle). Je souhaiterais faire de la recherche de restaurants sur les lat/lng de celui-ci. J'ai 0 retours alors qu'en base j'ai bien des restos dans le rayon de 100km autour de cette lat,lng...

Voici mon config.yml :

fos_elastica:
    clients:
        default: { host: localhost, port: 9200 }
    serializer:
        callback_class: FOS\ElasticaBundle\Serializer\Callback
        serializer: serializer
    indexes:
        restaurants:
            types:
                topchef:
                    mappings:
                        title: { boost: 3 }          
                        description: { boost: 2 }
                        address: ~
                        postal: ~
                        city: ~ 
                        cityLocation: { type: geo_point }
                    persistence:
                        driver: orm 
                        model: Romain\RestaurantBundle\Entity\Topchef
                        provider: ~
                        finder: ~

Dans mon entité Topchef, j'ai créé un getCityLocation pour retourner un string "lat,lng" :

public function getCityLocation()
{
    return  $this->locationLat .",".$this->locationLng;
}

Mon indexage se passe bien mais lorsque je request elastica je n'obtient aucun résultat. J'ai beau tout essayé rien ne sort.

curl -XGET 'http://localhost:9200/restaurants/topchef/_search' -d '{
{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "geo_distance": {
          "distance": "100km",
          "topchef.cityLocation": " 48.8578,2.3479"
        }
      }
    }
  }
}
}

Résultats :

{
  • took: 1
  • timed_out: false
  • _shards: {
    • total: 5
    • successful: 5
    • failed: 0
    }
  • hits: {
    • total: 0
    • max_score: null
    • hits: [ ]
    }
}

J'ai beau essayer de retourner des tableaux et d'essayer via un tableau rien ne vient. Savez-vous ce que je fais de faux ?

Merci d'avance

Romain

Romain Amardeil

unread,
Mar 12, 2014, 3:50:46 PM3/12/14
to elastics...@googlegroups.com
Bon j'ai avancé sur mon souci. J'ai crée un champs latlng contenant la string que je veux et ça fonctionne bien. Ca veut dire que ma fonction getCityLocation n'est pas du tout appelé lors du populate de l'index. Du coup vu que j'ai pas d'erreur, cela ne le dérange pas d'avoir des entités à populer sans savoir comment récupérer les valeurs... Bizarre non ?

Christophe Boucaut

unread,
Mar 13, 2014, 4:13:00 AM3/13/14
to elastics...@googlegroups.com
Si le soucis est côté elasticsearch, la seule raison doit-être qu'aucun enregistrement ne correspond à cette recherche car niveau syntaxe pour ta recherche tout est bon normalement.

Après j'utilise pas Symfony donc impossible de te dire s'il y a un soucis à ce niveau là.

Tu as vérifier que le mapping a été correctement fait ?


Le mercredi 12 mars 2014 15:21:22 UTC+1, Romain Amardeil a écrit :

Romain Amardeil

unread,
Mar 16, 2014, 5:55:07 AM3/16/14
to elastics...@googlegroups.com
Tu as raison, J'ai trouvé c'était un souci de remplissage de l'index qui pour cette propriété était vide !!!

MERCI

ThomasB

unread,
Apr 6, 2015, 12:26:43 PM4/6/15
to elastics...@googlegroups.com
Salut Romain.

Tu pourrais me dire comment tu as réussi à faire en sorte que ta valeur ne soit plus vide dans Elasticsearch?
Il semblerait que j'ai le même problème que tu as eu...

Romain Amardeil

unread,
Apr 6, 2015, 12:34:17 PM4/6/15
to elastics...@googlegroups.com

J'avais un souci avec le propriété Citrylocation qui se traduit comme ça dans mon entity

/**
     * Get citytoLocation
     * 
     * @VirtualProperty
     * @SerializedName("citytoLocation")
     *
     */
    public function getCityLocation()
    {
        return $this->citytoLat . ',' . $this->citytoLng;
    }

ça marche plutôt bien maintenant !
--
Romain Amardeil
--
--
---
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é à 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/BTNM3J0F-4E/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.
Cette discussion peut être lue sur le Web à l'adresse https://groups.google.com/d/msgid/elasticsearch-fr/9ec1e1e8-db33-406e-8533-8c31011419a7%40googlegroups.com.
Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.

Thomas Brunel

unread,
Apr 6, 2015, 2:57:44 PM4/6/15
to elastics...@googlegroups.com
Merci pour ta reactivité :)

Ton config.yml a changer depuis?

Je viens d'essayer ta solution mais ma valeur est toujours vide.. il doit me manquer quelque chose :(


Romain Amardeil

unread,
Apr 7, 2015, 2:34:37 AM4/7/15
to elastics...@googlegroups.com
Salut,

Non il n'a pas changé. J'ai tout laissé par défaut.

--
Romain Amardeil

--
--
---
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é à 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/BTNM3J0F-4E/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.
Reply all
Reply to author
Forward
0 new messages