10
105
Fork
You've already forked web
30

À propos de la recherche #399

Open
opened 2024年07月02日 15:13:39 +02:00 by laem · 15 comments
Owner
Copy link

Quelques notes sur la recherche. C'est un élément crucial de l'application.

On a la chance d'avoir Photon, par Komoot. C'est un logiciel incroyable par rapport à ce qu'il y avait avant.

Cependant, il n'a pas la puissance de Google notamment pour faire la part entre les recherches locales et les recherches globales. D'où le bouton "rechercher ici", qu'il faudrait peut-être revoir (son texte, son style, icône, etc) mais qui est incontournable à ce stade.

Voici les tickets ouverts au sujet de la recherche :
https://codeberg.org/cartes/web/issues?state=open&type=all&labels=1331235

Quelques notes sur la recherche. C'est un élément crucial de l'application. On a la chance d'avoir Photon, par Komoot. C'est un logiciel incroyable par rapport à ce qu'il y avait avant. Cependant, il n'a pas la puissance de Google notamment pour faire la part entre les recherches locales et les recherches globales. D'où le bouton "rechercher ici", qu'il faudrait peut-être revoir (son texte, son style, icône, etc) mais qui est incontournable à ce stade. Voici les tickets ouverts au sujet de la recherche : https://codeberg.org/cartes/web/issues?state=open&type=all&labels=1331235

Je découvre que photon a déjà des options pour faire des requêtes plus ciblées, par exemple en filtrant par tag osm, ou par niveau de lieu (rue, quartier, ville). Est ce déjà utilisé ?

Je me dis qu'on pourrait pré-analyser le texte pour appliquer des filtrages, par ex :

  • filter sur layer=street quand la requête inclut les mots rue, avenue, boulevard, place,...
  • filter sur tag swimming_pool quand la requête inclut piscine, etc : il faudrait pouvoir réutiliser le dictionnaire des catégories pour avoir la correspondance entre synonyme et tag.

En fait, pour éviter les échecs, il faudra toujours lancer une requête globale en parallèle de la requête ciblée, pour l'afficher si la requête filtrée ne donne rien. Si les 2 ont des résultats, on affiche en premier ceux de la requête ciblée.

Dans la même idée, je me dis qu'il doit être très très classique de chercher une ville. On pourrait toujours lancer une requête filtrée sur layer=city. Si il y a un match on l'affiche en premier avant les résultats de la recherche globale.

Évidemment si on fusionne des résultats de plusieurs requêtes, il faudra éliminer les doublons.

Je découvre que photon a déjà des options pour faire des requêtes plus ciblées, par exemple en filtrant par tag osm, ou par niveau de lieu (rue, quartier, ville). Est ce déjà utilisé ? Je me dis qu'on pourrait pré-analyser le texte pour appliquer des filtrages, par ex : - filter sur layer=street quand la requête inclut les mots rue, avenue, boulevard, place,... - filter sur tag swimming_pool quand la requête inclut piscine, etc : il faudrait pouvoir réutiliser le dictionnaire des catégories pour avoir la correspondance entre synonyme et tag. En fait, pour éviter les échecs, il faudra toujours lancer une requête globale en parallèle de la requête ciblée, pour l'afficher si la requête filtrée ne donne rien. Si les 2 ont des résultats, on affiche en premier ceux de la requête ciblée. Dans la même idée, je me dis qu'il doit être très très classique de chercher une ville. On pourrait toujours lancer une requête filtrée sur layer=city. Si il y a un match on l'affiche en premier avant les résultats de la recherche globale. Évidemment si on fusionne des résultats de plusieurs requêtes, il faudra éliminer les doublons.
Author
Owner
Copy link

D'ailleurs à ce propos, on a déjà un peu d'intelligence en plus dans la recherche, voir la détection d'itinéraires et de code postal. https://github.com/cartesapp/cartes/blob/master/app/PlaceSearch/index.tsx#L132-L183

Je suis à fond pour ajouter la détection de types de lieux pour palier aux défauts de Photon, style "Hotel Tipi" qui n'est pas trouvé mais qui le serait avec "catégorie=hotel" + "nom=Tipi" https://forum.openstreetmap.fr/t/une-recherche-dhotel-infructueuse/32686

