Recherche d'une recherche

Le
Pascale
Depuis le temps que je le dis, il faudrait bien que je m'y mette : il me
faudrait un petit moteur de recherche sur l'un de mes sites.
Pas trop envie d'inviter la World Company (Google), en plus j'aimerais
pouvoir préciser dans quel(s) champ(s) se fait la recherche. De préférence
en PHP, comme ça il y aurait une petite chance que j'y comprenne un peu
quelque chose et que je puisse l'adapter à ce que je veux.
En faisant "search engine" chez Sourceforge, on trouve des quantités de
trucs, mais difficile de s'y retrouver et de faire son choix.
Quelqu'un aurait-il un avis, un conseil ?

--
Pascale
http://www.la-grille-verte.net
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Masson
Le #24096401
Le 20/12/2011 20:14, Pascale a écrit :
Depuis le temps que je le dis, il faudrait bien que je m'y mette : il me
faudrait un petit moteur de recherche sur l'un de mes sites.
Pas trop envie d'inviter la World Company (Google), en plus j'aimerais
pouvoir préciser dans quel(s) champ(s) se fait la recherche. De préférence
en PHP, comme ça il y aurait une petite chance que j'y comprenne un peu
quelque chose et que je puisse l'adapter à ce que je veux.
En faisant "search engine" chez Sourceforge, on trouve des quantités de
trucs, mais difficile de s'y retrouver et de faire son choix.
Quelqu'un aurait-il un avis, un conseil ?




