Comprendre la raison d'un résultat avec EXPLAIN (addok)

Bonjour,

j’essaye de comprendre un problème que j’ai dans la cohérence du résultat d’une recherche.
Avec une instance d’Addok en version 0.5, je retrouve la bonne adresse avec cette recherche :

SEARCH 37 RUE DE CROIX 02230 FRESNOY LE GRAND
37 RUE DE CROIX 02230 FRESNOY LE GRAND (Q1RQNzg3U1RQMzI4Mjk= | 1.08181817965074)

Avec la version 1, je ne la retrouve pas :

SEARCH 37 RUE DE CROIX 02230 FRESNOY LE GRAND
RUE DE FRESNOY 02110 CROIX FONSOMME (U1RSRUVUOjMxNDA3 | 0.4829545454545454)

Je constate que si je retire le code postal, je trouve la bonne adresse :

SEARCH 37 RUE DE CROIX FRESNOY LE GRAND
37 RUE DE CROIX 02230 FRESNOY LE GRAND (U1RSRUVUOjMzMzI2 | 0.7764127764127763)

Les évolutions d’Addok m’ont amené à deux configurations différentes.

v0.5 :
PROCESSORS_PYPATHS = [
‹ addok.textutils.default.pipeline.tokenize ›,
‹ addok.textutils.default.pipeline.normalize ›,
‹ addok.textutils.default.pipeline.synonymize ›,
‹ addok.textutils.fr.phonemicize ›,
‹ addok_france.extract_address ›,
‹ addok_france.clean_query ›,
‹ addok_fr.phonemicize ›,
]
QUERY_PROCESSORS_PYPATHS = (
‹ addok.textutils.fr_FR.extract_address ›,
‹ addok.textutils.fr_FR.clean_query ›,
‹ addok.textutils.fr_FR.glue_ordinal ›,
‹ addok_france.glue_ordinal ›,
‹ addok_france.fold_ordinal ›,
‹ addok_france.flag_housenumber ›,
)
SEARCH_RESULT_PROCESSORS_PYPATHS = [
‹ addok_france.match_housenumber ›,
‹ addok_france.make_labels ›
]

v1 :

PROCESSORS_PYPATHS = [
« addok.helpers.text.tokenize »,
« addok.helpers.text.normalize »,
« addok_france.glue_ordinal »,
« addok_france.fold_ordinal »,
« addok_france.flag_housenumber »,
« addok.helpers.text.synonymize »,
« addok_fr.phonemicize »,
]
QUERY_PROCESSORS_PYPATHS = [
« addok_france.extract_address »,
« addok_france.clean_query »,
« addok_france.remove_leading_zeros »,
« addok_france.glue_ordinal »,
« addok_france.fold_ordinal »,
]
SEARCH_RESULT_PROCESSORS_PYPATHS = [
« addok_france.match_housenumber »,
« addok_france.make_labels »,
« addok.helpers.results.score_by_importance »,
« addok.helpers.results.score_by_autocomplete_distance »,
« addok.helpers.results.score_by_ngram_distance »,
« addok.helpers.results.score_by_geo_distance »,
]

En essayant un EXPLAIN, je n’arrive pas à interpréter le résultat. L’index correspondant au code postal est bien trouvé.

En v0.5 :