D'ailleurs à ce propos, on a déjà un peu d'intelligence en plus dans la recherche, voir la détection d'itinéraires et de code postal. https://github.com/cartesapp/cartes/blob/master/app/PlaceSearch/index.tsx#L132-L183 Je suis à fond pour ajouter la détection de types de lieux pour palier aux défauts de Photon, style "Hotel Tipi" qui n'est pas trouvé mais qui le serait avec "catégorie=hotel" + "nom=Tipi" https://forum.openstreetmap.fr/t/une-recherche-dhotel-infructueuse/32686

j'ai regardé photon, je crois qu'il va me manquer les scores des résultats dans chaque requête pour pouvoir fusionner intelligemment les résultats, j'ai posé la question ici : https://github.com/komoot/photon/discussions/911

j'ai regardé photon, je crois qu'il va me manquer les scores des résultats dans chaque requête pour pouvoir fusionner intelligemment les résultats, j'ai posé la question ici : https://github.com/komoot/photon/discussions/911
Author
Owner
Copy link

Par contre je crois qu'il y a deux freins à l'utilisation de ces structured queries. L'une est qu'il faut qu'on importe la base de données nous mêmes plutôt que de simplement télécharger l'archive.
Image
L'autre qu'il faut passer à la version OpenSearch expérimentale.

Par contre je crois qu'il y a deux freins à l'utilisation de ces structured queries. L'une est qu'il faut qu'on importe la base de données nous mêmes plutôt que de simplement télécharger l'archive. ![Image](https://github.com/user-attachments/assets/448cc1be-807a-4de7-9027-a16730f0e1fa) L'autre qu'il faut passer à la version OpenSearch expérimentale.

Je pense qu'on n'a pas besoin des structured search. C'est fait pour chercher street=xx dans city=yy. Ça impliquerait, pour écrire la requête, qu'on prétraite l'input pour identifier quel mot est la ville et quel mot est la rue, c'est trop compliqué.

Je pensais plutôt utiliser les requêtes classiques, filtrées par tag ou par layer, par ex :
q=rennes&layer=city&layer=locality

Je pense qu'on n'a pas besoin des structured search. C'est fait pour chercher `street=xx` dans `city=yy`. Ça impliquerait, pour écrire la requête, qu'on prétraite l'input pour identifier quel mot est la ville et quel mot est la rue, c'est trop compliqué. Je pensais plutôt utiliser les requêtes classiques, filtrées par tag ou par layer, par ex : `q=rennes&layer=city&layer=locality`
Un autre cas de recherche foireuse signalé ici : https://forum.openstreetmap.fr/t/recherche-et-affichage-de-communes-anciennes-communes/35148

J'ai eu une autre idée d'implémentation.
On garde la recherche actuelle au début.
Mais on chronomètre le temps passé depuis la 1ère lettre tapée.
Si l'utilisateur n'a pas trouvé au bout de 15s, on affiche un message et des boutons:

Le monde est grand, j'ai besoin d'un peu d'aide. Cherchez vous une ville ? Une adresse ? Un magasin ?

Le défaut : ça envoie le message que notre recherche est un peu pourrie...
@laem un avis ?

J'ai eu une autre idée d'implémentation. On garde la recherche actuelle au début. Mais on chronomètre le temps passé depuis la 1ère lettre tapée. Si l'utilisateur n'a pas trouvé au bout de 15s, on affiche un message et des boutons: ``` Le monde est grand, j'ai besoin d'un peu d'aide. Cherchez vous une ville ? Une adresse ? Un magasin ? ``` Le défaut : ça envoie le message que notre recherche est un peu pourrie... @laem un avis ?
Author
Owner
Copy link

Mmh, pas convaincu car dans de nombreux cas 15 secondes c'est beaucoup trop (l'utilisateur sera déjà passé à autre chose, aura dézoomé par exemple) et dans d'autres c'est trop peu. Les UX qui chronomètrent sont pour cette raison très compliquées à gérer, on peut déclencher des effets de bord non désirés.

À mon avis une mise en avant du bouton "rechercher ici" pourrait résoudre l'essentiel du problème, et une deuxième requête photon sur les villes seulement à mélanger aux résultats de la recherche locale en position 1 ou 2 pourrait en résoudre 80%, non ?

Mmh, pas convaincu car dans de nombreux cas 15 secondes c'est beaucoup trop (l'utilisateur sera déjà passé à autre chose, aura dézoomé par exemple) et dans d'autres c'est trop peu. Les UX qui chronomètrent sont pour cette raison très compliquées à gérer, on peut déclencher des effets de bord non désirés. À mon avis une mise en avant du bouton "rechercher ici" pourrait résoudre l'essentiel du problème, et une deuxième requête photon sur les villes seulement à mélanger aux résultats de la recherche locale en position 1 ou 2 pourrait en résoudre 80%, non ?

