Ordonner les résultats par rapport à une distance et un nombre de term équivalent.

17 views
Skip to first unread message

Mourad Kashi

unread,
May 21, 2013, 9:50:58 AM5/21/13
to elastics...@googlegroups.com
Bonjour  ! 

Je suis à la recherche d'une méthode sous elasticsearch permettant de pondéré les résultats obtenu , en particulier par rapport a la distance (GeoDistanceFilter ) , et un query sur un champ.

Voici le mapping de mon index

{"users":{"user":{"analyzer":"francais","_boost":{"null_value":1.0},"properties":{"birth_date":{"type":"date","format":"dateOptionalTime","include_in_all":true},"city":{"properties":{"city_name":{"type":"string","include_in_all":true},"city_zip":{"type":"integer","include_in_all":false},"id":{"type":"integer","include_in_all":false},"location":{"type":"geo_point"}}},"id":{"type":"integer","include_in_all":false}"sports":{"properties":{"id":{"type":"integer","include_in_all":false},"name":{"type":"string","include_in_all":true},"sport_name":{"type":"string"}}}}}}}

Pour cela j'ai besoin de faire la distance avec le champ location (type:geo_point ) , ainsi qu'en fonction du nombre de match dans l'objet Sports(sport_name plus exactememnt) . Je voudrais par exemple faire une recherche en procédant par pondération en supposant que je veux que si j'ai 3 sports en commun et que la distance est de 10km , il sera plus proche des résultats que si j'ai 2 sport en commun et 10km , mais aussi , je voudrai que si il se trouve a 100km et a 5 sports en commun , soit derrière celui qui est a 10km et a seulement 1 sport en commun...

Sur quel type de query dois je m'engager ? les boost permettent-il de réaliser ceci ? (avec pour exemple boost 1 par sport , et 2 par 10 aine de km ..)  ? Avez vous une suggestions ? 

JE vous remercie d'avance :p !




Mourad Kashi

unread,
May 21, 2013, 11:05:06 AM5/21/13
to elastics...@googlegroups.com
Après quelques recherches effectués , 
je suis tombé sur les "BoolQuery" en tant que should , ceci permetterait-il d'avoir les informations nécessaires ? sachant que la boost value serait par "match" ou sur la totalité ? ( Est ce que les - pistes ci dessus sont-elles viables ? )
Merci d'avance :p


ici le should : 
 "should" : [
            {
                "term" : { "tag" : "wow" }
            },
            {
                "term" : { "tag" : "elasticsearch" }
            }
        ],
        "minimum_number_should_match" : 1,
        "boost" : 1.0
Ajouté à ça ou au lieu de  , faire un custom filter query ? avec selon le range mettre un boost different ?(cf ci dessous ..)
"filters" : [
            {
                "filter" : { "range" : { "age" : {"from" : 0, "to" : 10} } },
                "boost" : "3"
            },
            {
                "filter" : { "range" : { "age" : {"from" : 10, "to" : 20} } },
                "boost" : "2"
            }
        ],
        "score_mode" : "first"

Mourad Kashi

unread,
May 21, 2013, 11:58:58 AM5/21/13
to elastics...@googlegroups.com


Le mardi 21 mai 2013 15:50:58 UTC+2, Mourad Kashi a écrit :
Bonjour  ! 

Je suis à la recherche d'une méthode sous elasticsearch permettant de pondéré les résultats obtenu , en particulier par rapport a la distance (GeoDistanceFilter ) , et un query sur un champ.

Voici le mapping de mon index

{"users":{"user":{"analyzer":"francais","_boost":{"null_value":1.0},"properties":{"birth_date":{"type":"date","format":"dateOptionalTime","include_in_all":true},"city":{"properties":{"city_name":{"type":"string","include_in_all":true},"city_zip":{"type":"integer","include_in_all":false},"id":{"type":"integer","include_in_all":false},"location":{"type":"geo_point"}}},"id":{"type":"integer","include_in_all":false}"sports":{"properties":{"id":{"type":"integer","include_in_all":false},"name":{"type":"string","include_in_all":true},"sport_name":{"type":"string"}}}}}}}

(A savoir sports est de type ="object" ); 

Mourad Kashi

unread,
May 22, 2013, 4:05:57 AM5/22/13
to elastics...@googlegroups.com
UP ! :x
Reply all
Reply to author
Forward
0 new messages