EXPLAIN 37 RUE DE CROIX 02230 FRESNOY LE GRAND
[8.764] Taken tokens: [, <Token 02230>]
[8.815] Common tokens: [, <Token 37>, , , , ]
[8.833] Not found tokens: []
[8.848] Filters: []
[8.874] ** STEP_ONLY_COMMONS **
[8.893] ** STEP_NO_MEANINGFUL_BUT_COMMON_TRY_AUTOCOMPLETE **
[8.910] ** STEP_BUCKET_WITH_MEANINGFUL **
[8.938] New bucket with keys [‹ w|frenoi ›, ‹ w|02230 ›] and limit 10
[9.426] 10 ids in bucket so far
[9.468] New bucket with keys [‹ w|frenoi ›, ‹ w|02230 ›] and limit 0
[9.897] 70 ids in bucket so far
[9.932] ** STEP_REDUCE_WITH_OTHER_COMMONS **
[9.971] ** STEP_ENSURE_GEOHASH_RESULTS_ARE_INCLUDED_IF_CENTER_IS_GIVEN **
[9.994] ** STEP_AUTOCOMPLETE **
[10.01] Autocompleting gran
[10.18] Found tokens to autocomplete set()
[10.22] ** STEP_CHECK_BUCKET_FULL **
[10.24] Computing results
[63.32] Done computing results
37 RUE DE CROIX 02230 FRESNOY LE GRAND (Q1RQNzg3U1RQMzI4Mjk= | str_distance: 1.0/1.0, importance: 0.19/0.1)
RUE DE PERONNE 02230 FRESNOY LE GRAND (Q1RQNzg3U1RQMzI4MjM= | str_distance: 0.6591/1.0, importance: 0.19/0.1)
RUE DE GUISE 02230 FRESNOY LE GRAND (Q1RQNzg3U1RQMzI4MjE= | str_distance: 0.6512/1.0, importance: 0.19/0.1)
37 RUE LEVAUFRE 02230 FRESNOY LE GRAND (Q1RQNzg3U1RQMzI4MjY= | str_distance: 0.6444/1.0, importance: 0.19/0.1)
RUE DE VERDUN 02230 FRESNOY LE GRAND (Q1RQNzg3U1RQMzI4MzQ= | str_distance: 0.6364/1.0, importance: 0.19/0.1)
RUE DE L ASILE 02230 FRESNOY LE GRAND (Q1RQNzg3U1RQMzI4MjU= | str_distance: 0.6222/1.0, importance: 0.19/0.1)
RUE DE LA COMEDIE 02230 FRESNOY LE GRAND (Q1RQNzg3U1RQMzI4MzU= | str_distance: 0.617/1.0, importance: 0.19/0.1)
RUE DU SAULE 02230 FRESNOY LE GRAND (Q1RQNzg3U1RQMzI4MjA= | str_distance: 0.6136/1.0, importance: 0.19/0.1)
37 RUE VENET MENU 02230 FRESNOY LE GRAND (Q1RQNzg3U1RQMzI4MDc= | str_distance: 0.5833/1.0, importance: 0.19/0.1)
RUE DE LA REPUBLIQUE 02230 FRESNOY LE GRAND (Q1RQNzg3U1RQMzI4MTM= | str_distance: 0.58/1.0, importance: 0.19/0.1)
64.6 ms / 10 results

en v1 :