Les UX qui chronomètrent sont pour cette raison très compliquées à gérer

OK je n'avais pas ça en tête.

À mon avis une mise en avant du bouton "rechercher ici" pourrait résoudre l'essentiel du problème,

Ça me fait penser que chez moi, il est la plupart du temps caché par le clavier... Il faudrait le remonter au niveau de la barre de recherche. Peut être avec un sélecteur à 2 positions ici o=o partout

une deuxième requête photon sur les villes

Ah oui c'est vrai, j'avais dit que je le ferai, et j'ai même pas commencé parce que l'instance était buguée...

> Les UX qui chronomètrent sont pour cette raison très compliquées à gérer OK je n'avais pas ça en tête. > À mon avis une mise en avant du bouton "rechercher ici" pourrait résoudre l'essentiel du problème, Ça me fait penser que chez moi, il est la plupart du temps caché par le clavier... Il faudrait le remonter au niveau de la barre de recherche. Peut être avec un sélecteur à 2 positions `ici o=o partout ` > une deuxième requête photon sur les villes Ah oui c'est vrai, j'avais dit que je le ferai, et j'ai même pas commencé parce que l'instance était buguée...

j'ai commencé une première amélioration dans #1231 : si on repère les mots "rue", "avenue", etc, on fait la recherche uniquement parmi les rues (c'est pas optimal car on perd les magasins dont le nom contient avenue).

Ca m'a donné une nouvelle idée d'UX : on transforme la coche "chercher ici" en un sélecteur partout / ici / adresse / ville. Si le script repère le mot rue, il active le sélecteur sur adresse, mais l'utilisateur pourra ensuite rebasculer sur partout ou ici.

@laem ton avis ?

j'ai commencé une première amélioration dans #1231 : si on repère les mots "rue", "avenue", etc, on fait la recherche uniquement parmi les rues (c'est pas optimal car on perd les magasins dont le nom contient avenue). Ca m'a donné une nouvelle idée d'UX : on transforme la coche "chercher ici" en un sélecteur `partout / ici / adresse / ville`. Si le script repère le mot rue, il active le sélecteur sur adresse, mais l'utilisateur pourra ensuite rebasculer sur `partout` ou `ici`. @laem ton avis ?

@etienneJr wrote in #399 (comment):

Je découvre que photon a déjà des options pour faire des requêtes plus ciblées, par exemple en filtrant par tag osm