Si ton site est géré par un CMS, c'est inclus donc je pense que ce n'est
pas le cas.
Sinon, il faut par exemple concevoir un système de tag pour être rapide
et efficace.
Si toutes tes données sont en base de données, tu trouveras probablement
des scripts en PHP. En MySQL et PostgreSQL, tu peux faire des recherches
sur les champs que tu souhaites mais aussi faire un recherche dite
fulltext, qui est très puissante (voir
http://dev.mysql.com/doc/refman/5.0/fr/fulltext-boolean.html et
http://docs.postgresql.fr/9.1/textsearch.html).
Si rien n'est en base, il exsite des outils natifs, au moins pour
PostgreSQL et surement pour MySQL, permettant d'indexer du texte brut,
mais la mise en place sera bien plus délicate.
Pascale
Le #24096671
Olivier Masson news:4ef218aa$0$2496$:

Si ton site est géré par un CMS, c'est inclus donc je pense que ce n'est
pas le cas.



'xactement !

Sinon, il faut par exemple concevoir un système de tag pour être rapide
et efficace.
Si toutes tes données sont en base de données, tu trouveras probablement
des scripts en PHP.



C'est le cas, en effet, tout est stocké dans les tables d'une base de
données.

En MySQL et PostgreSQL, tu peux faire des recherches
sur les champs que tu souhaites mais aussi faire un recherche dite
fulltext, qui est très puissante (voir
http://dev.mysql.com/doc/refman/5.0/fr/fulltext-boolean.html et
http://docs.postgresql.fr/9.1/textsearch.html).



Je ne connais pas la recherche fulltext, je vais aller voir ça.

Merci pour ton aide. Il m'a fallu un petit moment pour comprendre que la
plupart des moteurs de recherche tout faits ne convenaient pas dans mon
cas, car il ne s'agit pas d'indexer des pages, puisque ces pages sont
dynamiques, elles « n'existent » pas, ce que je cherche est entièrement
dans la base de données.

Sortir les résultats par ordre décroissant de pertinence ne va pas être
très simple me semble-t-il...

--
Pascale
http://www.la-grille-verte.net
Pascal Poncet
Le #24096721
Le 21/12/2011 19:52, Pascale a écrit :
Sortir les résultats par ordre décroissant de pertinence ne va pas être
très simple me semble-t-il...



Pour sûr, vu que la World Company, comme tu l'appelles, emploie une
armée de docteurs en mathématique pour affiner ses algorithmes.
Voir
[http://www.claymath.org/programs/outreach/academy/LectureNotes/Carlson.pdf]
pour les boss en math !

Cela dit, avec une simple instruction LIKE '%recherche%' dans une clause
WHERE, tu arrives à de pas trop mauvais résultats.
Voir
[http://dev.mysql.com/doc/refman/5.0/fr/string-comparison-functions.html]

Attention, toutefois, à bien gérer le collationnement, sinon tu auras
des problèmes avec les caractères accentués.
Voir [http://dev.mysql.com/doc/refman/5.0/fr/charset-defaults.html]


--
Cordialement,
Pascal
Denis Beauregard
Le #24096981
Le Wed, 21 Dec 2011 20:28:15 +0100, Pascal Poncet
fr.comp.infosystemes.www.auteurs:

Le 21/12/2011 19:52, Pascale a écrit :
Sortir les résultats par ordre décroissant de pertinence ne va pas être
très simple me semble-t-il...



Pour sûr, vu que la World Company, comme tu l'appelles, emploie une
armée de docteurs en mathématique pour affiner ses algorithmes.
Voir
[http://www.claymath.org/programs/outreach/academy/LectureNotes/Carlson.pdf]
pour les boss en math !



Je ne suis pas certain du tout qu'il s'agisse de docteurs en
math !!! Je fais en général 3 sortes de recherches.

En généalogie, il s'agit en général d'un couple ou d'une personne.
Google favorise les sites qui copient et on trouve donc au début
des résultats de 123people, pipl, yasni et autres requins qui
utilisent l'API de Yahoo.

Mon 2e type de recherches, c'est pour savoir comment faire quelque
chose. Ici, ce sont surtout des blogues qui sortent au début, donc
n'importe quoi écrit par n'importe qui et souvent pas très pertinent.

Je cherche aussi des informations sur des produits précis. Par
exemple, j'ai acheté tel machin et je voudrais voir le site du
fabricant. Le résultat, ce sont plutôt des sites vendeurs et non des
sites utiles.

Alors, pour les algorithmes, c'est foutu depuis longtemps.

Cela dit, avec une simple instruction LIKE '%recherche%' dans une clause
WHERE, tu arrives à de pas trop mauvais résultats.
Voir
[http://dev.mysql.com/doc/refman/5.0/fr/string-comparison-functions.html]



Cela dépend aussi du nombre de données et de l'affluence sur le site.
Avec 50 000 mots, cela doit répondre assez rapidement. Avec 1 million,
le like % commence à être lent et il vaut mieux optimiser.

Attention, toutefois, à bien gérer le collationnement, sinon tu auras
des problèmes avec les caractères accentués.
Voir [http://dev.mysql.com/doc/refman/5.0/fr/charset-defaults.html]



Ne pas oublier non plus qu'il y a des conversions automatisées et donc
que les résultats sont parfois étranges...


Denis
Olivier Masson
Le #24098151
Le 21/12/2011 19:52, Pascale a écrit :

Merci pour ton aide. Il m'a fallu un petit moment pour comprendre que la
plupart des moteurs de recherche tout faits ne convenaient pas dans mon
cas, car il ne s'agit pas d'indexer des pages, puisque ces pages sont
dynamiques, elles « n'existent » pas, ce que je cherche est entièrement
dans la base de données.




Comment est conçu ton site s'il utilise une base de données mais que ce
n'est pas un CMS ? Lorsque tu ajoutes un article, tu fais comment ? Tu
n'as pas de mots-clés associés aux articles ?

Sortir les résultats par ordre décroissant de pertinence ne va pas être
très simple me semble-t-il...




C'est le but des algo fulltext : les résultats sont classés par
pertinence. La mise en place n'est pas trop complexe, mais il faut
prendre pas mal de précautions s'il s'agit d'un site avec bcp de visites
ou hébergé sur un petit serveur.
Bref, si tu veux faire ça sur la-grille-verte, je pense qu'il faut bien
bossé avant.
C'est aussi le gros problème des requêtes SQL : on trouve des tonnes
d'exemples simples et la mise en place des requêtes classiques est
facile, mais c'est souvent très très mal optimisé.
Pascale
Le #24099451
Olivier Masson news:4ef30fe8$0$5698$:

Comment est conçu ton site s'il utilise une base de données mais que ce
n'est pas un CMS ? Lorsque tu ajoutes un article, tu fais comment ? Tu
n'as pas de mots-clés associés aux articles ?



On ne peut pas dire que j'ajoute des articles à proprement parler.
Regarde : http://www.la-grille-verte.net/kekcestruc/kekmenu.php

La 1ère version du site date de 1999, c'était un site interactif avant
l'heure.

Bon d'accord, le design est encore vieillot (la version actuelle date de
2007), mais ça marche (-:

L'idée principale est de permettre une recherche parmi les plantes
identifiées, simple recherche sur le nom pour l'instant. Je ne cherche pas
à faire des choses très compliquées, mais il faudrait par exemple que si
une personne tape : « lavendula oficinalis », ou « lavandula officinal »,
je sois capable de lui fournir comme résultat Lavandula officinalis syn.
angustifolia. Si la personne entre comme recherche « renoncule », ce serait
bien que je puisse lui sortir comme résultat les Ranunculus que j'ai en
stock, mais ça, c'est un peu du luxe (car en principe, on n'a que les
noms scientifiques, pas les noms vernaculaires)... J'envisageais d'utiliser
la fonction metaphone dans PHP, je crois que ça marche pas mal.
Le problème, c'est que je suis une buse en MySQL, pas guère mieux en PHP...
et j'ai même du mal à savoir ce qui est du ressort de l'un et de l'autre.
Par exemple, si une personne recherche « rosa », si je demande à MySQL tout
ce qui est "LIKE" rosa, je pense qu'il saura me ressortir « Rosa
damascena », « Rosa canina », etc. Par contre, si une personne recherche
« rotgersia », je pense que seule l'utilisation de metaphone en PHP
permettra de trouver « Rodgersia ».

En gros, plus je réfléchis, moins je trouve (:

C'est le but des algo fulltext : les résultats sont classés par
pertinence. La mise en place n'est pas trop complexe, mais il faut
prendre pas mal de précautions s'il s'agit d'un site avec bcp de visites
ou hébergé sur un petit serveur.



Je n'ai quand même que quelques milliers d'enregistrements, et le site
n'est pas aussi fréquenté qu'il l'a été par le passé, il faut le
reconnaître. Je doute d'arriver à une saturation du serveur, par contre, ce
que je redoute plus, ce serait des temps de réponse des requêtes qui
énerveraient les visiteurs.

Bref, si tu veux faire ça sur la-grille-verte, je pense qu'il faut bien
bossé avant.
C'est aussi le gros problème des requêtes SQL : on trouve des tonnes
d'exemples simples et la mise en place des requêtes classiques est
facile, mais c'est souvent très très mal optimisé.



Oui, ta remarque ne m'étonne pas, hélas.

--
Pascale
http://www.la-grille-verte.net
Olivier Masson
Le #24099541
Le 22/12/2011 19:20, Pascale a écrit :
Olivier Masson news:4ef30fe8$0$5698$:

Comment est conçu ton site s'il utilise une base de données mais que ce
n'est pas un CMS ? Lorsque tu ajoutes un article, tu fais comment ? Tu
n'as pas de mots-clés associés aux articles ?



On ne peut pas dire que j'ajoute des articles à proprement parler.
Regarde : http://www.la-grille-verte.net/kekcestruc/kekmenu.php

La 1ère version du site date de 1999, c'était un site interactif avant
l'heure.



Je connais ton site que j'ai utilisé quelques fois. Je pense même que tu
as répondu jadis à certaines de mes questions sur le groupe jardinage.


Bon d'accord, le design est encore vieillot (la version actuelle date de
2007), mais ça marche (-:

L'idée principale est de permettre une recherche parmi les plantes
identifiées, simple recherche sur le nom pour l'instant.



Ça, c'est élémentaire si un champs de ta table comporte le nom.
Toutefois, la recherche fulltext pourrait être très utile car taper
exactement le nom latin d'une plante n'est pas évident. En cas
d'approximation, la recherche fulltext devrait renvoyer les bons résultats.

à faire des choses très compliquées, mais il faudrait par exemple que si
une personne tape : « lavendula oficinalis », ou « lavandula officinal »,
je sois capable de lui fournir comme résultat Lavandula officinalis syn.
angustifolia. Si la personne entre comme recherche « renoncule », ce serait
bien que je puisse lui sortir comme résultat les Ranunculus que j'ai en
stock, mais ça, c'est un peu du luxe (car en principe, on n'a que les
noms scientifiques, pas les noms vernaculaires)... J'envisageais d'utiliser
la fonction metaphone dans PHP, je crois que ça marche pas mal.
Le problème, c'est que je suis une buse en MySQL, pas guère mieux en PHP...
et j'ai même du mal à savoir ce qui est du ressort de l'un et de l'autre.
Par exemple, si une personne recherche « rosa », si je demande à MySQL tout
ce qui est "LIKE" rosa, je pense qu'il saura me ressortir « Rosa
damascena », « Rosa canina », etc. Par contre, si une personne recherche
« rotgersia », je pense que seule l'utilisation de metaphone en PHP
permettra de trouver « Rodgersia ».



Effectivement, like ne te sera d'aucune aide.
Pour metaphone (je connaissais soundex, mais c'est un alias), cela te
permet de comparer 2 chaînes. Or toi, tu veux comparer une chaîne et un
possible résultat dans une base. Certes, si tu as peu de références, tu
peux comparer le mot entré avec toutes les références de ta base.
Par contre, la fonction soundex de PHP se base sur la prononciation
anglaise.
Donc soit tu trouves une implémentation française (j'ai déjà vu ça),
soit tu utilises la fonction levenshtein qui trouve la "distance" entre
2 mots, en fonction des différences. Ainsi, tu peux considérer que la
plus courte distance correspond au résultat le plus probable (sauf si la
distance reste trop importante). Mais ceci risque d'être très très
gourmand en CPU.

Je pense qu'il faudrait utiliser du fulltext et demander à l'utilisateur
s'il entre le nom commun ou latin. Ainsi, tu fais une recherche fulltext
sur le bon champ et tu sors le nom latin/commun associé (et les photos,
etc.)


En gros, plus je réfléchis, moins je trouve (:

C'est le but des algo fulltext : les résultats sont classés par
pertinence. La mise en place n'est pas trop complexe, mais il faut
prendre pas mal de précautions s'il s'agit d'un site avec bcp de visites
ou hébergé sur un petit serveur.



Je n'ai quand même que quelques milliers d'enregistrements, et le site
n'est pas aussi fréquenté qu'il l'a été par le passé, il faut le
reconnaître. Je doute d'arriver à une saturation du serveur, par contre, ce
que je redoute plus, ce serait des temps de réponse des requêtes qui
énerveraient les visiteurs.



Ton site est bien, mais pas très beau (pour rester gentil ;)) et pas du
tout ergonomique. Du coup, je doute qu'il soit très bien référencé.
Pour la durée des requêtes, il faut tester. Je n'ai jamais fait de
fulltext ; je m'y intéresse car je cherche à faire une GED (gestion
electronique de documents) sommaire donc je regarde toutes les solutions
(et c'est surtout Lucene qui s'impose).

Si tu as besoin d'un coup de main, je ferai ce que je peux, dans la
limite du temps dispo.
Pascale
Le #24100261
Olivier Masson news:4ef38328$0$2522$:

Je connais ton site que j'ai utilisé quelques fois. Je pense même que
tu as répondu jadis à certaines de mes questions sur le groupe
jardinage.



C'est bien possible. Je ne viens plus guère sur frj, il a été envahi par de
la végétation très très indésirable, le genre qui étouffe tout sur son
passage...

Ça, c'est élémentaire si un champs de ta table comporte le nom.



Oui, c'est bien sûr le cas.

Toutefois, la recherche fulltext pourrait être très utile car taper
exactement le nom latin d'une plante n'est pas évident. En cas
d'approximation, la recherche fulltext devrait renvoyer les bons
résultats.



C'est ce qui me faudrait, oui !

Effectivement, like ne te sera d'aucune aide.
Pour metaphone (je connaissais soundex, mais c'est un alias), cela te
permet de comparer 2 chaînes. Or toi, tu veux comparer une chaîne et
un possible résultat dans une base. Certes, si tu as peu de
références, tu peux comparer le mot entré avec toutes les références
de ta base. Par contre, la fonction soundex de PHP se base sur la
prononciation anglaise.
Donc soit tu trouves une implémentation française (j'ai déjà vu ça),
soit tu utilises la fonction levenshtein qui trouve la "distance"
entre 2 mots, en fonction des différences. Ainsi, tu peux considérer
que la plus courte distance correspond au résultat le plus probable
(sauf si la distance reste trop importante). Mais ceci risque d'être
très très gourmand en CPU.



On a en effet utilisé ça (je dis on, parce que c'est mon alter ego qui a
écrit le programme, mais j'ai participé aussi !), levenshtein ET metaphone
pour un traitement ponctuel sur une liste de communes. Je ne me souviens
même pas trop à quoi servait ce programme, mais je me rappelle que ça avait
parfaitement marché, et on en a presque été surpris car on craignait
justement que la prononciation anglo-saxonne nous pose des soucis, mais en
fait non.

Je pense qu'il faudrait utiliser du fulltext et demander à
l'utilisateur s'il entre le nom commun ou latin. Ainsi, tu fais une
recherche fulltext sur le bon champ et tu sors le nom latin/commun
associé (et les photos, etc.)



Je ne peux pas proposer ça car en principe, le champ « nom » ne contient
que le nom scientifique, donc latin (même si parfois on trouve le nom
français le plus courant, mais c'est rarement le cas).

Ton site est bien, mais pas très beau (pour rester gentil ;))



Maisheuuuu... pour ma défense, je dirai que c'était mon tout premier site
et que je suis une autodidacte complète. Par contre, j'ai mis un p'tit coup
de ripolin sur la façade, voici quelques temps : http://www.la-grille-
verte.net

et pas du tout ergonomique.



Ça, c'est plus embêtant... Autant je vois ce qui est ringard dans la
présentation, autant j'ai du mal à imaginer vraiment autre chose pour
l'ergonomie. Par contre, quand je l'ai refait en 2007, vu la masse de
travail générée par sa gestion à l'époque, je l'ai rendu beaucoup plus
ergonomique et beaucoup plus automatisé... pour moi, c'est déjà ça (:

Du coup, je doute qu'il soit très bien référencé.
Pour la durée des requêtes, il faut tester. Je n'ai jamais fait de
fulltext ; je m'y intéresse car je cherche à faire une GED (gestion
electronique de documents) sommaire donc je regarde toutes les
solutions (et c'est surtout Lucene qui s'impose).



Il faut que je me replonge dans les docs que tu m'as indiquées.

Si tu as besoin d'un coup de main, je ferai ce que je peux, dans la
limite du temps dispo.



C'est sympa, et je ne refuse pas, parce que là je m'aventure en terrain
très inconnu...

--
Pascale
http://www.la-grille-verte.net
Olivier Masson
Le #24100651
Le 23/12/2011 09:07, Pascale a écrit :


On a en effet utilisé ça (je dis on, parce que c'est mon alter ego qui a
écrit le programme, mais j'ai participé aussi !), levenshtein ET metaphone
pour un traitement ponctuel sur une liste de communes. Je ne me souviens
même pas trop à quoi servait ce programme, mais je me rappelle que ça avait
parfaitement marché, et on en a presque été surpris car on craignait
justement que la prononciation anglo-saxonne nous pose des soucis, mais en
fait non.



Oui, la distance Levenshtein fonctionne bien. Il faudrait vraiment
comparer la vitesse avec cette méthode et avec la méthode fulltext.


Je pense qu'il faudrait utiliser du fulltext et demander à
l'utilisateur s'il entre le nom commun ou latin. Ainsi, tu fais une
recherche fulltext sur le bon champ et tu sors le nom latin/commun
associé (et les photos, etc.)



Je ne peux pas proposer ça car en principe, le champ « nom » ne contient
que le nom scientifique, donc latin (même si parfois on trouve le nom
français le plus courant, mais c'est rarement le cas).



Pourquoi, il y a déjà un champs de recherche quelque part ? Jamais vu.
Mais si tu souhaites mettre un moteur de recherche pertinent, tu peux en
profiter pour créer un page spécifique avec quelques champs : nom
commun, nom latin et autres champs que tu auras dans la base (famille,
floraison, etc.)


Ça, c'est plus embêtant... Autant je vois ce qui est ringard dans la
présentation, autant j'ai du mal à imaginer vraiment autre chose pour
l'ergonomie. Par contre, quand je l'ai refait en 2007, vu la masse de
travail générée par sa gestion à l'époque, je l'ai rendu beaucoup plus
ergonomique et beaucoup plus automatisé... pour moi, c'est déjà ça (:



Déjà, on ne centre pas du texte, uniquement les titres. Le texte centré
ne se lit pas naturellement.
Ensuite, évite les liens avec l'attribut target="_blank" : c'est agaçant
et ce n'est plus du tout la règle (ça ne l'a jamais été, mais ce fut
commun).
Pour le reste, disons qu'il est très facile de se perdre sur ton site.
C'est ce qui pourrait faire son charme, mais comme il est difficile à
lire à cause de sa mise en page, on est tenté de fermer.


C'est sympa, et je ne refuse pas, parce que là je m'aventure en terrain
très inconnu...




Tu me diras. Si ton ami(e) a pu utiliser lenvenshtein+soundex, je pense
qu'il s'en sortira avec fulltext, mais n'hésite pas à m'envoyer la base
(même avec les infos mélangées pour que je n'ai pas les infos) pour que
je teste.
Pascale
Le #24116561
Désolée de ne pas avoir répondu, ce n'est pas très poli de ma part.
J'ai été attaquée par une crise de flemme aiguë, je reprendrai la
discussion un peu plus tard.
En attendant, merci et bonne année 2012 !

--
Pascale
http://www.la-grille-verte.net
Publicité
Poster une réponse
Anonyme