EXPLAIN 37 RUE DE CROIX 02230 FRESNOY LE GRAND
[8.714] Taken tokens: [<Token 2230>, ]
[8.735] Common tokens: [, <Token 37>, , , , ]
[8.741] Not found tokens: []
[8.748] Filters: []
[8.757] ** ONLY_COMMONS_BUT_GEOHASH_TRY_AUTOCOMPLETE_COLLECTOR **
[8.765] ** ONLY_COMMONS **
[8.772] ** NO_MEANINGFUL_BUT_COMMON_TRY_AUTOCOMPLETE_COLLECTOR **
[8.777] ** ONLY_COMMONS_TRY_AUTOCOMPLETE_COLLECTOR **
[8.782] ** BUCKET_WITH_MEANINGFUL **
[8.796] New bucket with keys [‹ w|2230 ›, ‹ w|frenoi ›] and limit 10
[9.347] 0 ids in bucket so far
[9.363] ** REDUCE_WITH_OTHER_COMMONS **
[9.384] ** ENSURE_GEOHASH_RESULTS_ARE_INCLUDED_IF_CENTER_IS_GIVEN **
[9.393] ** FUZZY_COLLECTOR **
[9.416] Fuzzy on. Trying with [<Token 2230>, ].
[9.439] Going fuzzy with frenoi
[12.27] Found fuzzy candidates []
[12.30] Fuzzy on. Trying with [, <Token 2230>].
[12.31] Going fuzzy with frenoi
[14.93] Found fuzzy candidates []
[14.95] ** AUTOCOMPLETE_MEANINGFUL_COLLECTOR **
[14.96] Autocompleting gran
[15.27] Found tokens to autocomplete {b’grand’}
[15.29] Trying to extend bucket. Autocomplete w|grand
[15.30] Adding to bucket with keys [‹ w|frenoi ›, ‹ w|2230 ›, ‹ w|grand ›]
[15.49] 0 ids in bucket so far
[15.51] ** EXTEND_RESULTS_REDUCING_TOKENS **
[15.52] Bucket dry. Trying to remove some tokens.
[15.53] Adding to bucket with keys [‹ w|frenoi ›]
[15.72] 100 ids in bucket so far
[15.73] Computing results
[15.76] Done getting results data
[69.11] Done computing results
RUE DE FRESNOY 02110 CROIX FONSOMME (U1RSRUVUOjMxNDA3 | str_distance: 0.4313/1.0, importance: 0.1/0.1)
37 RUE DE FRESNOY 60134 VILLERS ST SEPULCRE (U1RSRUVUOjE0NzQ5MTA= | str_distance: 0.3892/1.0, importance: 0.1/0.1)
37 RUE DE FRESNOY 80700 ROYE (U1RSRUVUOjE5NDEzNTA= | str_distance: 0.3892/1.0, importance: 0.1/0.1)
37 RUE DE FRESNOY 80700 HATTENCOURT (U1RSRUVUOjE5MzY1NzA= | str_distance: 0.3892/1.0, importance: 0.1/0.1)
RUE DU FRESNOY 62300 LENS (U1RSRUVUOjE1MjAzMDk= | str_distance: 0.3477/1.0, importance: 0.1/0.1)
FRESNOY LE GRAND (Q0lUWTo3ODc= | str_distance: 0.3649/1.0, importance: 0.07/0.1)
37 RUE DU FRESNOY 59100 ROUBAIX (U1RSRUVUOjE0NDYxOTQ= | str_distance: 0.3306/1.0, importance: 0.1/0.1)
37 RUE DU FRESNOY 59200 TOURCOING (U1RSRUVUOjE0NTA5OTE= | str_distance: 0.3231/1.0, importance: 0.1/0.1)
37 RUE DU FRESNOY 59390 LYS LEZ LANNOY (U1RSRUVUOjE0MzgzOTY= | str_distance: 0.3231/1.0, importance: 0.1/0.1)
37 RUE DU FRESNOY 62161 MAROEUIL (U1RSRUVUOjE1MjMxODc= | str_distance: 0.3231/1.0, importance: 0.1/0.1)
69.6 ms — 1 run(s) — 10 results

Pouvez-vous m’aider ?

Merci.

Cette question aurait plus sa place sur https://github.com/addok/addok/issues

Je vois que le 02230 est désormais tokenizé en 2230 au lieu de 02230 en v0.5… je pense que ça vient de là.

Bonjour,

j’ai hésité dans la mesure où je n’ai pas d’éléments qui me permettent de parler d’un bug.
Peut-être plus lié à l’utilisation des plugins. De plus même si ma base n’est pas la BAN, je n’ai pas reproduis le problème sur l’API mise à disposition : http://api-adresse.data.gouv.fr/search/?q=37%20RUE%20DE%20CROIX%2002230%20FRESNOY%20LE%20GRAND

Sur la suppression du 0, je pense que c’est parce que j’ai addok_france.remove_leading_zeros d’activé.
Dans tous les cas, je suspectais le même problème mais le EXPLAIN en 1.0 révèle :

[8.796] New bucket with keys [‹ w|2230 ›, ‹ w|frenoi ›] and limit 10

Ce qui semble montrer que la clé est bien résolue.

Est-ce qu’on continue sur GH ?

Merci.

Bonjour,

Est-ce qu’il s’agit bien de la RC3 de Addok qui est testée ? Des améliorations significatives ont été ajoutées relatives à la pertinence des résultats remontés entre RC1, RC2 et RC3.

Bonjour,

non je suis juste sur la 1.0.0-rc1
Je vais essayer avec la RC3.

Guillaume

Même comportement sur le RC3, testable sur: http://ban.addok.xyz/search?q=37%20RUE%20DE%20CROIX%2002230%20FRESNOY%20LE%20GRAND

et ok sans CP: http://ban.addok.xyz/search?q=37%20RUE%20DE%20CROIX%20FRESNOY%20LE%20GRAND

EXPLAIN confirme que le CP est tronqué 02230 devient 2230 et n’est pas trouvé

Bonjour,

merci ! J’ouvre une issue sur GH.