attention, tous les tags ne sont pas pris en charge, ça dépend des tags inclus dans la base nominatim qui a servi à construire la base photon. Le réglage par défaut est ici (si j'ai bien compris) :
https://github.com/osm-search/Nominatim/blob/master/lib-lua/themes/nominatim/presets.lua#L150-L242

@etienneJr wrote in https://codeberg.org/cartes/web/issues/399#issuecomment-5411706: > Je découvre que photon a déjà des options pour faire des requêtes plus ciblées, par exemple en filtrant par tag osm attention, tous les tags ne sont pas pris en charge, ça dépend des tags inclus dans la base nominatim qui a servi à construire la base photon. Le réglage par défaut est ici (si j'ai bien compris) : https://github.com/osm-search/Nominatim/blob/master/lib-lua/themes/nominatim/presets.lua#L150-L242
Author
Owner
Copy link

Ah merci ! Mince, quel bordel d'avoir juste une sélection éditoriale de certains tags.
Je me demande si c'est pas plus simple pour beaucoup de nos catégories de lancer la recherche Overpass sur la requête categories.yaml puis de filtrer ensuite les noms via Fuse, qui est de toutes façons déjà chargée dans l'app.

Bonus : on peut alors utiliser les attributs que Photon ignore, comme "short_name" https://github.com/komoot/photon/issues/934#issuecomment-4753479357.

Finalement, ça reviendrait à proposer une "recherche profonde", plus lente que la recherche de base, mais assistée et complète.

Bien sûr avec la limitation du zoom suffisant pour chercher. Mais y a moyen que ça couvre 90 % des besoins. Quand on cherche "boulangerie du Thabor", on est déjà a priori à un niveau de zoom élevé.

Quoique, beaucoup de gens doivent avoir le réflexe Googlesque de chercher ça avec un zoom sur la France. Mais bon, on résoudrait au moins une partie du problème et ce de façon générique pour toutes nos catégories.

Ah merci ! Mince, quel bordel d'avoir juste une sélection éditoriale de certains tags. Je me demande si c'est pas plus simple pour beaucoup de nos catégories de lancer la recherche Overpass sur la requête categories.yaml puis de filtrer ensuite les noms via Fuse, qui est de toutes façons déjà chargée dans l'app. Bonus : on peut alors utiliser les attributs que Photon ignore, comme "short_name" https://github.com/komoot/photon/issues/934#issuecomment-4753479357. Finalement, ça reviendrait à proposer une "recherche profonde", plus lente que la recherche de base, mais assistée et complète. Bien sûr avec la limitation du zoom suffisant pour chercher. Mais y a moyen que ça couvre 90 % des besoins. Quand on cherche "boulangerie du Thabor", on est déjà a priori à un niveau de zoom élevé. Quoique, beaucoup de gens doivent avoir le réflexe Googlesque de chercher ça avec un zoom sur la France. Mais bon, on résoudrait au moins une partie du problème et ce de façon générique pour toutes nos catégories.

@laem wrote in #399 (comment):

quel bordel d'avoir juste une sélection éditoriale de certains tags.

D'ailleurs Sarah déconseille le filtre par tag... Il faut utiliser les... catégories photon 😅
https://github.com/komoot/photon/discussions/1092#discussioncomment-17403471
Mais techniquement je ne sais pas si on peut le faire en utilisant les exports graphopper

@laem wrote in https://codeberg.org/cartes/web/issues/399#issuecomment-17935748: > quel bordel d'avoir juste une sélection éditoriale de certains tags. D'ailleurs Sarah déconseille le filtre par tag... Il faut utiliser les... catégories photon 😅 https://github.com/komoot/photon/discussions/1092#discussioncomment-17403471 Mais techniquement je ne sais pas si on peut le faire en utilisant les exports graphopper
Author
Owner
Copy link

Ah mais il est très intéressant ce commentaire, surtout la seconde partie.

Mais du coup, ces catégories "osm..", elles incluent seulement celles spécifiées dans le dico de ton lien plus haut ?

Ah mais il est très intéressant ce commentaire, surtout la seconde partie. Mais du coup, ces catégories "osm.<key>.<value>", elles incluent seulement celles spécifiées dans le dico de ton lien plus haut ?

@laem wrote in #399 (comment):

Mais du coup, ces catégories "osm..", elles incluent seulement celles spécifiées dans le dico de ton lien plus haut ?

Non, j'ai l'impression que c'est toi qui les définis après coup, donc que tu peux faire ce que tu veux.

@laem wrote in https://codeberg.org/cartes/web/issues/399#issuecomment-17939039: > Mais du coup, ces catégories "osm..", elles incluent seulement celles spécifiées dans le dico de ton lien plus haut ? Non, j'ai l'impression que c'est toi qui les définis après coup, donc que tu peux faire ce que tu veux.
Sign in to join this conversation.
No Branch/Tag specified
master
abostats
SynchroM-master
gps
embeddings
lysios-patch-5
lysios-patch-4
lysios-patch-3
lysios-patch-2
lysios-patch-1
abo-serveur2
clim
zone-en-favori
categories_toujours_visibles
rechercher_ici_avant_resultats
test-2365
panoramax-contribution
add-categories-validations
gel-bug-prod
osm-note-2
broken
wikidata_booking
fuse7.3
lysios-patrimoine-3
gps2
atproto-fix-2
styles-secondaires-mais-maison
atproto-scopes
itineraire-printemps-2026
modal-sheet-5.6
nlnet-cost-climate-perf
pb-icones-religieux
couvoiture
etiennejr-patch-2
meteo-fainéante
logo-static-url
poc-page-vitrine
remove-compass
test-reproduce-1795
display-cycleway-lanes-2
poc-image
add-media-condition
mapterhorn
test-indoor-equal
outdoors-VS-indoorEqual
hiking-colors
fix-blog-typing
poc-next-international
fix-map-style-modal-not-closing
i18n
hide-odd-zoom-levels
filter_categories
resume_wikipedia
deplacement_bouttons
fix-1095
mobile_permettre_selection
position-carte-initiale
dégradé-icônes
better_wikipedia
affichage_donnees_wikidata
mobile-permettre-selection
avis-details
perf-seo
modal-sheet-5
plans-novembre
display-cycleway-lanes
fix-1227
fix-1234
etiennejr-patch-1
update-1240
fix-1236
fix-1131
photon-search-street
fix-1221
article-avis
net-haut-zoom
baies-moins-visibles
belles-fiches-lieu
fix-1157
bug-page-vie-privée
use-watername
fix-1176
carte-du-onde
fix-1166
page-news
tchou
add-icon-alias
vitesse
photon-opensearch
private-in-italic
bâtiments-3D
merge-categories
handle-private-highway
improve-findcategory
injection-pmtiles
fix-1128
check-icons
update-readme
category-rugby
bug-position-carte-vs-lieu
limites-vitesse
improve-find-category-from-tags-v2
integrer
document-osmfeature
translate-document
velo-fin-aout-25
velo-ete-2025
moins-de-maptiler
planet-pmtiles-tilemaker
fix-1048
panoramax-leger
plume
horaires-i18n
planet
maj-deps-juillet-2025
improve-find-category-from-tags
bug-encart
interactions-encart-mobile
clic-on-station
fix-1028
fix-1014
edit
add-big-rivers
add-shortbread-tiles
handle-deleted-osm-elements-v2
codeberg
improve-useEffect
immoloc
update-dashboard
analyze
terradraw
sombre2
calendar
poi-sprites-using-svg
style-sombre
sprites
annuaire
motis-gtfs-attributes
next-styled-components
dev
cool2
cool
panoramax-angle
env-static-urls
borders-only
panoramax2
intelligence
debug-iles
nouveau-serveur
france-protomaps
turbo
fouss/cartes-#338
blog2
legislatives
presentation
pas-de-geoloc-si-hash-different
protomaps
vaul
carte-trains
citiz
maj-paquets
icones
ui2
bblog
voyagevoyage
test-image-origine
bugimagefin
searchParams
voyage
avion
perf
studio
piscine
journée
année
journée-transition
score-dès-acceuil
fix-space-problem
rebase-5août
correspondance
règles-séparées
indeps-acre
demo
indeps
indeps-cachés
indication-temps-plein
indeps-refactor-simulations
indeps-vue-comparaison
indeps-inversion
barème-continu
indeps-démo
textes-branches-sécu
engine-enum
2019
transport
publicodes
as
infrance-nouvelle-landing
better-translation
co2
simplifATMP
controle-SMIC
webi18n
bug-avantages-en-nature
revert-352-infrance-navigation-v2
laem-patch-1
robots.txt
improve-perf
iframe-bugfix
quickfixes
lib
irsimple
hiringinfrance.com
dégradé
refstate
johan
zrr
logo-interactif
revert-216-improve-tracking
redesign2
zrr2
fixtrad
correction-salaire-brut
petit-state
alien-consolidate
translate-ui
npm
alien-brut-net
translatable
différent
ir18
fix-typo
add-tracking
fix-collect-missing
défauts-partout
fix-double-unfold-three
fix-double-unfold
versement-transport
blocker-questions
v3
v2.1
v2
v1
v0.6.4
v0.6.3
v0.6.2
v0.6.1
v0.6.0
0.7.0
v0.5.1
v0.5.0
v0.4.2
v0.4.1
v0.4.0
v0.3.3
v0.3.2
v0.3.1
v0.3
v0.2
v0.1-cdd-alpha
v0-démo-tag-nav
Labels
Clear labels
🎨 Design
À propos de l'interface et de l'UX
💡 Idée
Nouvelle feature à intégrer
question
Further information is requested
🌍 OSM
À propos de l'affichage et l'édition des éléments OSM
🌱 Amélioration
Amélioration/fix de l'existant
🐞 Bug
Something isn't working
📊 SEO
📋 Catégories
À propos des catégories de recherche et de l'annuaire
📖 Wiki
📝Avis
A propos de la fonction avis et de bluesky
📢 Oyez
📷 Photos
A propos des photos (sources, affichage)
🔍Recherche
A propos de la barre de recherche et de photon
🔥 Actuel
🔧 tech
🖌 Styles
Styles de la carte
🧝i18n
🧪 R&D
🚍 Transports
🚙 Voiture
🚨Prioritaire
Ticket à traiter rapidement
🚲Vélo
Cartes
climat
Communication
demo
Cette branche doit être déployée comme une démo
dependencies
Pull requests that update a dependency file
javascript
Pull requests that update javascript code
Pas urgent
Plein-air
Tuiles
Verso
Vieux
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cartes/web#399
Reference in a new issue
cartes/web
No description provided.
Delete branch "%!s()"

Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?